databricksedu 0.1.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 (298) hide show
  1. databricksedu-0.1.0/.gitignore +12 -0
  2. databricksedu-0.1.0/CONTENT_GUIDE.md +307 -0
  3. databricksedu-0.1.0/LICENSE +21 -0
  4. databricksedu-0.1.0/PKG-INFO +131 -0
  5. databricksedu-0.1.0/README.md +99 -0
  6. databricksedu-0.1.0/content/analytics/010-sql-warehouses/module.md +223 -0
  7. databricksedu-0.1.0/content/analytics/010-sql-warehouses/quiz.json +22 -0
  8. databricksedu-0.1.0/content/analytics/020-ai-bi-dashboards/module.md +238 -0
  9. databricksedu-0.1.0/content/analytics/020-ai-bi-dashboards/quiz.json +22 -0
  10. databricksedu-0.1.0/content/analytics/030-genie-spaces/module.md +217 -0
  11. databricksedu-0.1.0/content/analytics/030-genie-spaces/quiz.json +22 -0
  12. databricksedu-0.1.0/content/analytics/040-metric-views/module.md +718 -0
  13. databricksedu-0.1.0/content/analytics/040-metric-views/quiz.json +7 -0
  14. databricksedu-0.1.0/content/categories.json +18 -0
  15. databricksedu-0.1.0/content/data-engineering/010-lakehouse-architecture/module.md +197 -0
  16. databricksedu-0.1.0/content/data-engineering/010-lakehouse-architecture/quiz.json +22 -0
  17. databricksedu-0.1.0/content/data-engineering/020-parquet-files/module.md +273 -0
  18. databricksedu-0.1.0/content/data-engineering/020-parquet-files/quiz.json +22 -0
  19. databricksedu-0.1.0/content/data-engineering/030-medallion-architecture/module.md +233 -0
  20. databricksedu-0.1.0/content/data-engineering/030-medallion-architecture/quiz.json +22 -0
  21. databricksedu-0.1.0/content/data-engineering/040-unity-catalog-basics/module.md +245 -0
  22. databricksedu-0.1.0/content/data-engineering/040-unity-catalog-basics/quiz.json +22 -0
  23. databricksedu-0.1.0/content/data-engineering/050-delta-table-anatomy/module.md +267 -0
  24. databricksedu-0.1.0/content/data-engineering/050-delta-table-anatomy/quiz.json +22 -0
  25. databricksedu-0.1.0/content/data-engineering/060-delta-transaction-log/module.md +286 -0
  26. databricksedu-0.1.0/content/data-engineering/060-delta-transaction-log/quiz.json +22 -0
  27. databricksedu-0.1.0/content/data-engineering/070-delta-acid-concurrency/module.md +225 -0
  28. databricksedu-0.1.0/content/data-engineering/070-delta-acid-concurrency/quiz.json +22 -0
  29. databricksedu-0.1.0/content/data-engineering/080-delta-time-travel-vacuum/module.md +224 -0
  30. databricksedu-0.1.0/content/data-engineering/080-delta-time-travel-vacuum/quiz.json +22 -0
  31. databricksedu-0.1.0/content/data-engineering/090-deletion-vectors/module.md +242 -0
  32. databricksedu-0.1.0/content/data-engineering/090-deletion-vectors/quiz.json +22 -0
  33. databricksedu-0.1.0/content/data-engineering/100-delta-dml-merge/module.md +265 -0
  34. databricksedu-0.1.0/content/data-engineering/100-delta-dml-merge/quiz.json +22 -0
  35. databricksedu-0.1.0/content/data-engineering/110-schema-enforcement-evolution/module.md +256 -0
  36. databricksedu-0.1.0/content/data-engineering/110-schema-enforcement-evolution/quiz.json +22 -0
  37. databricksedu-0.1.0/content/data-engineering/120-change-data-feed/module.md +267 -0
  38. databricksedu-0.1.0/content/data-engineering/120-change-data-feed/quiz.json +22 -0
  39. databricksedu-0.1.0/content/data-engineering/130-delta-optimization/module.md +237 -0
  40. databricksedu-0.1.0/content/data-engineering/130-delta-optimization/quiz.json +22 -0
  41. databricksedu-0.1.0/content/data-engineering/140-spark-architecture/module.md +270 -0
  42. databricksedu-0.1.0/content/data-engineering/140-spark-architecture/quiz.json +22 -0
  43. databricksedu-0.1.0/content/data-engineering/150-spark-joins-shuffles/module.md +255 -0
  44. databricksedu-0.1.0/content/data-engineering/150-spark-joins-shuffles/quiz.json +22 -0
  45. databricksedu-0.1.0/content/data-engineering/160-auto-loader-copy-into/module.md +283 -0
  46. databricksedu-0.1.0/content/data-engineering/160-auto-loader-copy-into/quiz.json +22 -0
  47. databricksedu-0.1.0/content/data-engineering/170-structured-streaming-basics/module.md +249 -0
  48. databricksedu-0.1.0/content/data-engineering/170-structured-streaming-basics/quiz.json +22 -0
  49. databricksedu-0.1.0/content/data-engineering/180-watermarks-stateful-streaming/module.md +266 -0
  50. databricksedu-0.1.0/content/data-engineering/180-watermarks-stateful-streaming/quiz.json +22 -0
  51. databricksedu-0.1.0/content/data-engineering/190-declarative-pipelines/module.md +259 -0
  52. databricksedu-0.1.0/content/data-engineering/190-declarative-pipelines/quiz.json +22 -0
  53. databricksedu-0.1.0/content/data-engineering/200-data-quality-expectations/module.md +273 -0
  54. databricksedu-0.1.0/content/data-engineering/200-data-quality-expectations/quiz.json +22 -0
  55. databricksedu-0.1.0/content/data-engineering/210-cdc-scd/module.md +288 -0
  56. databricksedu-0.1.0/content/data-engineering/210-cdc-scd/quiz.json +22 -0
  57. databricksedu-0.1.0/content/data-engineering/220-lakeflow-jobs/module.md +284 -0
  58. databricksedu-0.1.0/content/data-engineering/220-lakeflow-jobs/quiz.json +22 -0
  59. databricksedu-0.1.0/content/data-engineering/230-asset-bundles-cicd/module.md +300 -0
  60. databricksedu-0.1.0/content/data-engineering/230-asset-bundles-cicd/quiz.json +22 -0
  61. databricksedu-0.1.0/content/demo-data/010-retail-data/module.md +123 -0
  62. databricksedu-0.1.0/content/demo-data/020-iot-data/module.md +98 -0
  63. databricksedu-0.1.0/content/demo-data/030-churn-data/module.md +86 -0
  64. databricksedu-0.1.0/content/demo-data/040-support-data/module.md +82 -0
  65. databricksedu-0.1.0/content/demo-data/050-hr-data/module.md +71 -0
  66. databricksedu-0.1.0/content/demo-data/060-cdc-data/module.md +72 -0
  67. databricksedu-0.1.0/content/exam-prep/010-exam-data-engineer-associate/module.md +220 -0
  68. databricksedu-0.1.0/content/exam-prep/010-exam-data-engineer-associate/quiz.json +22 -0
  69. databricksedu-0.1.0/content/exam-prep/020-exam-data-engineer-professional/module.md +226 -0
  70. databricksedu-0.1.0/content/exam-prep/020-exam-data-engineer-professional/quiz.json +22 -0
  71. databricksedu-0.1.0/content/exam-prep/030-exam-data-analyst-associate/module.md +206 -0
  72. databricksedu-0.1.0/content/exam-prep/030-exam-data-analyst-associate/quiz.json +22 -0
  73. databricksedu-0.1.0/content/exam-prep/040-exam-ml-associate/module.md +218 -0
  74. databricksedu-0.1.0/content/exam-prep/040-exam-ml-associate/quiz.json +22 -0
  75. databricksedu-0.1.0/content/exam-prep/050-exam-ml-professional/module.md +212 -0
  76. databricksedu-0.1.0/content/exam-prep/050-exam-ml-professional/quiz.json +22 -0
  77. databricksedu-0.1.0/content/exam-prep/060-exam-genai-engineer-associate/module.md +205 -0
  78. databricksedu-0.1.0/content/exam-prep/060-exam-genai-engineer-associate/quiz.json +22 -0
  79. databricksedu-0.1.0/content/exam-prep/070-exam-spark-developer-associate/module.md +206 -0
  80. databricksedu-0.1.0/content/exam-prep/070-exam-spark-developer-associate/quiz.json +22 -0
  81. databricksedu-0.1.0/content/generative-ai/010-llm-basics/module.md +248 -0
  82. databricksedu-0.1.0/content/generative-ai/010-llm-basics/quiz.json +22 -0
  83. databricksedu-0.1.0/content/generative-ai/020-prompt-engineering/module.md +257 -0
  84. databricksedu-0.1.0/content/generative-ai/020-prompt-engineering/quiz.json +22 -0
  85. databricksedu-0.1.0/content/generative-ai/030-embeddings-vector-search/module.md +254 -0
  86. databricksedu-0.1.0/content/generative-ai/030-embeddings-vector-search/quiz.json +22 -0
  87. databricksedu-0.1.0/content/generative-ai/040-chunking-parsing/module.md +278 -0
  88. databricksedu-0.1.0/content/generative-ai/040-chunking-parsing/quiz.json +22 -0
  89. databricksedu-0.1.0/content/generative-ai/050-rag-architecture/module.md +283 -0
  90. databricksedu-0.1.0/content/generative-ai/050-rag-architecture/quiz.json +22 -0
  91. databricksedu-0.1.0/content/generative-ai/060-agents-tools/module.md +301 -0
  92. databricksedu-0.1.0/content/generative-ai/060-agents-tools/quiz.json +22 -0
  93. databricksedu-0.1.0/content/generative-ai/070-genai-evaluation/module.md +259 -0
  94. databricksedu-0.1.0/content/generative-ai/070-genai-evaluation/quiz.json +22 -0
  95. databricksedu-0.1.0/content/generative-ai/080-ai-functions-gateway/module.md +249 -0
  96. databricksedu-0.1.0/content/generative-ai/080-ai-functions-gateway/quiz.json +22 -0
  97. databricksedu-0.1.0/content/governance/010-uc-privileges/module.md +232 -0
  98. databricksedu-0.1.0/content/governance/010-uc-privileges/quiz.json +22 -0
  99. databricksedu-0.1.0/content/governance/020-row-filters-column-masks/module.md +267 -0
  100. databricksedu-0.1.0/content/governance/020-row-filters-column-masks/quiz.json +22 -0
  101. databricksedu-0.1.0/content/governance/030-delta-sharing/module.md +235 -0
  102. databricksedu-0.1.0/content/governance/030-delta-sharing/quiz.json +22 -0
  103. databricksedu-0.1.0/content/governance/040-lineage-system-tables/module.md +266 -0
  104. databricksedu-0.1.0/content/governance/040-lineage-system-tables/quiz.json +22 -0
  105. databricksedu-0.1.0/content/machine-learning/010-ml-lifecycle/module.md +246 -0
  106. databricksedu-0.1.0/content/machine-learning/010-ml-lifecycle/quiz.json +22 -0
  107. databricksedu-0.1.0/content/machine-learning/020-mlflow-tracking/module.md +272 -0
  108. databricksedu-0.1.0/content/machine-learning/020-mlflow-tracking/quiz.json +22 -0
  109. databricksedu-0.1.0/content/machine-learning/030-feature-engineering/module.md +256 -0
  110. databricksedu-0.1.0/content/machine-learning/030-feature-engineering/quiz.json +22 -0
  111. databricksedu-0.1.0/content/machine-learning/040-hyperparameter-tuning/module.md +250 -0
  112. databricksedu-0.1.0/content/machine-learning/040-hyperparameter-tuning/quiz.json +22 -0
  113. databricksedu-0.1.0/content/machine-learning/050-models-in-unity-catalog/module.md +281 -0
  114. databricksedu-0.1.0/content/machine-learning/050-models-in-unity-catalog/quiz.json +22 -0
  115. databricksedu-0.1.0/content/machine-learning/060-model-serving/module.md +266 -0
  116. databricksedu-0.1.0/content/machine-learning/060-model-serving/quiz.json +22 -0
  117. databricksedu-0.1.0/content/machine-learning/070-model-monitoring/module.md +243 -0
  118. databricksedu-0.1.0/content/machine-learning/070-model-monitoring/quiz.json +22 -0
  119. databricksedu-0.1.0/content/recaps/010-lakeflow-connect-recap/module.md +285 -0
  120. databricksedu-0.1.0/content/recaps/010-lakeflow-connect-recap/quiz.json +7 -0
  121. databricksedu-0.1.0/content/recaps/020-lakeflow-jobs-recap/module.md +190 -0
  122. databricksedu-0.1.0/content/recaps/020-lakeflow-jobs-recap/quiz.json +32 -0
  123. databricksedu-0.1.0/content/recaps/030-declarative-pipelines-recap/module.md +238 -0
  124. databricksedu-0.1.0/content/recaps/030-declarative-pipelines-recap/quiz.json +7 -0
  125. databricksedu-0.1.0/content/recaps/040-devops-essentials-recap/module.md +232 -0
  126. databricksedu-0.1.0/content/recaps/040-devops-essentials-recap/quiz.json +7 -0
  127. databricksedu-0.1.0/content/recaps/050-streaming-pipelines-recap/module.md +259 -0
  128. databricksedu-0.1.0/content/recaps/050-streaming-pipelines-recap/quiz.json +7 -0
  129. databricksedu-0.1.0/content/recaps/060-data-privacy-recap/module.md +262 -0
  130. databricksedu-0.1.0/content/recaps/060-data-privacy-recap/quiz.json +7 -0
  131. databricksedu-0.1.0/content/recaps/070-performance-optimization-recap/module.md +221 -0
  132. databricksedu-0.1.0/content/recaps/070-performance-optimization-recap/quiz.json +32 -0
  133. databricksedu-0.1.0/content/recaps/080-asset-bundles-recap/module.md +208 -0
  134. databricksedu-0.1.0/content/recaps/080-asset-bundles-recap/quiz.json +7 -0
  135. databricksedu-0.1.0/hatch_build.py +21 -0
  136. databricksedu-0.1.0/pyproject.toml +57 -0
  137. databricksedu-0.1.0/src/databricksedu/__init__.py +24 -0
  138. databricksedu-0.1.0/src/databricksedu/_content/catalog.json +1923 -0
  139. databricksedu-0.1.0/src/databricksedu/_content/nb/agents-tools.json.gz +0 -0
  140. databricksedu-0.1.0/src/databricksedu/_content/nb/ai-bi-dashboards.json.gz +0 -0
  141. databricksedu-0.1.0/src/databricksedu/_content/nb/ai-functions-gateway.json.gz +0 -0
  142. databricksedu-0.1.0/src/databricksedu/_content/nb/asset-bundles-cicd.json.gz +0 -0
  143. databricksedu-0.1.0/src/databricksedu/_content/nb/asset-bundles-recap.json.gz +0 -0
  144. databricksedu-0.1.0/src/databricksedu/_content/nb/auto-loader-copy-into.json.gz +0 -0
  145. databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-data.json.gz +0 -0
  146. databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-scd.json.gz +0 -0
  147. databricksedu-0.1.0/src/databricksedu/_content/nb/change-data-feed.json.gz +0 -0
  148. databricksedu-0.1.0/src/databricksedu/_content/nb/chunking-parsing.json.gz +0 -0
  149. databricksedu-0.1.0/src/databricksedu/_content/nb/churn-data.json.gz +0 -0
  150. databricksedu-0.1.0/src/databricksedu/_content/nb/data-privacy-recap.json.gz +0 -0
  151. databricksedu-0.1.0/src/databricksedu/_content/nb/data-quality-expectations.json.gz +0 -0
  152. databricksedu-0.1.0/src/databricksedu/_content/nb/declarative-pipelines-recap.json.gz +0 -0
  153. databricksedu-0.1.0/src/databricksedu/_content/nb/declarative-pipelines.json.gz +0 -0
  154. databricksedu-0.1.0/src/databricksedu/_content/nb/deletion-vectors.json.gz +0 -0
  155. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-acid-concurrency.json.gz +0 -0
  156. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-dml-merge.json.gz +0 -0
  157. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-optimization.json.gz +0 -0
  158. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-sharing.json.gz +0 -0
  159. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-table-anatomy.json.gz +0 -0
  160. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-time-travel-vacuum.json.gz +0 -0
  161. databricksedu-0.1.0/src/databricksedu/_content/nb/delta-transaction-log.json.gz +0 -0
  162. databricksedu-0.1.0/src/databricksedu/_content/nb/devops-essentials-recap.json.gz +0 -0
  163. databricksedu-0.1.0/src/databricksedu/_content/nb/embeddings-vector-search.json.gz +0 -0
  164. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-analyst-associate.json.gz +0 -0
  165. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-engineer-associate.json.gz +0 -0
  166. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-engineer-professional.json.gz +0 -0
  167. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-genai-engineer-associate.json.gz +0 -0
  168. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-ml-associate.json.gz +0 -0
  169. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-ml-professional.json.gz +0 -0
  170. databricksedu-0.1.0/src/databricksedu/_content/nb/exam-spark-developer-associate.json.gz +0 -0
  171. databricksedu-0.1.0/src/databricksedu/_content/nb/feature-engineering.json.gz +0 -0
  172. databricksedu-0.1.0/src/databricksedu/_content/nb/genai-evaluation.json.gz +0 -0
  173. databricksedu-0.1.0/src/databricksedu/_content/nb/genie-spaces.json.gz +0 -0
  174. databricksedu-0.1.0/src/databricksedu/_content/nb/hr-data.json.gz +0 -0
  175. databricksedu-0.1.0/src/databricksedu/_content/nb/hyperparameter-tuning.json.gz +0 -0
  176. databricksedu-0.1.0/src/databricksedu/_content/nb/iot-data.json.gz +0 -0
  177. databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-connect-recap.json.gz +0 -0
  178. databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-jobs-recap.json.gz +0 -0
  179. databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-jobs.json.gz +0 -0
  180. databricksedu-0.1.0/src/databricksedu/_content/nb/lakehouse-architecture.json.gz +0 -0
  181. databricksedu-0.1.0/src/databricksedu/_content/nb/lineage-system-tables.json.gz +0 -0
  182. databricksedu-0.1.0/src/databricksedu/_content/nb/llm-basics.json.gz +0 -0
  183. databricksedu-0.1.0/src/databricksedu/_content/nb/medallion-architecture.json.gz +0 -0
  184. databricksedu-0.1.0/src/databricksedu/_content/nb/metric-views.json.gz +0 -0
  185. databricksedu-0.1.0/src/databricksedu/_content/nb/ml-lifecycle.json.gz +0 -0
  186. databricksedu-0.1.0/src/databricksedu/_content/nb/mlflow-tracking.json.gz +0 -0
  187. databricksedu-0.1.0/src/databricksedu/_content/nb/model-monitoring.json.gz +0 -0
  188. databricksedu-0.1.0/src/databricksedu/_content/nb/model-serving.json.gz +0 -0
  189. databricksedu-0.1.0/src/databricksedu/_content/nb/models-in-unity-catalog.json.gz +0 -0
  190. databricksedu-0.1.0/src/databricksedu/_content/nb/parquet-files.json.gz +0 -0
  191. databricksedu-0.1.0/src/databricksedu/_content/nb/performance-optimization-recap.json.gz +0 -0
  192. databricksedu-0.1.0/src/databricksedu/_content/nb/prompt-engineering.json.gz +0 -0
  193. databricksedu-0.1.0/src/databricksedu/_content/nb/rag-architecture.json.gz +0 -0
  194. databricksedu-0.1.0/src/databricksedu/_content/nb/retail-data.json.gz +0 -0
  195. databricksedu-0.1.0/src/databricksedu/_content/nb/row-filters-column-masks.json.gz +0 -0
  196. databricksedu-0.1.0/src/databricksedu/_content/nb/schema-enforcement-evolution.json.gz +0 -0
  197. databricksedu-0.1.0/src/databricksedu/_content/nb/spark-architecture.json.gz +0 -0
  198. databricksedu-0.1.0/src/databricksedu/_content/nb/spark-joins-shuffles.json.gz +0 -0
  199. databricksedu-0.1.0/src/databricksedu/_content/nb/sql-warehouses.json.gz +0 -0
  200. databricksedu-0.1.0/src/databricksedu/_content/nb/streaming-pipelines-recap.json.gz +0 -0
  201. databricksedu-0.1.0/src/databricksedu/_content/nb/structured-streaming-basics.json.gz +0 -0
  202. databricksedu-0.1.0/src/databricksedu/_content/nb/support-data.json.gz +0 -0
  203. databricksedu-0.1.0/src/databricksedu/_content/nb/uc-privileges.json.gz +0 -0
  204. databricksedu-0.1.0/src/databricksedu/_content/nb/unity-catalog-basics.json.gz +0 -0
  205. databricksedu-0.1.0/src/databricksedu/_content/nb/watermarks-stateful-streaming.json.gz +0 -0
  206. databricksedu-0.1.0/src/databricksedu/_content/web/agents-tools.b64 +1 -0
  207. databricksedu-0.1.0/src/databricksedu/_content/web/ai-bi-dashboards.b64 +1 -0
  208. databricksedu-0.1.0/src/databricksedu/_content/web/ai-functions-gateway.b64 +1 -0
  209. databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-cicd.b64 +1 -0
  210. databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-recap.b64 +1 -0
  211. databricksedu-0.1.0/src/databricksedu/_content/web/auto-loader-copy-into.b64 +1 -0
  212. databricksedu-0.1.0/src/databricksedu/_content/web/cdc-data.b64 +1 -0
  213. databricksedu-0.1.0/src/databricksedu/_content/web/cdc-scd.b64 +1 -0
  214. databricksedu-0.1.0/src/databricksedu/_content/web/change-data-feed.b64 +1 -0
  215. databricksedu-0.1.0/src/databricksedu/_content/web/chunking-parsing.b64 +1 -0
  216. databricksedu-0.1.0/src/databricksedu/_content/web/churn-data.b64 +1 -0
  217. databricksedu-0.1.0/src/databricksedu/_content/web/data-privacy-recap.b64 +1 -0
  218. databricksedu-0.1.0/src/databricksedu/_content/web/data-quality-expectations.b64 +1 -0
  219. databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines-recap.b64 +1 -0
  220. databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines.b64 +1 -0
  221. databricksedu-0.1.0/src/databricksedu/_content/web/deletion-vectors.b64 +1 -0
  222. databricksedu-0.1.0/src/databricksedu/_content/web/delta-acid-concurrency.b64 +1 -0
  223. databricksedu-0.1.0/src/databricksedu/_content/web/delta-dml-merge.b64 +1 -0
  224. databricksedu-0.1.0/src/databricksedu/_content/web/delta-optimization.b64 +1 -0
  225. databricksedu-0.1.0/src/databricksedu/_content/web/delta-sharing.b64 +1 -0
  226. databricksedu-0.1.0/src/databricksedu/_content/web/delta-table-anatomy.b64 +1 -0
  227. databricksedu-0.1.0/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +1 -0
  228. databricksedu-0.1.0/src/databricksedu/_content/web/delta-transaction-log.b64 +1 -0
  229. databricksedu-0.1.0/src/databricksedu/_content/web/devops-essentials-recap.b64 +1 -0
  230. databricksedu-0.1.0/src/databricksedu/_content/web/embeddings-vector-search.b64 +1 -0
  231. databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-analyst-associate.b64 +1 -0
  232. databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-engineer-associate.b64 +1 -0
  233. databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-engineer-professional.b64 +1 -0
  234. databricksedu-0.1.0/src/databricksedu/_content/web/exam-genai-engineer-associate.b64 +1 -0
  235. databricksedu-0.1.0/src/databricksedu/_content/web/exam-ml-associate.b64 +1 -0
  236. databricksedu-0.1.0/src/databricksedu/_content/web/exam-ml-professional.b64 +1 -0
  237. databricksedu-0.1.0/src/databricksedu/_content/web/exam-spark-developer-associate.b64 +1 -0
  238. databricksedu-0.1.0/src/databricksedu/_content/web/feature-engineering.b64 +1 -0
  239. databricksedu-0.1.0/src/databricksedu/_content/web/genai-evaluation.b64 +1 -0
  240. databricksedu-0.1.0/src/databricksedu/_content/web/genie-spaces.b64 +1 -0
  241. databricksedu-0.1.0/src/databricksedu/_content/web/hr-data.b64 +1 -0
  242. databricksedu-0.1.0/src/databricksedu/_content/web/hyperparameter-tuning.b64 +1 -0
  243. databricksedu-0.1.0/src/databricksedu/_content/web/iot-data.b64 +1 -0
  244. databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +1 -0
  245. databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs-recap.b64 +1 -0
  246. databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs.b64 +1 -0
  247. databricksedu-0.1.0/src/databricksedu/_content/web/lakehouse-architecture.b64 +1 -0
  248. databricksedu-0.1.0/src/databricksedu/_content/web/lineage-system-tables.b64 +1 -0
  249. databricksedu-0.1.0/src/databricksedu/_content/web/llm-basics.b64 +1 -0
  250. databricksedu-0.1.0/src/databricksedu/_content/web/medallion-architecture.b64 +1 -0
  251. databricksedu-0.1.0/src/databricksedu/_content/web/metric-views.b64 +1 -0
  252. databricksedu-0.1.0/src/databricksedu/_content/web/ml-lifecycle.b64 +1 -0
  253. databricksedu-0.1.0/src/databricksedu/_content/web/mlflow-tracking.b64 +1 -0
  254. databricksedu-0.1.0/src/databricksedu/_content/web/model-monitoring.b64 +1 -0
  255. databricksedu-0.1.0/src/databricksedu/_content/web/model-serving.b64 +1 -0
  256. databricksedu-0.1.0/src/databricksedu/_content/web/models-in-unity-catalog.b64 +1 -0
  257. databricksedu-0.1.0/src/databricksedu/_content/web/parquet-files.b64 +1 -0
  258. databricksedu-0.1.0/src/databricksedu/_content/web/performance-optimization-recap.b64 +1 -0
  259. databricksedu-0.1.0/src/databricksedu/_content/web/prompt-engineering.b64 +1 -0
  260. databricksedu-0.1.0/src/databricksedu/_content/web/rag-architecture.b64 +1 -0
  261. databricksedu-0.1.0/src/databricksedu/_content/web/retail-data.b64 +1 -0
  262. databricksedu-0.1.0/src/databricksedu/_content/web/row-filters-column-masks.b64 +1 -0
  263. databricksedu-0.1.0/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +1 -0
  264. databricksedu-0.1.0/src/databricksedu/_content/web/spark-architecture.b64 +1 -0
  265. databricksedu-0.1.0/src/databricksedu/_content/web/spark-joins-shuffles.b64 +1 -0
  266. databricksedu-0.1.0/src/databricksedu/_content/web/sql-warehouses.b64 +1 -0
  267. databricksedu-0.1.0/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +1 -0
  268. databricksedu-0.1.0/src/databricksedu/_content/web/structured-streaming-basics.b64 +1 -0
  269. databricksedu-0.1.0/src/databricksedu/_content/web/support-data.b64 +1 -0
  270. databricksedu-0.1.0/src/databricksedu/_content/web/uc-privileges.b64 +1 -0
  271. databricksedu-0.1.0/src/databricksedu/_content/web/unity-catalog-basics.b64 +1 -0
  272. databricksedu-0.1.0/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +1 -0
  273. databricksedu-0.1.0/src/databricksedu/_version.py +1 -0
  274. databricksedu-0.1.0/src/databricksedu/app.py +192 -0
  275. databricksedu-0.1.0/src/databricksedu/assets/app.css +1 -0
  276. databricksedu-0.1.0/src/databricksedu/assets/app.js +353 -0
  277. databricksedu-0.1.0/src/databricksedu/assets/dbx.css +1 -0
  278. databricksedu-0.1.0/src/databricksedu/assets/quiz.js +47 -0
  279. databricksedu-0.1.0/src/databricksedu/assets/viz.css +1 -0
  280. databricksedu-0.1.0/src/databricksedu/assets/viz.js +84 -0
  281. databricksedu-0.1.0/src/databricksedu/catalog.py +95 -0
  282. databricksedu-0.1.0/src/databricksedu/data/__init__.py +58 -0
  283. databricksedu-0.1.0/src/databricksedu/data/_core.py +339 -0
  284. databricksedu-0.1.0/src/databricksedu/data/cdc.py +75 -0
  285. databricksedu-0.1.0/src/databricksedu/data/churn.py +74 -0
  286. databricksedu-0.1.0/src/databricksedu/data/hr.py +58 -0
  287. databricksedu-0.1.0/src/databricksedu/data/iot.py +86 -0
  288. databricksedu-0.1.0/src/databricksedu/data/retail.py +77 -0
  289. databricksedu-0.1.0/src/databricksedu/data/support.py +128 -0
  290. databricksedu-0.1.0/src/databricksedu/workspace.py +157 -0
  291. databricksedu-0.1.0/tests/test_smoke.py +62 -0
  292. databricksedu-0.1.0/tools/assets/app.css +149 -0
  293. databricksedu-0.1.0/tools/assets/app.js +362 -0
  294. databricksedu-0.1.0/tools/assets/dbx.css +215 -0
  295. databricksedu-0.1.0/tools/assets/quiz.js +47 -0
  296. databricksedu-0.1.0/tools/assets/viz.js +84 -0
  297. databricksedu-0.1.0/tools/build.py +347 -0
  298. databricksedu-0.1.0/tools/render.py +544 -0
