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.
- databricksedu-0.1.0/.gitignore +12 -0
- databricksedu-0.1.0/CONTENT_GUIDE.md +307 -0
- databricksedu-0.1.0/LICENSE +21 -0
- databricksedu-0.1.0/PKG-INFO +131 -0
- databricksedu-0.1.0/README.md +99 -0
- databricksedu-0.1.0/content/analytics/010-sql-warehouses/module.md +223 -0
- databricksedu-0.1.0/content/analytics/010-sql-warehouses/quiz.json +22 -0
- databricksedu-0.1.0/content/analytics/020-ai-bi-dashboards/module.md +238 -0
- databricksedu-0.1.0/content/analytics/020-ai-bi-dashboards/quiz.json +22 -0
- databricksedu-0.1.0/content/analytics/030-genie-spaces/module.md +217 -0
- databricksedu-0.1.0/content/analytics/030-genie-spaces/quiz.json +22 -0
- databricksedu-0.1.0/content/analytics/040-metric-views/module.md +718 -0
- databricksedu-0.1.0/content/analytics/040-metric-views/quiz.json +7 -0
- databricksedu-0.1.0/content/categories.json +18 -0
- databricksedu-0.1.0/content/data-engineering/010-lakehouse-architecture/module.md +197 -0
- databricksedu-0.1.0/content/data-engineering/010-lakehouse-architecture/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/020-parquet-files/module.md +273 -0
- databricksedu-0.1.0/content/data-engineering/020-parquet-files/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/030-medallion-architecture/module.md +233 -0
- databricksedu-0.1.0/content/data-engineering/030-medallion-architecture/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/040-unity-catalog-basics/module.md +245 -0
- databricksedu-0.1.0/content/data-engineering/040-unity-catalog-basics/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/050-delta-table-anatomy/module.md +267 -0
- databricksedu-0.1.0/content/data-engineering/050-delta-table-anatomy/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/060-delta-transaction-log/module.md +286 -0
- databricksedu-0.1.0/content/data-engineering/060-delta-transaction-log/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/070-delta-acid-concurrency/module.md +225 -0
- databricksedu-0.1.0/content/data-engineering/070-delta-acid-concurrency/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/080-delta-time-travel-vacuum/module.md +224 -0
- databricksedu-0.1.0/content/data-engineering/080-delta-time-travel-vacuum/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/090-deletion-vectors/module.md +242 -0
- databricksedu-0.1.0/content/data-engineering/090-deletion-vectors/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/100-delta-dml-merge/module.md +265 -0
- databricksedu-0.1.0/content/data-engineering/100-delta-dml-merge/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/110-schema-enforcement-evolution/module.md +256 -0
- databricksedu-0.1.0/content/data-engineering/110-schema-enforcement-evolution/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/120-change-data-feed/module.md +267 -0
- databricksedu-0.1.0/content/data-engineering/120-change-data-feed/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/130-delta-optimization/module.md +237 -0
- databricksedu-0.1.0/content/data-engineering/130-delta-optimization/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/140-spark-architecture/module.md +270 -0
- databricksedu-0.1.0/content/data-engineering/140-spark-architecture/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/150-spark-joins-shuffles/module.md +255 -0
- databricksedu-0.1.0/content/data-engineering/150-spark-joins-shuffles/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/160-auto-loader-copy-into/module.md +283 -0
- databricksedu-0.1.0/content/data-engineering/160-auto-loader-copy-into/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/170-structured-streaming-basics/module.md +249 -0
- databricksedu-0.1.0/content/data-engineering/170-structured-streaming-basics/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/180-watermarks-stateful-streaming/module.md +266 -0
- databricksedu-0.1.0/content/data-engineering/180-watermarks-stateful-streaming/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/190-declarative-pipelines/module.md +259 -0
- databricksedu-0.1.0/content/data-engineering/190-declarative-pipelines/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/200-data-quality-expectations/module.md +273 -0
- databricksedu-0.1.0/content/data-engineering/200-data-quality-expectations/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/210-cdc-scd/module.md +288 -0
- databricksedu-0.1.0/content/data-engineering/210-cdc-scd/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/220-lakeflow-jobs/module.md +284 -0
- databricksedu-0.1.0/content/data-engineering/220-lakeflow-jobs/quiz.json +22 -0
- databricksedu-0.1.0/content/data-engineering/230-asset-bundles-cicd/module.md +300 -0
- databricksedu-0.1.0/content/data-engineering/230-asset-bundles-cicd/quiz.json +22 -0
- databricksedu-0.1.0/content/demo-data/010-retail-data/module.md +123 -0
- databricksedu-0.1.0/content/demo-data/020-iot-data/module.md +98 -0
- databricksedu-0.1.0/content/demo-data/030-churn-data/module.md +86 -0
- databricksedu-0.1.0/content/demo-data/040-support-data/module.md +82 -0
- databricksedu-0.1.0/content/demo-data/050-hr-data/module.md +71 -0
- databricksedu-0.1.0/content/demo-data/060-cdc-data/module.md +72 -0
- databricksedu-0.1.0/content/exam-prep/010-exam-data-engineer-associate/module.md +220 -0
- databricksedu-0.1.0/content/exam-prep/010-exam-data-engineer-associate/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/020-exam-data-engineer-professional/module.md +226 -0
- databricksedu-0.1.0/content/exam-prep/020-exam-data-engineer-professional/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/030-exam-data-analyst-associate/module.md +206 -0
- databricksedu-0.1.0/content/exam-prep/030-exam-data-analyst-associate/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/040-exam-ml-associate/module.md +218 -0
- databricksedu-0.1.0/content/exam-prep/040-exam-ml-associate/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/050-exam-ml-professional/module.md +212 -0
- databricksedu-0.1.0/content/exam-prep/050-exam-ml-professional/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/060-exam-genai-engineer-associate/module.md +205 -0
- databricksedu-0.1.0/content/exam-prep/060-exam-genai-engineer-associate/quiz.json +22 -0
- databricksedu-0.1.0/content/exam-prep/070-exam-spark-developer-associate/module.md +206 -0
- databricksedu-0.1.0/content/exam-prep/070-exam-spark-developer-associate/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/010-llm-basics/module.md +248 -0
- databricksedu-0.1.0/content/generative-ai/010-llm-basics/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/020-prompt-engineering/module.md +257 -0
- databricksedu-0.1.0/content/generative-ai/020-prompt-engineering/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/030-embeddings-vector-search/module.md +254 -0
- databricksedu-0.1.0/content/generative-ai/030-embeddings-vector-search/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/040-chunking-parsing/module.md +278 -0
- databricksedu-0.1.0/content/generative-ai/040-chunking-parsing/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/050-rag-architecture/module.md +283 -0
- databricksedu-0.1.0/content/generative-ai/050-rag-architecture/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/060-agents-tools/module.md +301 -0
- databricksedu-0.1.0/content/generative-ai/060-agents-tools/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/070-genai-evaluation/module.md +259 -0
- databricksedu-0.1.0/content/generative-ai/070-genai-evaluation/quiz.json +22 -0
- databricksedu-0.1.0/content/generative-ai/080-ai-functions-gateway/module.md +249 -0
- databricksedu-0.1.0/content/generative-ai/080-ai-functions-gateway/quiz.json +22 -0
- databricksedu-0.1.0/content/governance/010-uc-privileges/module.md +232 -0
- databricksedu-0.1.0/content/governance/010-uc-privileges/quiz.json +22 -0
- databricksedu-0.1.0/content/governance/020-row-filters-column-masks/module.md +267 -0
- databricksedu-0.1.0/content/governance/020-row-filters-column-masks/quiz.json +22 -0
- databricksedu-0.1.0/content/governance/030-delta-sharing/module.md +235 -0
- databricksedu-0.1.0/content/governance/030-delta-sharing/quiz.json +22 -0
- databricksedu-0.1.0/content/governance/040-lineage-system-tables/module.md +266 -0
- databricksedu-0.1.0/content/governance/040-lineage-system-tables/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/010-ml-lifecycle/module.md +246 -0
- databricksedu-0.1.0/content/machine-learning/010-ml-lifecycle/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/020-mlflow-tracking/module.md +272 -0
- databricksedu-0.1.0/content/machine-learning/020-mlflow-tracking/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/030-feature-engineering/module.md +256 -0
- databricksedu-0.1.0/content/machine-learning/030-feature-engineering/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/040-hyperparameter-tuning/module.md +250 -0
- databricksedu-0.1.0/content/machine-learning/040-hyperparameter-tuning/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/050-models-in-unity-catalog/module.md +281 -0
- databricksedu-0.1.0/content/machine-learning/050-models-in-unity-catalog/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/060-model-serving/module.md +266 -0
- databricksedu-0.1.0/content/machine-learning/060-model-serving/quiz.json +22 -0
- databricksedu-0.1.0/content/machine-learning/070-model-monitoring/module.md +243 -0
- databricksedu-0.1.0/content/machine-learning/070-model-monitoring/quiz.json +22 -0
- databricksedu-0.1.0/content/recaps/010-lakeflow-connect-recap/module.md +285 -0
- databricksedu-0.1.0/content/recaps/010-lakeflow-connect-recap/quiz.json +7 -0
- databricksedu-0.1.0/content/recaps/020-lakeflow-jobs-recap/module.md +190 -0
- databricksedu-0.1.0/content/recaps/020-lakeflow-jobs-recap/quiz.json +32 -0
- databricksedu-0.1.0/content/recaps/030-declarative-pipelines-recap/module.md +238 -0
- databricksedu-0.1.0/content/recaps/030-declarative-pipelines-recap/quiz.json +7 -0
- databricksedu-0.1.0/content/recaps/040-devops-essentials-recap/module.md +232 -0
- databricksedu-0.1.0/content/recaps/040-devops-essentials-recap/quiz.json +7 -0
- databricksedu-0.1.0/content/recaps/050-streaming-pipelines-recap/module.md +259 -0
- databricksedu-0.1.0/content/recaps/050-streaming-pipelines-recap/quiz.json +7 -0
- databricksedu-0.1.0/content/recaps/060-data-privacy-recap/module.md +262 -0
- databricksedu-0.1.0/content/recaps/060-data-privacy-recap/quiz.json +7 -0
- databricksedu-0.1.0/content/recaps/070-performance-optimization-recap/module.md +221 -0
- databricksedu-0.1.0/content/recaps/070-performance-optimization-recap/quiz.json +32 -0
- databricksedu-0.1.0/content/recaps/080-asset-bundles-recap/module.md +208 -0
- databricksedu-0.1.0/content/recaps/080-asset-bundles-recap/quiz.json +7 -0
- databricksedu-0.1.0/hatch_build.py +21 -0
- databricksedu-0.1.0/pyproject.toml +57 -0
- databricksedu-0.1.0/src/databricksedu/__init__.py +24 -0
- databricksedu-0.1.0/src/databricksedu/_content/catalog.json +1923 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/agents-tools.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/ai-bi-dashboards.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/ai-functions-gateway.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/asset-bundles-cicd.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/asset-bundles-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/auto-loader-copy-into.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/cdc-scd.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/change-data-feed.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/chunking-parsing.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/churn-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/data-privacy-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/data-quality-expectations.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/declarative-pipelines-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/declarative-pipelines.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/deletion-vectors.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-acid-concurrency.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-dml-merge.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-optimization.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-sharing.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-table-anatomy.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-time-travel-vacuum.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/delta-transaction-log.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/devops-essentials-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/embeddings-vector-search.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-analyst-associate.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-engineer-associate.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-data-engineer-professional.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-genai-engineer-associate.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-ml-associate.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-ml-professional.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/exam-spark-developer-associate.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/feature-engineering.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/genai-evaluation.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/genie-spaces.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/hr-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/hyperparameter-tuning.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/iot-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-connect-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-jobs-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/lakeflow-jobs.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/lakehouse-architecture.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/lineage-system-tables.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/llm-basics.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/medallion-architecture.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/metric-views.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/ml-lifecycle.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/mlflow-tracking.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/model-monitoring.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/model-serving.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/models-in-unity-catalog.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/parquet-files.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/performance-optimization-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/prompt-engineering.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/rag-architecture.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/retail-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/row-filters-column-masks.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/schema-enforcement-evolution.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/spark-architecture.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/spark-joins-shuffles.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/sql-warehouses.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/streaming-pipelines-recap.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/structured-streaming-basics.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/support-data.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/uc-privileges.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/unity-catalog-basics.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/nb/watermarks-stateful-streaming.json.gz +0 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/agents-tools.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/ai-bi-dashboards.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/ai-functions-gateway.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-cicd.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/auto-loader-copy-into.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/cdc-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/cdc-scd.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/change-data-feed.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/chunking-parsing.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/churn-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/data-privacy-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/data-quality-expectations.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/deletion-vectors.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-acid-concurrency.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-dml-merge.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-optimization.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-sharing.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-table-anatomy.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-transaction-log.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/devops-essentials-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/embeddings-vector-search.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-analyst-associate.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-engineer-associate.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-data-engineer-professional.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-genai-engineer-associate.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-ml-associate.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-ml-professional.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/exam-spark-developer-associate.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/feature-engineering.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/genai-evaluation.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/genie-spaces.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/hr-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/hyperparameter-tuning.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/iot-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/lakehouse-architecture.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/lineage-system-tables.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/llm-basics.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/medallion-architecture.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/metric-views.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/ml-lifecycle.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/mlflow-tracking.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/model-monitoring.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/model-serving.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/models-in-unity-catalog.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/parquet-files.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/performance-optimization-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/prompt-engineering.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/rag-architecture.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/retail-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/row-filters-column-masks.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/spark-architecture.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/spark-joins-shuffles.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/sql-warehouses.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/structured-streaming-basics.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/support-data.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/uc-privileges.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/unity-catalog-basics.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +1 -0
- databricksedu-0.1.0/src/databricksedu/_version.py +1 -0
- databricksedu-0.1.0/src/databricksedu/app.py +192 -0
- databricksedu-0.1.0/src/databricksedu/assets/app.css +1 -0
- databricksedu-0.1.0/src/databricksedu/assets/app.js +353 -0
- databricksedu-0.1.0/src/databricksedu/assets/dbx.css +1 -0
- databricksedu-0.1.0/src/databricksedu/assets/quiz.js +47 -0
- databricksedu-0.1.0/src/databricksedu/assets/viz.css +1 -0
- databricksedu-0.1.0/src/databricksedu/assets/viz.js +84 -0
- databricksedu-0.1.0/src/databricksedu/catalog.py +95 -0
- databricksedu-0.1.0/src/databricksedu/data/__init__.py +58 -0
- databricksedu-0.1.0/src/databricksedu/data/_core.py +339 -0
- databricksedu-0.1.0/src/databricksedu/data/cdc.py +75 -0
- databricksedu-0.1.0/src/databricksedu/data/churn.py +74 -0
- databricksedu-0.1.0/src/databricksedu/data/hr.py +58 -0
- databricksedu-0.1.0/src/databricksedu/data/iot.py +86 -0
- databricksedu-0.1.0/src/databricksedu/data/retail.py +77 -0
- databricksedu-0.1.0/src/databricksedu/data/support.py +128 -0
- databricksedu-0.1.0/src/databricksedu/workspace.py +157 -0
- databricksedu-0.1.0/tests/test_smoke.py +62 -0
- databricksedu-0.1.0/tools/assets/app.css +149 -0
- databricksedu-0.1.0/tools/assets/app.js +362 -0
- databricksedu-0.1.0/tools/assets/dbx.css +215 -0
- databricksedu-0.1.0/tools/assets/quiz.js +47 -0
- databricksedu-0.1.0/tools/assets/viz.js +84 -0
- databricksedu-0.1.0/tools/build.py +347 -0
- databricksedu-0.1.0/tools/render.py +544 -0
|
@@ -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.
|