databricksedu 0.1.0__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. {databricksedu-0.1.0 → databricksedu-0.2.0}/PKG-INFO +16 -12
  2. {databricksedu-0.1.0 → databricksedu-0.2.0}/README.md +15 -11
  3. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/160-auto-loader-copy-into/module.md +13 -20
  4. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/190-declarative-pipelines/module.md +3 -4
  5. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/010-retail-data/module.md +14 -9
  6. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/020-iot-data/module.md +6 -7
  7. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/010-lakeflow-connect-recap/module.md +4 -5
  8. databricksedu-0.2.0/src/databricksedu/_content/nb/agents-tools.json.gz +0 -0
  9. databricksedu-0.2.0/src/databricksedu/_content/nb/ai-bi-dashboards.json.gz +0 -0
  10. databricksedu-0.2.0/src/databricksedu/_content/nb/ai-functions-gateway.json.gz +0 -0
  11. databricksedu-0.2.0/src/databricksedu/_content/nb/asset-bundles-cicd.json.gz +0 -0
  12. databricksedu-0.2.0/src/databricksedu/_content/nb/auto-loader-copy-into.json.gz +0 -0
  13. databricksedu-0.2.0/src/databricksedu/_content/nb/cdc-data.json.gz +0 -0
  14. databricksedu-0.2.0/src/databricksedu/_content/nb/cdc-scd.json.gz +0 -0
  15. databricksedu-0.2.0/src/databricksedu/_content/nb/change-data-feed.json.gz +0 -0
  16. databricksedu-0.2.0/src/databricksedu/_content/nb/chunking-parsing.json.gz +0 -0
  17. databricksedu-0.2.0/src/databricksedu/_content/nb/churn-data.json.gz +0 -0
  18. databricksedu-0.2.0/src/databricksedu/_content/nb/data-privacy-recap.json.gz +0 -0
  19. databricksedu-0.2.0/src/databricksedu/_content/nb/data-quality-expectations.json.gz +0 -0
  20. databricksedu-0.2.0/src/databricksedu/_content/nb/declarative-pipelines.json.gz +0 -0
  21. databricksedu-0.2.0/src/databricksedu/_content/nb/deletion-vectors.json.gz +0 -0
  22. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-acid-concurrency.json.gz +0 -0
  23. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-dml-merge.json.gz +0 -0
  24. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-optimization.json.gz +0 -0
  25. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-sharing.json.gz +0 -0
  26. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-table-anatomy.json.gz +0 -0
  27. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-time-travel-vacuum.json.gz +0 -0
  28. databricksedu-0.2.0/src/databricksedu/_content/nb/delta-transaction-log.json.gz +0 -0
  29. databricksedu-0.2.0/src/databricksedu/_content/nb/embeddings-vector-search.json.gz +0 -0
  30. databricksedu-0.2.0/src/databricksedu/_content/nb/feature-engineering.json.gz +0 -0
  31. databricksedu-0.2.0/src/databricksedu/_content/nb/genai-evaluation.json.gz +0 -0
  32. databricksedu-0.2.0/src/databricksedu/_content/nb/genie-spaces.json.gz +0 -0
  33. databricksedu-0.2.0/src/databricksedu/_content/nb/hr-data.json.gz +0 -0
  34. databricksedu-0.2.0/src/databricksedu/_content/nb/hyperparameter-tuning.json.gz +0 -0
  35. databricksedu-0.2.0/src/databricksedu/_content/nb/iot-data.json.gz +0 -0
  36. databricksedu-0.2.0/src/databricksedu/_content/nb/lakeflow-connect-recap.json.gz +0 -0
  37. databricksedu-0.2.0/src/databricksedu/_content/nb/lakeflow-jobs.json.gz +0 -0
  38. databricksedu-0.2.0/src/databricksedu/_content/nb/lakehouse-architecture.json.gz +0 -0
  39. databricksedu-0.2.0/src/databricksedu/_content/nb/lineage-system-tables.json.gz +0 -0
  40. databricksedu-0.2.0/src/databricksedu/_content/nb/llm-basics.json.gz +0 -0
  41. databricksedu-0.2.0/src/databricksedu/_content/nb/medallion-architecture.json.gz +0 -0
  42. databricksedu-0.2.0/src/databricksedu/_content/nb/metric-views.json.gz +0 -0
  43. databricksedu-0.2.0/src/databricksedu/_content/nb/ml-lifecycle.json.gz +0 -0
  44. databricksedu-0.2.0/src/databricksedu/_content/nb/mlflow-tracking.json.gz +0 -0
  45. databricksedu-0.2.0/src/databricksedu/_content/nb/model-monitoring.json.gz +0 -0
  46. databricksedu-0.2.0/src/databricksedu/_content/nb/model-serving.json.gz +0 -0
  47. databricksedu-0.2.0/src/databricksedu/_content/nb/models-in-unity-catalog.json.gz +0 -0
  48. databricksedu-0.2.0/src/databricksedu/_content/nb/parquet-files.json.gz +0 -0
  49. databricksedu-0.2.0/src/databricksedu/_content/nb/performance-optimization-recap.json.gz +0 -0
  50. databricksedu-0.2.0/src/databricksedu/_content/nb/prompt-engineering.json.gz +0 -0
  51. databricksedu-0.2.0/src/databricksedu/_content/nb/rag-architecture.json.gz +0 -0
  52. databricksedu-0.2.0/src/databricksedu/_content/nb/retail-data.json.gz +0 -0
  53. databricksedu-0.2.0/src/databricksedu/_content/nb/row-filters-column-masks.json.gz +0 -0
  54. databricksedu-0.2.0/src/databricksedu/_content/nb/schema-enforcement-evolution.json.gz +0 -0
  55. databricksedu-0.2.0/src/databricksedu/_content/nb/spark-architecture.json.gz +0 -0
  56. databricksedu-0.2.0/src/databricksedu/_content/nb/spark-joins-shuffles.json.gz +0 -0
  57. databricksedu-0.2.0/src/databricksedu/_content/nb/sql-warehouses.json.gz +0 -0
  58. databricksedu-0.2.0/src/databricksedu/_content/nb/streaming-pipelines-recap.json.gz +0 -0
  59. databricksedu-0.2.0/src/databricksedu/_content/nb/structured-streaming-basics.json.gz +0 -0
  60. databricksedu-0.2.0/src/databricksedu/_content/nb/support-data.json.gz +0 -0
  61. databricksedu-0.2.0/src/databricksedu/_content/nb/uc-privileges.json.gz +0 -0
  62. databricksedu-0.2.0/src/databricksedu/_content/nb/unity-catalog-basics.json.gz +0 -0
  63. databricksedu-0.2.0/src/databricksedu/_content/nb/watermarks-stateful-streaming.json.gz +0 -0
  64. databricksedu-0.2.0/src/databricksedu/_content/web/agents-tools.b64 +1 -0
  65. databricksedu-0.2.0/src/databricksedu/_content/web/ai-bi-dashboards.b64 +1 -0
  66. databricksedu-0.2.0/src/databricksedu/_content/web/ai-functions-gateway.b64 +1 -0
  67. databricksedu-0.2.0/src/databricksedu/_content/web/asset-bundles-cicd.b64 +1 -0
  68. databricksedu-0.2.0/src/databricksedu/_content/web/auto-loader-copy-into.b64 +1 -0
  69. databricksedu-0.2.0/src/databricksedu/_content/web/cdc-data.b64 +1 -0
  70. databricksedu-0.2.0/src/databricksedu/_content/web/cdc-scd.b64 +1 -0
  71. databricksedu-0.2.0/src/databricksedu/_content/web/change-data-feed.b64 +1 -0
  72. databricksedu-0.2.0/src/databricksedu/_content/web/chunking-parsing.b64 +1 -0
  73. databricksedu-0.2.0/src/databricksedu/_content/web/churn-data.b64 +1 -0
  74. databricksedu-0.2.0/src/databricksedu/_content/web/data-privacy-recap.b64 +1 -0
  75. databricksedu-0.2.0/src/databricksedu/_content/web/data-quality-expectations.b64 +1 -0
  76. databricksedu-0.2.0/src/databricksedu/_content/web/declarative-pipelines.b64 +1 -0
  77. databricksedu-0.2.0/src/databricksedu/_content/web/deletion-vectors.b64 +1 -0
  78. databricksedu-0.2.0/src/databricksedu/_content/web/delta-acid-concurrency.b64 +1 -0
  79. databricksedu-0.2.0/src/databricksedu/_content/web/delta-dml-merge.b64 +1 -0
  80. databricksedu-0.2.0/src/databricksedu/_content/web/delta-optimization.b64 +1 -0
  81. databricksedu-0.2.0/src/databricksedu/_content/web/delta-sharing.b64 +1 -0
  82. databricksedu-0.2.0/src/databricksedu/_content/web/delta-table-anatomy.b64 +1 -0
  83. databricksedu-0.2.0/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +1 -0
  84. databricksedu-0.2.0/src/databricksedu/_content/web/delta-transaction-log.b64 +1 -0
  85. databricksedu-0.2.0/src/databricksedu/_content/web/embeddings-vector-search.b64 +1 -0
  86. databricksedu-0.2.0/src/databricksedu/_content/web/feature-engineering.b64 +1 -0
  87. databricksedu-0.2.0/src/databricksedu/_content/web/genai-evaluation.b64 +1 -0
  88. databricksedu-0.2.0/src/databricksedu/_content/web/genie-spaces.b64 +1 -0
  89. databricksedu-0.2.0/src/databricksedu/_content/web/hr-data.b64 +1 -0
  90. databricksedu-0.2.0/src/databricksedu/_content/web/hyperparameter-tuning.b64 +1 -0
  91. databricksedu-0.2.0/src/databricksedu/_content/web/iot-data.b64 +1 -0
  92. databricksedu-0.2.0/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +1 -0
  93. databricksedu-0.2.0/src/databricksedu/_content/web/lakeflow-jobs.b64 +1 -0
  94. databricksedu-0.2.0/src/databricksedu/_content/web/lakehouse-architecture.b64 +1 -0
  95. databricksedu-0.2.0/src/databricksedu/_content/web/lineage-system-tables.b64 +1 -0
  96. databricksedu-0.2.0/src/databricksedu/_content/web/llm-basics.b64 +1 -0
  97. databricksedu-0.2.0/src/databricksedu/_content/web/medallion-architecture.b64 +1 -0
  98. databricksedu-0.2.0/src/databricksedu/_content/web/metric-views.b64 +1 -0
  99. databricksedu-0.2.0/src/databricksedu/_content/web/ml-lifecycle.b64 +1 -0
  100. databricksedu-0.2.0/src/databricksedu/_content/web/mlflow-tracking.b64 +1 -0
  101. databricksedu-0.2.0/src/databricksedu/_content/web/model-monitoring.b64 +1 -0
  102. databricksedu-0.2.0/src/databricksedu/_content/web/model-serving.b64 +1 -0
  103. databricksedu-0.2.0/src/databricksedu/_content/web/models-in-unity-catalog.b64 +1 -0
  104. databricksedu-0.2.0/src/databricksedu/_content/web/parquet-files.b64 +1 -0
  105. databricksedu-0.2.0/src/databricksedu/_content/web/performance-optimization-recap.b64 +1 -0
  106. databricksedu-0.2.0/src/databricksedu/_content/web/prompt-engineering.b64 +1 -0
  107. databricksedu-0.2.0/src/databricksedu/_content/web/rag-architecture.b64 +1 -0
  108. databricksedu-0.2.0/src/databricksedu/_content/web/retail-data.b64 +1 -0
  109. databricksedu-0.2.0/src/databricksedu/_content/web/row-filters-column-masks.b64 +1 -0
  110. databricksedu-0.2.0/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +1 -0
  111. databricksedu-0.2.0/src/databricksedu/_content/web/spark-architecture.b64 +1 -0
  112. databricksedu-0.2.0/src/databricksedu/_content/web/spark-joins-shuffles.b64 +1 -0
  113. databricksedu-0.2.0/src/databricksedu/_content/web/sql-warehouses.b64 +1 -0
  114. databricksedu-0.2.0/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +1 -0
  115. databricksedu-0.2.0/src/databricksedu/_content/web/structured-streaming-basics.b64 +1 -0
  116. databricksedu-0.2.0/src/databricksedu/_content/web/support-data.b64 +1 -0
  117. databricksedu-0.2.0/src/databricksedu/_content/web/uc-privileges.b64 +1 -0
  118. databricksedu-0.2.0/src/databricksedu/_content/web/unity-catalog-basics.b64 +1 -0
  119. databricksedu-0.2.0/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +1 -0
  120. databricksedu-0.2.0/src/databricksedu/_version.py +1 -0
  121. databricksedu-0.2.0/src/databricksedu/assets/app.css +1 -0
  122. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/assets/app.js +30 -9
  123. databricksedu-0.2.0/src/databricksedu/data/__init__.py +104 -0
  124. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/_core.py +3 -2
  125. databricksedu-0.2.0/src/databricksedu/data/_load.py +254 -0
  126. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/cdc.py +1 -0
  127. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/churn.py +1 -0
  128. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/hr.py +1 -0
  129. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/iot.py +1 -0
  130. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/retail.py +1 -0
  131. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/data/support.py +1 -0
  132. {databricksedu-0.1.0 → databricksedu-0.2.0}/tests/test_smoke.py +65 -0
  133. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/assets/app.css +2 -1
  134. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/assets/app.js +30 -9
  135. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/build.py +15 -24
  136. databricksedu-0.1.0/src/databricksedu/_content/nb/agents-tools.json.gz +0 -0
  137. databricksedu-0.1.0/src/databricksedu/_content/nb/ai-bi-dashboards.json.gz +0 -0
  138. databricksedu-0.1.0/src/databricksedu/_content/nb/ai-functions-gateway.json.gz +0 -0
  139. databricksedu-0.1.0/src/databricksedu/_content/nb/asset-bundles-cicd.json.gz +0 -0
  140. databricksedu-0.1.0/src/databricksedu/_content/nb/auto-loader-copy-into.json.gz +0 -0
  141. databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-data.json.gz +0 -0
  142. databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-scd.json.gz +0 -0
  143. databricksedu-0.1.0/src/databricksedu/_content/nb/change-data-feed.json.gz +0 -0
  144. databricksedu-0.1.0/src/databricksedu/_content/nb/chunking-parsing.json.gz +0 -0
  145. databricksedu-0.1.0/src/databricksedu/_content/nb/churn-data.json.gz +0 -0
  146. databricksedu-0.1.0/src/databricksedu/_content/nb/data-privacy-recap.json.gz +0 -0
  147. databricksedu-0.1.0/src/databricksedu/_content/nb/data-quality-expectations.json.gz +0 -0
  148. databricksedu-0.1.0/src/databricksedu/_content/nb/declarative-pipelines.json.gz +0 -0
  149. databricksedu-0.1.0/src/databricksedu/_content/nb/deletion-vectors.json.gz +0 -0
  150. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-acid-concurrency.json.gz +0 -0
  151. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-dml-merge.json.gz +0 -0
  152. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-optimization.json.gz +0 -0
  153. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-sharing.json.gz +0 -0
  154. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-table-anatomy.json.gz +0 -0
  155. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-time-travel-vacuum.json.gz +0 -0
  156. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-transaction-log.json.gz +0 -0
  157. databricksedu-0.1.0/src/databricksedu/_content/nb/embeddings-vector-search.json.gz +0 -0
  158. databricksedu-0.1.0/src/databricksedu/_content/nb/feature-engineering.json.gz +0 -0
  159. databricksedu-0.1.0/src/databricksedu/_content/nb/genai-evaluation.json.gz +0 -0
  160. databricksedu-0.1.0/src/databricksedu/_content/nb/genie-spaces.json.gz +0 -0
  161. databricksedu-0.1.0/src/databricksedu/_content/nb/hr-data.json.gz +0 -0
  162. databricksedu-0.1.0/src/databricksedu/_content/nb/hyperparameter-tuning.json.gz +0 -0
  163. databricksedu-0.1.0/src/databricksedu/_content/nb/iot-data.json.gz +0 -0
  164. databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-connect-recap.json.gz +0 -0
  165. databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-jobs.json.gz +0 -0
  166. databricksedu-0.1.0/src/databricksedu/_content/nb/lakehouse-architecture.json.gz +0 -0
  167. databricksedu-0.1.0/src/databricksedu/_content/nb/lineage-system-tables.json.gz +0 -0
  168. databricksedu-0.1.0/src/databricksedu/_content/nb/llm-basics.json.gz +0 -0
  169. databricksedu-0.1.0/src/databricksedu/_content/nb/medallion-architecture.json.gz +0 -0
  170. databricksedu-0.1.0/src/databricksedu/_content/nb/metric-views.json.gz +0 -0
  171. databricksedu-0.1.0/src/databricksedu/_content/nb/ml-lifecycle.json.gz +0 -0
  172. databricksedu-0.1.0/src/databricksedu/_content/nb/mlflow-tracking.json.gz +0 -0
  173. databricksedu-0.1.0/src/databricksedu/_content/nb/model-monitoring.json.gz +0 -0
  174. databricksedu-0.1.0/src/databricksedu/_content/nb/model-serving.json.gz +0 -0
  175. databricksedu-0.1.0/src/databricksedu/_content/nb/models-in-unity-catalog.json.gz +0 -0
  176. databricksedu-0.1.0/src/databricksedu/_content/nb/parquet-files.json.gz +0 -0
  177. databricksedu-0.1.0/src/databricksedu/_content/nb/performance-optimization-recap.json.gz +0 -0
  178. databricksedu-0.1.0/src/databricksedu/_content/nb/prompt-engineering.json.gz +0 -0
  179. databricksedu-0.1.0/src/databricksedu/_content/nb/rag-architecture.json.gz +0 -0
  180. databricksedu-0.1.0/src/databricksedu/_content/nb/retail-data.json.gz +0 -0
  181. databricksedu-0.1.0/src/databricksedu/_content/nb/row-filters-column-masks.json.gz +0 -0
  182. databricksedu-0.1.0/src/databricksedu/_content/nb/schema-enforcement-evolution.json.gz +0 -0
  183. databricksedu-0.1.0/src/databricksedu/_content/nb/spark-architecture.json.gz +0 -0
  184. databricksedu-0.1.0/src/databricksedu/_content/nb/spark-joins-shuffles.json.gz +0 -0
  185. databricksedu-0.1.0/src/databricksedu/_content/nb/sql-warehouses.json.gz +0 -0
  186. databricksedu-0.1.0/src/databricksedu/_content/nb/streaming-pipelines-recap.json.gz +0 -0
  187. databricksedu-0.1.0/src/databricksedu/_content/nb/structured-streaming-basics.json.gz +0 -0
  188. databricksedu-0.1.0/src/databricksedu/_content/nb/support-data.json.gz +0 -0
  189. databricksedu-0.1.0/src/databricksedu/_content/nb/uc-privileges.json.gz +0 -0
  190. databricksedu-0.1.0/src/databricksedu/_content/nb/unity-catalog-basics.json.gz +0 -0
  191. databricksedu-0.1.0/src/databricksedu/_content/nb/watermarks-stateful-streaming.json.gz +0 -0
  192. databricksedu-0.1.0/src/databricksedu/_content/web/agents-tools.b64 +0 -1
  193. databricksedu-0.1.0/src/databricksedu/_content/web/ai-bi-dashboards.b64 +0 -1
  194. databricksedu-0.1.0/src/databricksedu/_content/web/ai-functions-gateway.b64 +0 -1
  195. databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-cicd.b64 +0 -1
  196. databricksedu-0.1.0/src/databricksedu/_content/web/auto-loader-copy-into.b64 +0 -1
  197. databricksedu-0.1.0/src/databricksedu/_content/web/cdc-data.b64 +0 -1
  198. databricksedu-0.1.0/src/databricksedu/_content/web/cdc-scd.b64 +0 -1
  199. databricksedu-0.1.0/src/databricksedu/_content/web/change-data-feed.b64 +0 -1
  200. databricksedu-0.1.0/src/databricksedu/_content/web/chunking-parsing.b64 +0 -1
  201. databricksedu-0.1.0/src/databricksedu/_content/web/churn-data.b64 +0 -1
  202. databricksedu-0.1.0/src/databricksedu/_content/web/data-privacy-recap.b64 +0 -1
  203. databricksedu-0.1.0/src/databricksedu/_content/web/data-quality-expectations.b64 +0 -1
  204. databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines.b64 +0 -1
  205. databricksedu-0.1.0/src/databricksedu/_content/web/deletion-vectors.b64 +0 -1
  206. databricksedu-0.1.0/src/databricksedu/_content/web/delta-acid-concurrency.b64 +0 -1
  207. databricksedu-0.1.0/src/databricksedu/_content/web/delta-dml-merge.b64 +0 -1
  208. databricksedu-0.1.0/src/databricksedu/_content/web/delta-optimization.b64 +0 -1
  209. databricksedu-0.1.0/src/databricksedu/_content/web/delta-sharing.b64 +0 -1
  210. databricksedu-0.1.0/src/databricksedu/_content/web/delta-table-anatomy.b64 +0 -1
  211. databricksedu-0.1.0/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +0 -1
  212. databricksedu-0.1.0/src/databricksedu/_content/web/delta-transaction-log.b64 +0 -1
  213. databricksedu-0.1.0/src/databricksedu/_content/web/embeddings-vector-search.b64 +0 -1
  214. databricksedu-0.1.0/src/databricksedu/_content/web/feature-engineering.b64 +0 -1
  215. databricksedu-0.1.0/src/databricksedu/_content/web/genai-evaluation.b64 +0 -1
  216. databricksedu-0.1.0/src/databricksedu/_content/web/genie-spaces.b64 +0 -1
  217. databricksedu-0.1.0/src/databricksedu/_content/web/hr-data.b64 +0 -1
  218. databricksedu-0.1.0/src/databricksedu/_content/web/hyperparameter-tuning.b64 +0 -1
  219. databricksedu-0.1.0/src/databricksedu/_content/web/iot-data.b64 +0 -1
  220. databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +0 -1
  221. databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs.b64 +0 -1
  222. databricksedu-0.1.0/src/databricksedu/_content/web/lakehouse-architecture.b64 +0 -1
  223. databricksedu-0.1.0/src/databricksedu/_content/web/lineage-system-tables.b64 +0 -1
  224. databricksedu-0.1.0/src/databricksedu/_content/web/llm-basics.b64 +0 -1
  225. databricksedu-0.1.0/src/databricksedu/_content/web/medallion-architecture.b64 +0 -1
  226. databricksedu-0.1.0/src/databricksedu/_content/web/metric-views.b64 +0 -1
  227. databricksedu-0.1.0/src/databricksedu/_content/web/ml-lifecycle.b64 +0 -1
  228. databricksedu-0.1.0/src/databricksedu/_content/web/mlflow-tracking.b64 +0 -1
  229. databricksedu-0.1.0/src/databricksedu/_content/web/model-monitoring.b64 +0 -1
  230. databricksedu-0.1.0/src/databricksedu/_content/web/model-serving.b64 +0 -1
  231. databricksedu-0.1.0/src/databricksedu/_content/web/models-in-unity-catalog.b64 +0 -1
  232. databricksedu-0.1.0/src/databricksedu/_content/web/parquet-files.b64 +0 -1
  233. databricksedu-0.1.0/src/databricksedu/_content/web/performance-optimization-recap.b64 +0 -1
  234. databricksedu-0.1.0/src/databricksedu/_content/web/prompt-engineering.b64 +0 -1
  235. databricksedu-0.1.0/src/databricksedu/_content/web/rag-architecture.b64 +0 -1
  236. databricksedu-0.1.0/src/databricksedu/_content/web/retail-data.b64 +0 -1
  237. databricksedu-0.1.0/src/databricksedu/_content/web/row-filters-column-masks.b64 +0 -1
  238. databricksedu-0.1.0/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +0 -1
  239. databricksedu-0.1.0/src/databricksedu/_content/web/spark-architecture.b64 +0 -1
  240. databricksedu-0.1.0/src/databricksedu/_content/web/spark-joins-shuffles.b64 +0 -1
  241. databricksedu-0.1.0/src/databricksedu/_content/web/sql-warehouses.b64 +0 -1
  242. databricksedu-0.1.0/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +0 -1
  243. databricksedu-0.1.0/src/databricksedu/_content/web/structured-streaming-basics.b64 +0 -1
  244. databricksedu-0.1.0/src/databricksedu/_content/web/support-data.b64 +0 -1
  245. databricksedu-0.1.0/src/databricksedu/_content/web/uc-privileges.b64 +0 -1
  246. databricksedu-0.1.0/src/databricksedu/_content/web/unity-catalog-basics.b64 +0 -1
  247. databricksedu-0.1.0/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +0 -1
  248. databricksedu-0.1.0/src/databricksedu/_version.py +0 -1
  249. databricksedu-0.1.0/src/databricksedu/assets/app.css +0 -1
  250. databricksedu-0.1.0/src/databricksedu/data/__init__.py +0 -58
  251. {databricksedu-0.1.0 → databricksedu-0.2.0}/.gitignore +0 -0
  252. {databricksedu-0.1.0 → databricksedu-0.2.0}/CONTENT_GUIDE.md +0 -0
  253. {databricksedu-0.1.0 → databricksedu-0.2.0}/LICENSE +0 -0
  254. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/010-sql-warehouses/module.md +0 -0
  255. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/010-sql-warehouses/quiz.json +0 -0
  256. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/020-ai-bi-dashboards/module.md +0 -0
  257. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/020-ai-bi-dashboards/quiz.json +0 -0
  258. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/030-genie-spaces/module.md +0 -0
  259. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/030-genie-spaces/quiz.json +0 -0
  260. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/040-metric-views/module.md +0 -0
  261. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/analytics/040-metric-views/quiz.json +0 -0
  262. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/categories.json +0 -0
  263. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/010-lakehouse-architecture/module.md +0 -0
  264. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/010-lakehouse-architecture/quiz.json +0 -0
  265. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/020-parquet-files/module.md +0 -0
  266. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/020-parquet-files/quiz.json +0 -0
  267. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/030-medallion-architecture/module.md +0 -0
  268. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/030-medallion-architecture/quiz.json +0 -0
  269. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/040-unity-catalog-basics/module.md +0 -0
  270. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/040-unity-catalog-basics/quiz.json +0 -0
  271. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/050-delta-table-anatomy/module.md +0 -0
  272. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/050-delta-table-anatomy/quiz.json +0 -0
  273. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/060-delta-transaction-log/module.md +0 -0
  274. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/060-delta-transaction-log/quiz.json +0 -0
  275. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/070-delta-acid-concurrency/module.md +0 -0
  276. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/070-delta-acid-concurrency/quiz.json +0 -0
  277. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/080-delta-time-travel-vacuum/module.md +0 -0
  278. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/080-delta-time-travel-vacuum/quiz.json +0 -0
  279. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/090-deletion-vectors/module.md +0 -0
  280. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/090-deletion-vectors/quiz.json +0 -0
  281. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/100-delta-dml-merge/module.md +0 -0
  282. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/100-delta-dml-merge/quiz.json +0 -0
  283. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/110-schema-enforcement-evolution/module.md +0 -0
  284. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/110-schema-enforcement-evolution/quiz.json +0 -0
  285. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/120-change-data-feed/module.md +0 -0
  286. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/120-change-data-feed/quiz.json +0 -0
  287. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/130-delta-optimization/module.md +0 -0
  288. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/130-delta-optimization/quiz.json +0 -0
  289. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/140-spark-architecture/module.md +0 -0
  290. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/140-spark-architecture/quiz.json +0 -0
  291. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/150-spark-joins-shuffles/module.md +0 -0
  292. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/150-spark-joins-shuffles/quiz.json +0 -0
  293. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/160-auto-loader-copy-into/quiz.json +0 -0
  294. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/170-structured-streaming-basics/module.md +0 -0
  295. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/170-structured-streaming-basics/quiz.json +0 -0
  296. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/180-watermarks-stateful-streaming/module.md +0 -0
  297. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/180-watermarks-stateful-streaming/quiz.json +0 -0
  298. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/190-declarative-pipelines/quiz.json +0 -0
  299. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/200-data-quality-expectations/module.md +0 -0
  300. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/200-data-quality-expectations/quiz.json +0 -0
  301. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/210-cdc-scd/module.md +0 -0
  302. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/210-cdc-scd/quiz.json +0 -0
  303. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/220-lakeflow-jobs/module.md +0 -0
  304. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/220-lakeflow-jobs/quiz.json +0 -0
  305. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/230-asset-bundles-cicd/module.md +0 -0
  306. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/data-engineering/230-asset-bundles-cicd/quiz.json +0 -0
  307. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/030-churn-data/module.md +0 -0
  308. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/040-support-data/module.md +0 -0
  309. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/050-hr-data/module.md +0 -0
  310. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/demo-data/060-cdc-data/module.md +0 -0
  311. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/010-exam-data-engineer-associate/module.md +0 -0
  312. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/010-exam-data-engineer-associate/quiz.json +0 -0
  313. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/020-exam-data-engineer-professional/module.md +0 -0
  314. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/020-exam-data-engineer-professional/quiz.json +0 -0
  315. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/030-exam-data-analyst-associate/module.md +0 -0
  316. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/030-exam-data-analyst-associate/quiz.json +0 -0
  317. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/040-exam-ml-associate/module.md +0 -0
  318. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/040-exam-ml-associate/quiz.json +0 -0
  319. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/050-exam-ml-professional/module.md +0 -0
  320. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/050-exam-ml-professional/quiz.json +0 -0
  321. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/060-exam-genai-engineer-associate/module.md +0 -0
  322. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/060-exam-genai-engineer-associate/quiz.json +0 -0
  323. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/070-exam-spark-developer-associate/module.md +0 -0
  324. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/exam-prep/070-exam-spark-developer-associate/quiz.json +0 -0
  325. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/010-llm-basics/module.md +0 -0
  326. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/010-llm-basics/quiz.json +0 -0
  327. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/020-prompt-engineering/module.md +0 -0
  328. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/020-prompt-engineering/quiz.json +0 -0
  329. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/030-embeddings-vector-search/module.md +0 -0
  330. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/030-embeddings-vector-search/quiz.json +0 -0
  331. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/040-chunking-parsing/module.md +0 -0
  332. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/040-chunking-parsing/quiz.json +0 -0
  333. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/050-rag-architecture/module.md +0 -0
  334. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/050-rag-architecture/quiz.json +0 -0
  335. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/060-agents-tools/module.md +0 -0
  336. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/060-agents-tools/quiz.json +0 -0
  337. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/070-genai-evaluation/module.md +0 -0
  338. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/070-genai-evaluation/quiz.json +0 -0
  339. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/080-ai-functions-gateway/module.md +0 -0
  340. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/generative-ai/080-ai-functions-gateway/quiz.json +0 -0
  341. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/010-uc-privileges/module.md +0 -0
  342. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/010-uc-privileges/quiz.json +0 -0
  343. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/020-row-filters-column-masks/module.md +0 -0
  344. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/020-row-filters-column-masks/quiz.json +0 -0
  345. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/030-delta-sharing/module.md +0 -0
  346. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/030-delta-sharing/quiz.json +0 -0
  347. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/040-lineage-system-tables/module.md +0 -0
  348. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/governance/040-lineage-system-tables/quiz.json +0 -0
  349. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/010-ml-lifecycle/module.md +0 -0
  350. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/010-ml-lifecycle/quiz.json +0 -0
  351. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/020-mlflow-tracking/module.md +0 -0
  352. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/020-mlflow-tracking/quiz.json +0 -0
  353. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/030-feature-engineering/module.md +0 -0
  354. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/030-feature-engineering/quiz.json +0 -0
  355. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/040-hyperparameter-tuning/module.md +0 -0
  356. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/040-hyperparameter-tuning/quiz.json +0 -0
  357. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/050-models-in-unity-catalog/module.md +0 -0
  358. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/050-models-in-unity-catalog/quiz.json +0 -0
  359. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/060-model-serving/module.md +0 -0
  360. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/060-model-serving/quiz.json +0 -0
  361. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/070-model-monitoring/module.md +0 -0
  362. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/machine-learning/070-model-monitoring/quiz.json +0 -0
  363. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/010-lakeflow-connect-recap/quiz.json +0 -0
  364. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/020-lakeflow-jobs-recap/module.md +0 -0
  365. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/020-lakeflow-jobs-recap/quiz.json +0 -0
  366. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/030-declarative-pipelines-recap/module.md +0 -0
  367. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/030-declarative-pipelines-recap/quiz.json +0 -0
  368. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/040-devops-essentials-recap/module.md +0 -0
  369. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/040-devops-essentials-recap/quiz.json +0 -0
  370. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/050-streaming-pipelines-recap/module.md +0 -0
  371. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/050-streaming-pipelines-recap/quiz.json +0 -0
  372. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/060-data-privacy-recap/module.md +0 -0
  373. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/060-data-privacy-recap/quiz.json +0 -0
  374. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/070-performance-optimization-recap/module.md +0 -0
  375. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/070-performance-optimization-recap/quiz.json +0 -0
  376. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/080-asset-bundles-recap/module.md +0 -0
  377. {databricksedu-0.1.0 → databricksedu-0.2.0}/content/recaps/080-asset-bundles-recap/quiz.json +0 -0
  378. {databricksedu-0.1.0 → databricksedu-0.2.0}/hatch_build.py +0 -0
  379. {databricksedu-0.1.0 → databricksedu-0.2.0}/pyproject.toml +0 -0
  380. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/__init__.py +0 -0
  381. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/catalog.json +0 -0
  382. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/asset-bundles-recap.json.gz +0 -0
  383. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/declarative-pipelines-recap.json.gz +0 -0
  384. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/devops-essentials-recap.json.gz +0 -0
  385. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-data-analyst-associate.json.gz +0 -0
  386. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-data-engineer-associate.json.gz +0 -0
  387. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-data-engineer-professional.json.gz +0 -0
  388. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-genai-engineer-associate.json.gz +0 -0
  389. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-ml-associate.json.gz +0 -0
  390. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-ml-professional.json.gz +0 -0
  391. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/exam-spark-developer-associate.json.gz +0 -0
  392. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/nb/lakeflow-jobs-recap.json.gz +0 -0
  393. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/asset-bundles-recap.b64 +0 -0
  394. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/declarative-pipelines-recap.b64 +0 -0
  395. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/devops-essentials-recap.b64 +0 -0
  396. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-data-analyst-associate.b64 +0 -0
  397. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-data-engineer-associate.b64 +0 -0
  398. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-data-engineer-professional.b64 +0 -0
  399. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-genai-engineer-associate.b64 +0 -0
  400. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-ml-associate.b64 +0 -0
  401. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-ml-professional.b64 +0 -0
  402. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/exam-spark-developer-associate.b64 +0 -0
  403. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/_content/web/lakeflow-jobs-recap.b64 +0 -0
  404. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/app.py +0 -0
  405. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/assets/dbx.css +0 -0
  406. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/assets/quiz.js +0 -0
  407. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/assets/viz.css +0 -0
  408. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/assets/viz.js +0 -0
  409. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/catalog.py +0 -0
  410. {databricksedu-0.1.0 → databricksedu-0.2.0}/src/databricksedu/workspace.py +0 -0
  411. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/assets/dbx.css +0 -0
  412. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/assets/quiz.js +0 -0
  413. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/assets/viz.js +0 -0
  414. {databricksedu-0.1.0 → databricksedu-0.2.0}/tools/render.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: databricksedu
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Bite-sized Databricks lessons that run inside your notebook: animated slides, notes, exercises and seeded demo data.
5
5
  Project-URL: Homepage, https://github.com/misrori/databricksedu