@@ -0,0 +1,12 @@
1
+ .DS_Store
2
+ __pycache__/
3
+ .venv/
4
+ dist/
5
+ build/
6
+ *.egg-info/
7
+ .pytest_cache/
8
+ # generated by tools/build.py (the hatch build hook runs it)
9
+ src/databricksedu/_content/
10
+ src/databricksedu/assets/
11
+ # local reviewer notes
12
+ REVIEW_NOTES.md
@@ -0,0 +1,307 @@
1
+ # Writing a databricksedu module
2
+
3
+ One module = one small idea, taught in about 8 minutes. You write **one Markdown file**; the build turns it into
4
+ animated slides, a document view, a lecture notebook and an exercises notebook.
5
+
6
+ ```
7
+ content/<category>/<NNN-slug>/module.md required
8
+ content/<category>/<NNN-slug>/quiz.json required (5 questions)
9
+ ```
10
+
11
+ `<NNN-slug>`: a three-digit order number and the module id, for example `060-delta-transaction-log`.
12
+ The id (`delta-transaction-log`) must be unique across all categories.
13
+
14
+ Validate while you write (it writes nothing):
15
+
16
+ ```bash
17
+ .venv/bin/python tools/build.py --check content/<category>/<NNN-slug>
18
+ ```
19
+
20
+ The reference module is `content/data-engineering/050-delta-table-anatomy/`. Read it first.
21
+
22
+ ## Front matter
23
+
24
+ ```markdown
25
+ ---
26
+ title: Anatomy of a Delta table
27
+ summary: One or two sentences for the module card. Say what the learner will be able to do.
28
+ icon: ๐Ÿงฌ
29
+ level: Beginner # Beginner | Intermediate | Advanced
30
+ minutes: 10
31
+ group: Delta Lake internals # sub-heading inside the category
32
+ tags: [Delta Lake, Parquet, Transaction log]
33
+ ---
34
+ ```
35
+
36
+ ## Body structure
37
+
38
+ ```markdown
39
+ # Title (same as the front matter title)
40
+
41
+ > One or two sentences that set the scene. This becomes the subtitle of the title slide.
42
+
43
+ **The one idea to remember:** a single sentence. It becomes the highlighted card on the title slide.
44
+
45
+ ## ๐Ÿ’ก First section every "## " heading is one slide and one notebook cell
46
+ ...
47
+ ## Exercise 1: short title headings that start with "Exercise" go to the exercises notebook
48
+ ...
49
+ ## โš ๏ธ Common mistakes
50
+ ## ๐Ÿงญ Cheat sheet
51
+ ```
52
+
53
+ Rules that keep slides readable:
54
+
55
+ - **8 to 12 sections** in total, including 2 or 3 exercises. A module is small on purpose.
56
+ - One section = one slide. Keep it to **one main element** (a visualization, a table, or a code block) plus at most
57
+ about 70 words of text or 4 bullets. If it does not fit a slide, split the section.
58
+ - Start a heading with an emoji to set the slide icon (`## ๐Ÿ“œ The transaction log`). Otherwise one is guessed.
59
+ - Tables: at most 4 columns and 6 rows.
60
+ - Write plain English in short sentences. Explain the *why*, not only the *what*. No filler, no marketing words.
61
+ - Use current product names (Lakeflow Jobs, Lakeflow Spark Declarative Pipelines, Unity Catalog, Declarative
62
+ Automation Bundles). Mention the old name once where learners will still meet it ("formerly Delta Live Tables").
63
+ - Do not invent syntax. If you are not sure a statement runs on Databricks, show it as display-only code.
64
+
65
+ ## Blocks
66
+
67
+ | Block | Slides and document | Notebook |
68
+ |---|---|---|
69
+ | ```` ```sql ```` / ```` ```python ```` / ```` ```json ```` / ```` ```yaml ```` / ```` ```bash ```` | highlighted code | shown inside the text cell |
70
+ | ```` ```sql run ```` / ```` ```python run ```` | code with a "runs in the notebook" badge | **a runnable cell** |
71
+ | ```` ```sql todo ```` / ```` ```python todo ```` | code with a "your turn" badge | a runnable starter cell |
72
+ | ```` ```sql solution ```` / ```` ```python solution ```` | collapsed "Show the solution" | collapsed inside the text cell |
73
+ | ```` ```viz <type> ```` | animated visualization | the same visualization |
74
+ | ```` ```dataset <name> ```` | dataset card and setup code | the three-step data setup (see below) |
75
+ | `**The one idea to remember:** ...` | highlighted idea card | same |
76
+ | `> text` | callout | same |
77
+ | `- โŒ ...` / `- โœ… ...` | red / green list items | same |
78
+
79
+ The first comment line of a `run` / `todo` block (`-- ...` or `# ...`) becomes the cell title.
80
+
81
+ ## Demo data: the `dataset` block
82
+
83
+ Put this once, in a section called `## ๐Ÿงช Try it: ...`, before the first runnable cell that needs data:
84
+
85
+ ````markdown
86
+ ```dataset retail
87
+ ```
88
+ ````
89
+
90
+ In the notebook it expands to: (1) generate the data and register temp views, (2) two variables `CATALOG` and
91
+ `SCHEMA` that the learner fills in, followed by `data.use(CATALOG, SCHEMA)`, (3) SQL cells that create the tables
92
+ with primary and foreign keys. After it, your cells can rely on:
93
+
94
+ - `data` (the module), `ds` (the generated dataset), `CATALOG`, `SCHEMA` (strings), `spark`
95
+ - the current catalog and schema are set, so **use unqualified table names**: `SELECT * FROM fact_orders`
96
+ - `data.volume(CATALOG, SCHEMA)` returns a `/Volumes/...` path you may write files to (it creates the volume)
97
+ - `ds.land_files(path, parts=3, upto=1, fmt="csv")` writes raw files for ingestion demos; call it again with a
98
+ larger `upto` to simulate new files arriving
99
+
100
+ The exercises notebook repeats the same setup automatically, so exercises must only depend on the dataset tables
101
+ (not on objects created by the lecture cells), or create what they need themselves.
102
+
103
+ Rules for runnable cells (`run`, `todo`, `solution`):
104
+
105
+ - They must work on **serverless** compute with Unity Catalog, as a normal user who owns only one schema.
106
+ - **Never** `CREATE CATALOG` or `CREATE SCHEMA`, never touch objects you did not create.
107
+ - Prefix the objects a module creates with a short module word (`anatomy_orders`, `dv_orders`), and use
108
+ `CREATE OR REPLACE` so cells can be re-run.
109
+ - No cluster-only settings (`spark.conf.set` of Delta or shuffle configs), no DBFS paths, no `%sh`, no `%run`.
110
+ - Things that need an admin, an external location, a paid endpoint or minutes of start-up time (serving endpoints,
111
+ Vector Search endpoints, pipelines, jobs, Delta Sharing recipients) are **display-only** code. Say so in a callout.
112
+ - End the last exercise solution with a commented-out clean-up (`-- DROP TABLE anatomy_orders;`).
113
+
114
+ ### Available datasets
115
+
116
+ **`retail`** - Retail star schema. 500 customers, 40 products and 60,000 orders (Jan 2025 - Oct 2026). Cheap Books sell far more often than expensive Electronics, and the orders include CANCELLED and TEST rows to filter out.
117
+ Good for: SQL, joins, aggregations, Delta Lake internals, medallion pipelines, metric views, dashboards
118
+
119
+ - `dim_customer` (500 rows; PK (customer_id)): `customer_id` BIGINT, `customer_name` STRING, `region` STRING, `segment` STRING, `email` STRING, `birth_year` INT, `postal_code` STRING
120
+ - `dim_product` (40 rows; PK (product_id)): `product_id` BIGINT, `product_name` STRING, `category` STRING, `unit_price` DOUBLE
121
+ - `fact_orders` (60,000 rows; PK (order_id); FK customer_id -> dim_customer.customer_id; FK product_id -> dim_product.product_id): `order_id` BIGINT, `order_date` DATE, `customer_id` BIGINT, `product_id` BIGINT, `quantity` INT, `discount` DOUBLE, `status` STRING
122
+
123
+ **`iot`** - IoT sensor readings. 12 sites, 200 devices and 50,000 sensor readings over 30 days. Readings follow a daily temperature cycle and include a few duplicates, late arrivals and impossible values for data quality work.
124
+ Good for: Structured Streaming, Auto Loader, watermarks, deduplication, expectations, time-series aggregation
125
+
126
+ - `sites` (12 rows; PK (site_id)): `site_id` BIGINT, `site_name` STRING, `country` STRING, `latitude` DOUBLE, `longitude` DOUBLE
127
+ - `devices` (200 rows; PK (device_id); FK site_id -> sites.site_id): `device_id` BIGINT, `serial_number` STRING, `site_id` BIGINT, `device_type` STRING, `model` STRING, `installed_on` DATE
128
+ - `readings` (50,500 rows; PK (reading_id); FK device_id -> devices.device_id): `reading_id` BIGINT, `device_id` BIGINT, `event_ts` TIMESTAMP, `ingest_ts` TIMESTAMP, `temperature` DOUBLE, `humidity` DOUBLE, `battery` DOUBLE, `status` STRING
129
+
130
+ **`churn`** - Telco churn (machine learning). 5,000 telco subscribers with a churn label that really depends on the features (contract type, support calls, payment failures, tenure), plus 30,000 rows of monthly usage for feature engineering.
131
+ Good for: MLflow tracking, feature tables, train/test splits, hyperparameter tuning, model serving, drift monitoring
132
+
133
+ - `subscribers` (5,000 rows; PK (subscriber_id)): `subscriber_id` BIGINT, `signup_date` DATE, `plan` STRING, `contract` STRING, `region` STRING, `age` INT, `tenure_months` INT, `monthly_fee` DOUBLE, `support_calls_90d` INT, `payment_failures_6m` INT, `has_app` BOOLEAN, `avg_weekly_minutes` DOUBLE, `churned` INT
134
+ - `usage_monthly` (30,000 rows; PK (subscriber_id, month); FK subscriber_id -> subscribers.subscriber_id): `subscriber_id` BIGINT, `month` DATE, `minutes` DOUBLE, `data_gb` DOUBLE, `billed_amount` DOUBLE
135
+
136
+ **`support`** - Support knowledge base (generative AI). 48 knowledge-base articles and 2,000 support tickets for a fictional smart-home company. Every ticket is about a product and an issue that one article answers, so retrieval can be checked.
137
+ Good for: Chunking, embeddings, Vector Search, RAG, AI Functions (ai_query, ai_classify), agent tools, evaluation sets
138
+
139
+ - `kb_articles` (48 rows; PK (article_id)): `article_id` BIGINT, `title` STRING, `product` STRING, `topic` STRING, `body` STRING, `updated_on` DATE
140
+ - `tickets` (2,000 rows; PK (ticket_id); FK article_id -> kb_articles.article_id): `ticket_id` BIGINT, `customer_id` BIGINT, `product` STRING, `subject` STRING, `body` STRING, `priority` STRING, `created_at` TIMESTAMP, `resolved` BOOLEAN, `article_id` BIGINT
141
+
142
+ **`hr`** - HR with sensitive columns (governance). 8 departments and 300 employees with synthetic PII (email, national id, salary) and a manager hierarchy. Made for row filters, column masks, dynamic views and privilege exercises.
143
+ Good for: Unity Catalog privileges, row filters, column masks, dynamic views, pseudonymization, self joins
144
+
145
+ - `departments` (8 rows; PK (department_id)): `department_id` BIGINT, `department_name` STRING, `country` STRING
146
+ - `employees` (300 rows; PK (employee_id); FK department_id -> departments.department_id; FK manager_id -> employees.employee_id): `employee_id` BIGINT, `full_name` STRING, `email` STRING, `national_id` STRING, `department_id` BIGINT, `level` STRING, `salary` DOUBLE, `country` STRING, `hired_on` DATE, `manager_id` BIGINT
147
+
148
+ **`cdc`** - Change data capture feed. A 200-row customer snapshot and 600 change events (INSERT, UPDATE, DELETE) with a sequence number. Some events arrive out of order, so the sequence column matters.
149
+ Good for: MERGE INTO, AUTO CDC (APPLY CHANGES), SCD Type 1 and Type 2, Change Data Feed, deduplication
150
+
151
+ - `customers_snapshot` (200 rows; PK (customer_id)): `customer_id` BIGINT, `customer_name` STRING, `email` STRING, `city` STRING, `tier` STRING, `updated_at` TIMESTAMP
152
+ - `customers_changes` (600 rows; PK (arrival_order)): `arrival_order` BIGINT, `sequence_num` BIGINT, `operation` STRING, `customer_id` BIGINT, `customer_name` STRING, `email` STRING, `city` STRING, `tier` STRING, `changed_at` TIMESTAMP
153
+
154
+ ## Visualizations
155
+
156
+ ````markdown
157
+ ```viz <type>
158
+ { ...JSON... }
159
+ ```
160
+ ````
161
+
162
+ Text fields accept inline Markdown (`**bold**`, `` `code` ``). Colors: `bronze silver gold red blue teal purple amber
163
+ green navy gray pink`. Types with **steps** get Previous / Next / Play controls, and in the slides the right-arrow
164
+ key walks through the steps before it moves to the next slide. Use **at least three visualizations per module, of
165
+ at least two different types, and make at least one of them stepped.** A good visualization shows the mechanism
166
+ (what moves, what changes), not a decorated bullet list.
167
+
168
+ ### `flow`: a pipeline of boxes with moving dots
169
+
170
+ ```json
171
+ {"title": "optional", "caption": "optional",
172
+ "nodes": [{"icon": "๐Ÿ“ฅ", "title": "Bronze", "sub": "raw, append-only", "color": "bronze", "items": ["optional bullet"]},
173
+ {"icon": "๐Ÿงน", "title": "Silver", "sub": "clean, conformed", "color": "silver"},
174
+ {"icon": "๐Ÿ†", "title": "Gold", "sub": "business aggregates", "color": "gold"}],
175
+ "edges": ["label for arrow 1", "label for arrow 2"],
176
+ "steps": [{"label": "Ingest", "focus": [0], "note": "what happens here"},
177
+ {"label": "Clean", "focus": [1], "note": "..."}]}
178
+ ```
179
+
180
+ `edges` and `steps` are optional. With steps, the focused nodes are highlighted and the rest are dimmed.
181
+ Use at most 5 nodes.
182
+
183
+ ### `files`: a folder that changes step by step (ideal for Delta internals)
184
+
185
+ ```json
186
+ {"title": "orders/",
187
+ "steps": [
188
+ {"label": "CREATE TABLE", "note": "...", "add": [{"path": "_delta_log/00000000000000000000.json", "tag": "v0 ยท metaData"}]},
189
+ {"label": "INSERT", "note": "...", "add": [{"path": "part-00000-a1.snappy.parquet", "tag": "3 rows"},
190
+ {"path": "_delta_log/00000000000000000001.json", "tag": "v1 ยท add"}]},
191
+ {"label": "DELETE", "note": "...", "remove": ["part-00000-a1.snappy.parquet"], "tag": {"part-00000-a1.snappy.parquet": "new tag"}},
192
+ {"label": "VACUUM", "note": "...", "delete": ["part-00000-a1.snappy.parquet"]}
193
+ ]}
194
+ ```
195
+
196
+ Per step: `add` (new files), `remove` (file leaves the table but stays on disk: shown as a tombstone), `delete`
197
+ (file is physically deleted), `tag` (change the small label of a file). Files under `_delta_log/` are grouped as the
198
+ transaction log. Icons follow the extension (`.json`, `.parquet`, `.checkpoint.parquet`, `.crc`, `.bin`, `.csv`).
199
+
200
+ ### `table`: rows that change step by step (DML, MERGE, SCD, deduplication)
201
+
202
+ ```json
203
+ {"title": "customers", "columns": ["id", "name", "city"],
204
+ "rows": [[1, "Ann", "Paris"], [2, "Bob", "Rome"]],
205
+ "steps": [
206
+ {"label": "Start", "note": "..."},
207
+ {"label": "UPDATE", "note": "...", "upd": {"1": {"city": "Milan"}}},
208
+ {"label": "INSERT", "note": "...", "add": [[3, "Cy", "Oslo"]]},
209
+ {"label": "DELETE", "note": "...", "del": [0]},
210
+ {"label": "Look here", "note": "...", "hl": [2]}
211
+ ]}
212
+ ```
213
+
214
+ Rows are addressed by index (0-based, in the order they were ever added). `upd` changes cells, `add` appends rows,
215
+ `del` strikes a row through (it stays visible), `hide` removes it, `hl` highlights rows for that step only.
216
+ Use `null` for NULL. Without `steps` it is a static table.
217
+
218
+ ### `code`: walk through a piece of code or a file, a few lines at a time
219
+
220
+ This one is not JSON. Three parts separated by `---` lines: header, the code, the steps.
221
+
222
+ ````markdown
223
+ ```viz code
224
+ title: _delta_log/00000000000000000001.json
225
+ lang: json
226
+ ---
227
+ {"commitInfo": {"operation": "WRITE"}}
228
+ {"add": {"path": "part-00000.parquet", "size": 1024}}
229
+ ---
230
+ 1 | commitInfo | Who did what.
231
+ 2 | add | The new file joins the table.
232
+ ```
233
+ ````
234
+
235
+ Each step is `lines | label | note`; lines are `3`, `2-4` or `1,5-6` (1-based). `lang` is any Pygments lexer
236
+ (`json`, `sql`, `python`, `yaml`, `text`). Keep it under 14 lines.
237
+
238
+ ### `compare`: two to four cards side by side
239
+
240
+ ```json
241
+ {"title": "optional",
242
+ "items": [{"icon": "๐Ÿ›๏ธ", "title": "Data warehouse", "sub": "optional line", "color": "blue",
243
+ "points": ["โœ… fast SQL", "โŒ expensive for raw data", "neutral point"], "foot": "optional footer"}]}
244
+ ```
245
+
246
+ ### `timeline`: events on a line, revealed one by one
247
+
248
+ ```json
249
+ {"title": "optional",
250
+ "items": [{"label": "v0", "title": "CREATE", "sub": "optional", "color": "navy", "note": "shown while this item is current"}]}
251
+ ```
252
+
253
+ Add `"stepped": false` for a static timeline. Use at most 7 items.
254
+
255
+ ### `layers`: a stack (architecture, hierarchy of responsibilities)
256
+
257
+ ```json
258
+ {"layers": [{"icon": "๐Ÿ›ก๏ธ", "title": "Unity Catalog", "sub": "governance", "color": "purple", "items": ["Catalogs", "Lineage"]}]}
259
+ ```
260
+
261
+ ### `tree`: a hierarchy (namespace, folder, org chart)
262
+
263
+ ```json
264
+ {"root": {"icon": "๐Ÿ—„๏ธ", "label": "metastore", "sub": "one per region", "color": "navy",
265
+ "children": [{"icon": "๐Ÿ“š", "label": "catalog", "color": "blue", "children": []}]}}
266
+ ```
267
+
268
+ ### `html`: raw HTML for a one-off diagram
269
+
270
+ Only when no type above fits. No scripts, no external resources, inline styles only.
271
+
272
+ ## Exercises
273
+
274
+ Two or three per module, each its own `## Exercise N: title` section: a short task, a starter cell, a solution.
275
+
276
+ ````markdown
277
+ ## Exercise 1: count the commits
278
+
279
+ Insert two more batches, then predict the next version number before you look.
280
+
281
+ ```sql todo
282
+ -- TODO 1: insert orders 1001 to 1500 into anatomy_orders
283
+ -- TODO 2: show the table history
284
+ ```
285
+
286
+ ```sql solution
287
+ INSERT INTO anatomy_orders SELECT * FROM fact_orders WHERE order_id BETWEEN 1001 AND 1500;
288
+ DESCRIBE HISTORY anatomy_orders;
289
+ ```
290
+ ````
291
+
292
+ Exercises should make the learner predict or explain something, not only retype the lecture.
293
+
294
+ ## quiz.json
295
+
296
+ Five questions that test understanding, each with 4 options:
297
+
298
+ ```json
299
+ [
300
+ {"q": "Question text. Inline `code` is allowed.",
301
+ "o": ["Option A", "Option B", "Option C", "Option D"],
302
+ "c": 1,
303
+ "e": "Why the right answer is right, in one or two sentences."}
304
+ ]
305
+ ```
306
+
307
+ `c` is the 0-based index of the correct option. Vary the position of the correct answer.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mihรกly Orsรณs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.5
2
+ Name: databricksedu
3
+ Version: 0.1.0
4
+ Summary: Bite-sized Databricks lessons that run inside your notebook: animated slides, notes, exercises and seeded demo data.
5
+ Project-URL: Homepage, https://github.com/misrori/databricksedu
6
+ Project-URL: Source, https://github.com/misrori/databricksedu
7
+ Project-URL: Practice exams, https://goldhandacademy.com
8
+ Author: Mihรกly Orsรณs
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: certification,databricks,delta lake,education,spark,training,unity catalog
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Framework :: Jupyter
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Education
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Database
18
+ Classifier: Topic :: Education
19
+ Requires-Python: >=3.9
20
+ Provides-Extra: dev
21
+ Requires-Dist: build; extra == 'dev'
22
+ Requires-Dist: markdown>=3.5; extra == 'dev'
23
+ Requires-Dist: pygments>=2.17; extra == 'dev'
24
+ Requires-Dist: pytest; extra == 'dev'
25
+ Requires-Dist: twine; extra == 'dev'
26
+ Provides-Extra: pandas
27
+ Requires-Dist: pandas; extra == 'pandas'
28
+ Provides-Extra: workspace
29
+ Requires-Dist: databricks-sdk>=0.20; extra == 'workspace'
30
+ Requires-Dist: ipywidgets>=8; extra == 'workspace'
31
+ Description-Content-Type: text/markdown
32
+
33
+ # databricksedu
34
+
35
+ Bite-sized Databricks lessons that run **inside your notebook**. One function opens an app in the notebook output.
36
+ In it you browse the library, play animated slides, read the notes, take a quiz, and save the lecture and exercise
37
+ notebooks into your workspace.
38
+
39
+ ```python
40
+ %pip install databricksedu
41
+ ```
42
+
43
+ ```python
44
+ import databricksedu
45
+ databricksedu.start()
46
+ ```
47
+
48
+ Works on Databricks serverless and classic compute. No dependencies beyond what Databricks already ships.
49
+
50
+ ## What is inside
51
+
52
+ | Track | Examples |
53
+ |---|---|
54
+ | ๐Ÿ› ๏ธ Data Engineering | Lakehouse architecture, Parquet files, Medallion architecture, Anatomy of a Delta table, the transaction log, deletion vectors, MERGE, Change Data Feed, Spark joins and shuffles, Auto Loader, Structured Streaming, Declarative Pipelines, Lakeflow Jobs, Bundles and CI/CD |
55
+ | ๐Ÿค– Machine Learning | ML lifecycle, MLflow tracking, feature engineering, tuning, models in Unity Catalog, serving, monitoring |
56
+ | โœจ Generative AI | How LLMs work, prompting, embeddings and Vector Search, chunking, RAG, agents, evaluation, AI Functions |
57
+ | ๐Ÿ“Š Analytics & AI/BI | SQL warehouses, AI/BI dashboards, Genie spaces, metric views |
58
+ | ๐Ÿ›ก๏ธ Governance & Security | Unity Catalog privileges, row filters and column masks, Delta Sharing, lineage and system tables |
59
+ | ๐ŸŽ’ Course Recaps | 8-10 minute recaps of the Databricks Academy Data Engineering and Advanced Data Engineering courses |
60
+ | ๐ŸŽ“ Exam Prep | Study guides for the Databricks certifications |
61
+ | ๐Ÿงช Demo Data | Seeded generators for six related-table datasets with primary and foreign keys |
62
+
63
+ A lesson module takes about 8 minutes: animated slides, a document view, a 5-question quiz, a lecture notebook with a
64
+ runnable "Try it" section, and an exercises notebook with hidden solutions.
65
+
66
+ ## The API
67
+
68
+ ```python
69
+ import databricksedu
70
+
71
+ databricksedu.start() # the app (with a Save-to-workspace bar)
72
+ databricksedu.modules() # list everything
73
+ databricksedu.present("delta-table-anatomy") # play one presentation
74
+ databricksedu.read("delta-table-anatomy") # the same module as a document
75
+ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspace/Users/<you>/databricksedu/
76
+ databricksedu.save("data-engineering") # a whole track, or save("all")
77
+ ```
78
+
79
+ ## Seeded demo data
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.
83
+
84
+ ```python
85
+ from databricksedu import data
86
+
87
+ ds = data.generate("retail", seed=42) # retail, iot, churn, support, hr, cdc
88
+ ds.preview()
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
94
+ ```
95
+
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.
98
+
99
+ ## Practice exams
100
+
101
+ Practice exams for the Databricks certifications are available at [GoldHandAcademy.com](https://goldhandacademy.com).
102
+
103
+ ## Development
104
+
105
+ ```bash
106
+ python -m venv .venv && .venv/bin/pip install -e ".[dev]"
107
+ .venv/bin/python tools/build.py --check content/<category>/<NNN-slug> # validate one module
108
+ .venv/bin/python tools/build.py # render all content into the package
109
+ .venv/bin/python -m pytest
110
+ .venv/bin/python tools/preview.py /tmp/app.html # look at the app in a browser
111
+ ```
112
+
113
+ Content lives in `content/<category>/<NNN-slug>/module.md` + `quiz.json`. See [CONTENT_GUIDE.md](CONTENT_GUIDE.md)
114
+ for the format, the visualization blocks and the dataset rules. The rendered output under
115
+ `src/databricksedu/_content/` is generated and not committed; the build hook regenerates it for every package build.
116
+
117
+ Releasing: bump `src/databricksedu/_version.py`, then push a tag `v<version>`. The `Publish to PyPI` workflow builds,
118
+ tests and uploads using the `PYPI_API_TOKEN` repository secret.
119
+
120
+ ## Legacy: the dbxhelp loader
121
+
122
+ The earlier one-line loader from [misrori/dbxhelp](https://github.com/misrori/dbxhelp) still works for the original recaps:
123
+
124
+ ```python
125
+ import urllib.request as u; exec(u.urlopen("https://raw.githubusercontent.com/misrori/dbxhelp/main/dbxhelp.py").read().decode()); dbxhelp()
126
+ ```
127
+
128
+ ---
129
+
130
+ Unofficial educational material. Not affiliated with or endorsed by Databricks. Databricks, Delta Lake and Apache
131
+ Spark are trademarks of their respective owners.
@@ -0,0 +1,99 @@
1
+ # databricksedu
2
+
3
+ Bite-sized Databricks lessons that run **inside your notebook**. One function opens an app in the notebook output.
4
+ In it you browse the library, play animated slides, read the notes, take a quiz, and save the lecture and exercise
5
+ notebooks into your workspace.
6
+
7
+ ```python
8
+ %pip install databricksedu
9
+ ```
10
+
11
+ ```python
12
+ import databricksedu
13
+ databricksedu.start()
14
+ ```
15
+
16
+ Works on Databricks serverless and classic compute. No dependencies beyond what Databricks already ships.
17
+
18
+ ## What is inside
19
+
20
+ | Track | Examples |
21
+ |---|---|
22
+ | ๐Ÿ› ๏ธ Data Engineering | Lakehouse architecture, Parquet files, Medallion architecture, Anatomy of a Delta table, the transaction log, deletion vectors, MERGE, Change Data Feed, Spark joins and shuffles, Auto Loader, Structured Streaming, Declarative Pipelines, Lakeflow Jobs, Bundles and CI/CD |
23
+ | ๐Ÿค– Machine Learning | ML lifecycle, MLflow tracking, feature engineering, tuning, models in Unity Catalog, serving, monitoring |
24
+ | โœจ Generative AI | How LLMs work, prompting, embeddings and Vector Search, chunking, RAG, agents, evaluation, AI Functions |
25
+ | ๐Ÿ“Š Analytics & AI/BI | SQL warehouses, AI/BI dashboards, Genie spaces, metric views |
26
+ | ๐Ÿ›ก๏ธ Governance & Security | Unity Catalog privileges, row filters and column masks, Delta Sharing, lineage and system tables |
27
+ | ๐ŸŽ’ Course Recaps | 8-10 minute recaps of the Databricks Academy Data Engineering and Advanced Data Engineering courses |
28
+ | ๐ŸŽ“ Exam Prep | Study guides for the Databricks certifications |
29
+ | ๐Ÿงช Demo Data | Seeded generators for six related-table datasets with primary and foreign keys |
30
+
31
+ A lesson module takes about 8 minutes: animated slides, a document view, a 5-question quiz, a lecture notebook with a
32
+ runnable "Try it" section, and an exercises notebook with hidden solutions.
33
+
34
+ ## The API
35
+
36
+ ```python
37
+ import databricksedu
38
+
39
+ databricksedu.start() # the app (with a Save-to-workspace bar)
40
+ databricksedu.modules() # list everything
41
+ databricksedu.present("delta-table-anatomy") # play one presentation
42
+ databricksedu.read("delta-table-anatomy") # the same module as a document
43
+ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspace/Users/<you>/databricksedu/
44
+ databricksedu.save("data-engineering") # a whole track, or save("all")
45
+ ```
46
+
47
+ ## Seeded demo data
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.
51
+
52
+ ```python
53
+ from databricksedu import data
54
+
55
+ ds = data.generate("retail", seed=42) # retail, iot, churn, support, hr, cdc
56
+ ds.preview()
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
62
+ ```
63
+
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.
66
+
67
+ ## Practice exams
68
+
69
+ Practice exams for the Databricks certifications are available at [GoldHandAcademy.com](https://goldhandacademy.com).
70
+
71
+ ## Development
72
+
73
+ ```bash
74
+ python -m venv .venv && .venv/bin/pip install -e ".[dev]"
75
+ .venv/bin/python tools/build.py --check content/<category>/<NNN-slug> # validate one module
76
+ .venv/bin/python tools/build.py # render all content into the package
77
+ .venv/bin/python -m pytest
78
+ .venv/bin/python tools/preview.py /tmp/app.html # look at the app in a browser
79
+ ```
80
+
81
+ Content lives in `content/<category>/<NNN-slug>/module.md` + `quiz.json`. See [CONTENT_GUIDE.md](CONTENT_GUIDE.md)
82
+ for the format, the visualization blocks and the dataset rules. The rendered output under
83
+ `src/databricksedu/_content/` is generated and not committed; the build hook regenerates it for every package build.
84
+
85
+ Releasing: bump `src/databricksedu/_version.py`, then push a tag `v<version>`. The `Publish to PyPI` workflow builds,
86
+ tests and uploads using the `PYPI_API_TOKEN` repository secret.
87
+
88
+ ## Legacy: the dbxhelp loader
89
+
90
+ The earlier one-line loader from [misrori/dbxhelp](https://github.com/misrori/dbxhelp) still works for the original recaps:
91
+
92
+ ```python
93
+ import urllib.request as u; exec(u.urlopen("https://raw.githubusercontent.com/misrori/dbxhelp/main/dbxhelp.py").read().decode()); dbxhelp()
94
+ ```
95
+
96
+ ---
97
+
98
+ Unofficial educational material. Not affiliated with or endorsed by Databricks. Databricks, Delta Lake and Apache
99
+ Spark are trademarks of their respective owners.