6
6
  Project-URL: Source, https://github.com/misrori/databricksedu
@@ -76,25 +76,29 @@ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspac
76
76
  databricksedu.save("data-engineering") # a whole track, or save("all")
77
77
  ```
78
78
 
79
- ## Seeded demo data
79
+ ## Demo data in one line
80
80
 
81
- The same seed always gives the same rows, so a whole class works on identical data. Every dataset has several
82
- tables joined by real primary and foreign keys.
81
+ Six datasets (retail, iot, churn, support, hr, cdc), each with several tables joined by real primary and
82
+ foreign keys. Give a catalog and a schema; one call creates everything and prints a report (what it created,
83
+ rows, size, columns). The catalog and schema must exist: nothing here creates them.
83
84
 
84
85
  ```python
85
86
  from databricksedu import data
86
87
 
87
- ds = data.generate("retail", seed=42) # retail, iot, churn, support, hr, cdc
88
- ds.preview()
88
+ CATALOG, SCHEMA = "main", "my_schema"
89
89
 
90
- CATALOG = "FILL_IN" # a catalog you can use
91
- SCHEMA = "FILL_IN" # a schema you can write to (it is never created for you)
92
- ds.create_tables(CATALOG, SCHEMA) # prints and runs the CREATE TABLE / PRIMARY KEY / FOREIGN KEY SQL
93
- print(ds.sql()) # ...or just show the script
90
+ data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (existing ones replaced)
91
+ data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
92
+ data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
93
+ data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
94
+
95
+ data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files
96
+ data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # run again: new rows, new files
94
97
  ```
95
98
 
96
- `data.datasets()` describes them all. `ds.to_pandas("fact_orders")` gives a pandas DataFrame, and
97
- `ds.land_files(path)` writes raw CSV or JSON files for ingestion and streaming demos.
99
+ `data.create` uses a fixed seed, so a whole class works on identical tables. `data.files` has no fixed seed:
100
+ every call adds new files with new rows and new ids, which is what Auto Loader and `COPY INTO` demos need.
101
+ `data.datasets()` describes them all; `data.generate("retail").to_pandas("fact_orders")` works without Spark.
98
102
 
99
103
  ## Practice exams
100
104
 
@@ -44,25 +44,29 @@ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspac
44
44
  databricksedu.save("data-engineering") # a whole track, or save("all")
45
45
  ```
46
46
 
47
- ## Seeded demo data
47
+ ## Demo data in one line
48
48
 
49
- The same seed always gives the same rows, so a whole class works on identical data. Every dataset has several
50
- tables joined by real primary and foreign keys.
49
+ Six datasets (retail, iot, churn, support, hr, cdc), each with several tables joined by real primary and
50
+ foreign keys. Give a catalog and a schema; one call creates everything and prints a report (what it created,
51
+ rows, size, columns). The catalog and schema must exist: nothing here creates them.
51
52
 
52
53
  ```python
53
54
  from databricksedu import data
54
55
 
55
- ds = data.generate("retail", seed=42) # retail, iot, churn, support, hr, cdc
56
- ds.preview()
56
+ CATALOG, SCHEMA = "main", "my_schema"
57
57
 
58
- CATALOG = "FILL_IN" # a catalog you can use
59
- SCHEMA = "FILL_IN" # a schema you can write to (it is never created for you)
60
- ds.create_tables(CATALOG, SCHEMA) # prints and runs the CREATE TABLE / PRIMARY KEY / FOREIGN KEY SQL
61
- print(ds.sql()) # ...or just show the script
58
+ data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (existing ones replaced)
59
+ data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
60
+ data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
61
+ data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
62
+
63
+ data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files
64
+ data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # run again: new rows, new files
62
65
  ```
63
66
 
64
- `data.datasets()` describes them all. `ds.to_pandas("fact_orders")` gives a pandas DataFrame, and
65
- `ds.land_files(path)` writes raw CSV or JSON files for ingestion and streaming demos.
67
+ `data.create` uses a fixed seed, so a whole class works on identical tables. `data.files` has no fixed seed:
68
+ every call adds new files with new rows and new ids, which is what Auto Loader and `COPY INTO` demos need.
69
+ `data.datasets()` describes them all; `data.generate("retail").to_pandas("fact_orders")` works without Spark.
66
70
 
67
71
  ## Practice exams
68
72
 
@@ -137,20 +137,19 @@ Every file source also offers the hidden `_metadata` column: `_metadata.file_pat
137
137
  ```dataset retail
138
138
  ```
139
139
 
140
- Land the first of three order files in a volume. The cell starts clean every time you run it.
140
+ Land the first order file in the `landing` volume. The cell starts clean every time you run it.
141
141
 
142
142
  ```python run
143
143
  # Land the first file (clean start)
144
144
  import shutil
145
145
  from pyspark.sql import functions as F
146
146
 
147
- vol = data.volume(CATALOG, SCHEMA)
148
- state = vol + "/autoloader_state" # schema and checkpoint live here
149
- for p in (vol + "/autoloader_demo", state):
150
- shutil.rmtree(p, ignore_errors=True)
147
+ state = data.volume(CATALOG, SCHEMA) + "/autoloader_state" # schema and checkpoint live here
148
+ shutil.rmtree(state, ignore_errors=True)
151
149
  spark.sql("DROP TABLE IF EXISTS al_orders_bronze")
152
150
 
153
- landing = ds.land_files(vol + "/autoloader_demo", parts=3, upto=1)
151
+ # one new file of 20,000 orders; fresh=True empties the folder first
152
+ landing = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="autoloader_demo", n_files=1, fresh=True)
154
153
  ```
155
154
 
156
155
  ```python run
@@ -175,8 +174,8 @@ ingest()
175
174
 
176
175
  ```python run
177
176
  # A second file arrives: run the same stream again
178
- ds.land_files(landing, parts=3, upto=2)
179
- ingest() # part_1 is not read again: still 20,000 rows from it
177
+ data.files("retail", CATALOG, SCHEMA, volume="landing", folder="autoloader_demo", n_files=1)
178
+ ingest() # part_0001 is not read again: still 20,000 rows from it
180
179
  ```
181
180
 
182
181
  ```python run
@@ -188,7 +187,7 @@ copy = f"""
188
187
  FILEFORMAT = CSV
189
188
  FORMAT_OPTIONS ('header' = 'true', 'inferSchema' = 'true')
190
189
  COPY_OPTIONS ('mergeSchema' = 'true')"""
191
- spark.sql(copy).show() # loads part_1 and part_2: 40,000 rows
190
+ spark.sql(copy).show() # loads part_0001 and part_0002: 40,000 rows
192
191
  spark.sql(copy).show() # 0 rows: both files are already recorded
193
192
  ```
194
193
 
@@ -196,21 +195,18 @@ spark.sql(copy).show() # 0 rows: both files are already recorded
196
195
 
197
196
  ## Exercise 1: rescue the bad rows
198
197
 
199
- `ds.land_files` also writes `fact_orders_bad/fact_orders_bad.csv`, four rows with broken values. Load it with Auto Loader and schema hints. Predict which rows get a `_rescued_data` value.
198
+ `data.files("retail", ...)` also writes `fact_orders_bad/fact_orders_bad.csv`, four rows with broken values. Load it with Auto Loader and schema hints. Predict which rows get a `_rescued_data` value.
200
199
 
201
200
  ```python todo
202
- # TODO 1: base = data.volume(CATALOG, SCHEMA) + "/al_rescue"; ds.land_files(base, parts=3, upto=1)
201
+ # TODO 1: base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="al_rescue", fresh=True)
203
202
  # TODO 2: readStream cloudFiles (csv, header, inferColumnTypes) from base + "/fact_orders_bad"
204
203
  # with cloudFiles.schemaHints = "order_date DATE, quantity INT, discount DOUBLE"
205
204
  # TODO 3: write with availableNow to al_orders_rescued, then show the rows with _rescued_data
206
205
  ```
207
206
 
208
207
  ```python solution
209
- import shutil
210
- base = data.volume(CATALOG, SCHEMA) + "/al_rescue"
211
- shutil.rmtree(base, ignore_errors=True)
212
208
  spark.sql("DROP TABLE IF EXISTS al_orders_rescued")
213
- ds.land_files(base, parts=3, upto=1)
209
+ base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="al_rescue", fresh=True)
214
210
 
215
211
  (spark.readStream.format("cloudFiles")
216
212
  .option("cloudFiles.format", "csv")
@@ -234,16 +230,13 @@ spark.sql("SELECT order_id, order_date, quantity, discount, _rescued_data FROM a
234
230
  Land two files, run `COPY INTO` twice, then once more with `'force' = 'true'`. Predict the row count after each run.
235
231
 
236
232
  ```python todo
237
- # TODO 1: base = data.volume(CATALOG, SCHEMA) + "/ci_force"; ds.land_files(base, parts=3, upto=2)
233
+ # TODO 1: base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="ci_force", n_files=2, fresh=True)
238
234
  # TODO 2: create ci_force_orders, COPY INTO it from base + "/fact_orders" twice, count rows
239
235
  # TODO 3: COPY INTO again with COPY_OPTIONS ('force' = 'true', 'mergeSchema' = 'true'), count rows
240
236
  ```
241
237
 
242
238
  ```python solution
243
- import shutil
244
- base = data.volume(CATALOG, SCHEMA) + "/ci_force"
245
- shutil.rmtree(base, ignore_errors=True)
246
- ds.land_files(base, parts=3, upto=2)
239
+ base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="ci_force", n_files=2, fresh=True)
247
240
  spark.sql("DROP TABLE IF EXISTS ci_force_orders")
248
241
  spark.sql("CREATE TABLE IF NOT EXISTS ci_force_orders")
249
242
 
@@ -161,9 +161,8 @@ A **full refresh** empties the streaming tables and re-reads every source from t
161
161
  A pipeline cannot be created from a notebook cell, so the pipeline code in this module is display-only. You can prepare its source data here.
162
162
 
163
163
  ```python run
164
- # Land the first of three raw order files in a volume
165
- landing = data.volume(CATALOG, SCHEMA) + "/pl_landing"
166
- ds.land_files(landing, table="fact_orders", parts=3, upto=1, fmt="csv")
164
+ # Land the first raw order file (20,000 orders) in a volume; fresh=True starts clean
165
+ landing = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="pl_landing", n_files=1, fresh=True)
167
166
 
168
167
  orders_path = landing + "/fact_orders"
169
168
  print("Use this path in read_files:", orders_path)
@@ -178,7 +177,7 @@ display(spark.sql(f"""
178
177
  """))
179
178
  ```
180
179
 
181
- > **Run it yourself** (needs permission to create pipelines and serverless): 1. Open **Jobs & Pipelines** and create an ETL pipeline. 2. Set its default catalog and schema to your `CATALOG` and `SCHEMA`. 3. Paste the SQL file from this module into the source file and put in the path printed above. 4. Click **Start** and watch the graph. 5. Run `ds.land_files(landing, table="fact_orders", parts=3, upto=2, fmt="csv")` here, start the pipeline again, and check in the update details that bronze read only 20,000 new rows.
180
+ > **Run it yourself** (needs permission to create pipelines and serverless): 1. Open **Jobs & Pipelines** and create an ETL pipeline. 2. Set its default catalog and schema to your `CATALOG` and `SCHEMA`. 3. Paste the SQL file from this module into the source file and put in the path printed above. 4. Click **Start** and watch the graph. 5. Run `data.files("retail", CATALOG, SCHEMA, volume="landing", folder="pl_landing")` here to land one more file, start the pipeline again, and check in the update details that bronze read only 20,000 new rows.
182
181
 
183
182
  ## Exercise 1: predict the gold table
184
183
 
@@ -93,22 +93,26 @@ The data is shaped so that careless queries give wrong answers. That makes it go
93
93
  ```
94
94
 
95
95
  - **Skew:** product ids 1 to 8 are Books and are ordered far more often (product 1 alone has about 13,900 orders). Electronics (ids 33 to 40) are rare but expensive. Good for join skew and "count vs revenue" discussions.
96
- - **Bad files:** `ds.land_files(path)` also writes `fact_orders_bad/fact_orders_bad.csv` with four malformed rows (`five` as a quantity, `not-a-date`) for rescued-data and expectations demos.
96
+ - **Bad files:** `data.files("retail", ...)` also writes `fact_orders_bad/fact_orders_bad.csv` with four malformed rows (`five` as a quantity, `not-a-date`) for rescued-data and expectations demos.
97
97
 
98
98
  ## 🐍 Use it from Python
99
99
 
100
- You do not need tables for every demo. The same seed gives the same rows in pandas, in Spark, or as raw files.
100
+ One call puts the data where you need it and prints a report: what it created, rows, size and columns.
101
101
 
102
102
  ```python
103
103
  from databricksedu import data
104
104
 
105
- ds = data.generate("retail", seed=42) # same seed, same rows
106
- ds.preview() # first rows of every table
107
- pdf = ds.to_pandas("fact_orders") # a pandas DataFrame
108
- small = data.generate("retail", scale=0.1) # 6,000 orders instead of 60,000
105
+ ds = data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (replaces existing)
106
+ data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
107
+ data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
108
+ data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
109
+ data.create("retail", CATALOG, SCHEMA, scale=0.1) # 6,000 orders instead of 60,000
110
+
111
+ data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files; run again for more
112
+
113
+ pdf = ds.to_pandas("fact_orders") # a pandas DataFrame (no Spark needed)
109
114
  print(ds.sql()) # the full CREATE TABLE / key script
110
- ds.land_files(data.volume(CATALOG, SCHEMA) + "/landing", parts=3, upto=1) # raw CSVs for Auto Loader
111
- ds.drop_tables() # clean up (the schema stays)
115
+ ds.drop_tables(CATALOG, SCHEMA) # clean up (the schema stays)
112
116
  ```
113
117
 
114
118
  ## 🧭 Cheat sheet
@@ -119,5 +123,6 @@ ds.drop_tables() # clean up (the schema stays)
119
123
  | Revenue | `quantity * unit_price * (1 - discount)` |
120
124
  | Order to customer | `JOIN dim_customer USING (customer_id)` |
121
125
  | Order to product | `JOIN dim_product USING (product_id)` |
122
- | Smaller data | `data.generate("retail", scale=0.1)` |
126
+ | Smaller data | `data.create("retail", CATALOG, SCHEMA, scale=0.1)` |
127
+ | New raw files | `data.files("retail", CATALOG, SCHEMA, volume="landing")` |
123
128
  | Clean up | `ds.drop_tables()` |
@@ -78,14 +78,13 @@ FROM readings;
78
78
  ```python
79
79
  from databricksedu import data
80
80
 
81
- ds = data.generate("iot", seed=42)
82
- landing = data.volume(CATALOG, SCHEMA) + "/iot_landing"
83
- ds.land_files(landing, parts=5, upto=1, fmt="json") # first file of readings arrives
84
- ds.land_files(landing, parts=5, upto=3, fmt="json") # two more files arrive later
81
+ data.create("iot", CATALOG, SCHEMA) # tables: sites, devices, readings
82
+ landing = data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # first file arrives
83
+ data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=2, fmt="json") # two more, new rows
85
84
  # point Auto Loader or a streaming read at landing + "/readings"
86
85
  ```
87
86
 
88
- `land_files` never rewrites a file that exists, so an incremental reader only sees the new ones.
87
+ Every `data.files` call writes **new** files with new rows and new `reading_id`s and never rewrites old ones, so an incremental reader only sees the new files.
89
88
 
90
89
  ## 🧭 Cheat sheet
91
90
 
@@ -94,5 +93,5 @@ ds.land_files(landing, parts=5, upto=3, fmt="json") # two more files arrive la
94
93
  | Event time vs arrival | `event_ts` vs `ingest_ts` |
95
94
  | Valid temperatures | `temperature BETWEEN -60 AND 60` |
96
95
  | Deduplicate | key `(device_id, event_ts)` |
97
- | Streaming files | `ds.land_files(path, parts=5, upto=n, fmt="json")` |
98
- | Smaller data | `data.generate("iot", scale=0.1)` |
96
+ | Streaming files | `data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=n, fmt="json")` |
97
+ | Smaller data | `data.create("iot", CATALOG, SCHEMA, scale=0.1)` |
@@ -212,12 +212,11 @@ WHEN NOT MATCHED THEN INSERT *;
212
212
  ```dataset retail
213
213
  ```
214
214
 
215
- Land the **retail** order data as CSV files in a volume in your schema, then load them. Only 2 of the 3 order files land for now.
215
+ Land **retail** order files as CSV in the `landing` volume of your schema, then load them. Two order files land now, a third one arrives later.
216
216
 
217
217
  ```python run
218
- # Land raw CSV files in a volume (2 of the 3 order files for now)
219
- LANDING = data.volume(CATALOG, SCHEMA) + "/lfc_landing"
220
- ds.land_files(LANDING, upto=2)
218
+ # Land raw CSV files in a volume: 2 new order files (every run adds new ones)
219
+ LANDING = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="lfc_landing", n_files=2)
221
220
  ```
222
221
 
223
222
  ```python run
@@ -247,7 +246,7 @@ display(spark.sql(COPY))
247
246
 
248
247
  ```python run
249
248
  # 3) A new file arrives: COPY INTO loads only that one
250
- ds.land_files(LANDING, upto=3)
249
+ data.files("retail", CATALOG, SCHEMA, volume="landing", folder="lfc_landing", n_files=1)
251
250
  display(spark.sql(COPY))
252
251
  ```
253
252
 
@@ -0,0 +1 @@
1
+ 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
@@ -0,0 +1 @@
1
+ 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