databricksedu 0.1.0__tar.gz → 0.2.1__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 → databricksedu-0.2.1}/PKG-INFO +16 -12
- {databricksedu-0.1.0 → databricksedu-0.2.1}/README.md +15 -11
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/160-auto-loader-copy-into/module.md +13 -20
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/190-declarative-pipelines/module.md +3 -4
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/010-retail-data/module.md +14 -9
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/020-iot-data/module.md +6 -7
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/010-lakeflow-connect-recap/module.md +4 -5
- databricksedu-0.2.1/src/databricksedu/_content/nb/agents-tools.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/ai-bi-dashboards.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/ai-functions-gateway.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/asset-bundles-cicd.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/auto-loader-copy-into.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/cdc-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/cdc-scd.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/change-data-feed.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/chunking-parsing.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/churn-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/data-privacy-recap.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/data-quality-expectations.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/declarative-pipelines.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/deletion-vectors.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-acid-concurrency.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-dml-merge.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-optimization.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-sharing.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-table-anatomy.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-time-travel-vacuum.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/delta-transaction-log.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/embeddings-vector-search.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/feature-engineering.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/genai-evaluation.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/genie-spaces.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/hr-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/hyperparameter-tuning.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/iot-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/lakeflow-connect-recap.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/lakeflow-jobs.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/lakehouse-architecture.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/lineage-system-tables.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/llm-basics.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/medallion-architecture.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/metric-views.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/ml-lifecycle.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/mlflow-tracking.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/model-monitoring.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/model-serving.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/models-in-unity-catalog.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/parquet-files.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/performance-optimization-recap.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/prompt-engineering.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/rag-architecture.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/retail-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/row-filters-column-masks.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/schema-enforcement-evolution.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/spark-architecture.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/spark-joins-shuffles.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/sql-warehouses.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/streaming-pipelines-recap.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/structured-streaming-basics.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/support-data.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/uc-privileges.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/unity-catalog-basics.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/nb/watermarks-stateful-streaming.json.gz +0 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/agents-tools.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/ai-bi-dashboards.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/ai-functions-gateway.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/asset-bundles-cicd.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/auto-loader-copy-into.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/cdc-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/cdc-scd.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/change-data-feed.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/chunking-parsing.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/churn-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/data-privacy-recap.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/data-quality-expectations.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/declarative-pipelines.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/deletion-vectors.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-acid-concurrency.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-dml-merge.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-optimization.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-sharing.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-table-anatomy.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/delta-transaction-log.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/embeddings-vector-search.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/feature-engineering.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/genai-evaluation.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/genie-spaces.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/hr-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/hyperparameter-tuning.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/iot-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/lakeflow-jobs.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/lakehouse-architecture.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/lineage-system-tables.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/llm-basics.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/medallion-architecture.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/metric-views.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/ml-lifecycle.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/mlflow-tracking.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/model-monitoring.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/model-serving.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/models-in-unity-catalog.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/parquet-files.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/performance-optimization-recap.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/prompt-engineering.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/rag-architecture.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/retail-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/row-filters-column-masks.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/spark-architecture.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/spark-joins-shuffles.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/sql-warehouses.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/structured-streaming-basics.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/support-data.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/uc-privileges.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/unity-catalog-basics.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +1 -0
- databricksedu-0.2.1/src/databricksedu/_version.py +1 -0
- databricksedu-0.2.1/src/databricksedu/assets/app.css +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/assets/app.js +49 -9
- databricksedu-0.2.1/src/databricksedu/data/__init__.py +104 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/_core.py +3 -2
- databricksedu-0.2.1/src/databricksedu/data/_load.py +254 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/cdc.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/churn.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/hr.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/iot.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/retail.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/data/support.py +1 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/workspace.py +20 -5
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tests/test_smoke.py +65 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/assets/app.css +6 -1
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/assets/app.js +49 -9
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/build.py +15 -24
- 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/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.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/embeddings-vector-search.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.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 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/ai-bi-dashboards.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/ai-functions-gateway.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/asset-bundles-cicd.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/auto-loader-copy-into.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/cdc-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/cdc-scd.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/change-data-feed.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/chunking-parsing.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/churn-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/data-privacy-recap.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/data-quality-expectations.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/declarative-pipelines.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/deletion-vectors.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-acid-concurrency.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-dml-merge.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-optimization.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-sharing.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-table-anatomy.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-time-travel-vacuum.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/delta-transaction-log.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/embeddings-vector-search.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/feature-engineering.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/genai-evaluation.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/genie-spaces.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/hr-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/hyperparameter-tuning.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/iot-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-connect-recap.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/lakeflow-jobs.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/lakehouse-architecture.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/lineage-system-tables.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/llm-basics.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/medallion-architecture.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/metric-views.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/ml-lifecycle.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/mlflow-tracking.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/model-monitoring.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/model-serving.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/models-in-unity-catalog.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/parquet-files.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/performance-optimization-recap.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/prompt-engineering.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/rag-architecture.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/retail-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/row-filters-column-masks.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/schema-enforcement-evolution.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/spark-architecture.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/spark-joins-shuffles.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/sql-warehouses.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/streaming-pipelines-recap.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/structured-streaming-basics.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/support-data.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/uc-privileges.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/unity-catalog-basics.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_content/web/watermarks-stateful-streaming.b64 +0 -1
- databricksedu-0.1.0/src/databricksedu/_version.py +0 -1
- databricksedu-0.1.0/src/databricksedu/assets/app.css +0 -1
- databricksedu-0.1.0/src/databricksedu/data/__init__.py +0 -58
- {databricksedu-0.1.0 → databricksedu-0.2.1}/.gitignore +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/CONTENT_GUIDE.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/LICENSE +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/010-sql-warehouses/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/010-sql-warehouses/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/020-ai-bi-dashboards/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/020-ai-bi-dashboards/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/030-genie-spaces/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/030-genie-spaces/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/040-metric-views/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/analytics/040-metric-views/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/categories.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/010-lakehouse-architecture/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/010-lakehouse-architecture/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/020-parquet-files/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/020-parquet-files/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/030-medallion-architecture/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/030-medallion-architecture/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/040-unity-catalog-basics/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/040-unity-catalog-basics/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/050-delta-table-anatomy/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/050-delta-table-anatomy/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/060-delta-transaction-log/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/060-delta-transaction-log/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/070-delta-acid-concurrency/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/070-delta-acid-concurrency/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/080-delta-time-travel-vacuum/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/080-delta-time-travel-vacuum/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/090-deletion-vectors/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/090-deletion-vectors/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/100-delta-dml-merge/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/100-delta-dml-merge/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/110-schema-enforcement-evolution/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/110-schema-enforcement-evolution/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/120-change-data-feed/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/120-change-data-feed/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/130-delta-optimization/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/130-delta-optimization/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/140-spark-architecture/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/140-spark-architecture/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/150-spark-joins-shuffles/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/150-spark-joins-shuffles/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/160-auto-loader-copy-into/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/170-structured-streaming-basics/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/170-structured-streaming-basics/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/180-watermarks-stateful-streaming/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/180-watermarks-stateful-streaming/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/190-declarative-pipelines/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/200-data-quality-expectations/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/200-data-quality-expectations/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/210-cdc-scd/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/210-cdc-scd/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/220-lakeflow-jobs/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/220-lakeflow-jobs/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/230-asset-bundles-cicd/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/data-engineering/230-asset-bundles-cicd/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/030-churn-data/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/040-support-data/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/050-hr-data/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/demo-data/060-cdc-data/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/010-exam-data-engineer-associate/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/010-exam-data-engineer-associate/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/020-exam-data-engineer-professional/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/020-exam-data-engineer-professional/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/030-exam-data-analyst-associate/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/030-exam-data-analyst-associate/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/040-exam-ml-associate/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/040-exam-ml-associate/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/050-exam-ml-professional/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/050-exam-ml-professional/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/060-exam-genai-engineer-associate/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/060-exam-genai-engineer-associate/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/070-exam-spark-developer-associate/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/exam-prep/070-exam-spark-developer-associate/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/010-llm-basics/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/010-llm-basics/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/020-prompt-engineering/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/020-prompt-engineering/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/030-embeddings-vector-search/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/030-embeddings-vector-search/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/040-chunking-parsing/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/040-chunking-parsing/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/050-rag-architecture/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/050-rag-architecture/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/060-agents-tools/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/060-agents-tools/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/070-genai-evaluation/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/070-genai-evaluation/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/080-ai-functions-gateway/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/generative-ai/080-ai-functions-gateway/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/010-uc-privileges/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/010-uc-privileges/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/020-row-filters-column-masks/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/020-row-filters-column-masks/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/030-delta-sharing/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/030-delta-sharing/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/040-lineage-system-tables/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/governance/040-lineage-system-tables/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/010-ml-lifecycle/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/010-ml-lifecycle/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/020-mlflow-tracking/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/020-mlflow-tracking/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/030-feature-engineering/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/030-feature-engineering/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/040-hyperparameter-tuning/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/040-hyperparameter-tuning/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/050-models-in-unity-catalog/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/050-models-in-unity-catalog/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/060-model-serving/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/060-model-serving/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/070-model-monitoring/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/machine-learning/070-model-monitoring/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/010-lakeflow-connect-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/020-lakeflow-jobs-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/020-lakeflow-jobs-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/030-declarative-pipelines-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/030-declarative-pipelines-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/040-devops-essentials-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/040-devops-essentials-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/050-streaming-pipelines-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/050-streaming-pipelines-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/060-data-privacy-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/060-data-privacy-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/070-performance-optimization-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/070-performance-optimization-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/080-asset-bundles-recap/module.md +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/080-asset-bundles-recap/quiz.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/hatch_build.py +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/pyproject.toml +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/__init__.py +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/catalog.json +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/asset-bundles-recap.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/declarative-pipelines-recap.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/devops-essentials-recap.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-data-analyst-associate.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-data-engineer-associate.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-data-engineer-professional.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-genai-engineer-associate.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-ml-associate.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-ml-professional.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/exam-spark-developer-associate.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/nb/lakeflow-jobs-recap.json.gz +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/asset-bundles-recap.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/declarative-pipelines-recap.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/devops-essentials-recap.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-data-analyst-associate.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-data-engineer-associate.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-data-engineer-professional.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-genai-engineer-associate.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-ml-associate.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-ml-professional.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/exam-spark-developer-associate.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/_content/web/lakeflow-jobs-recap.b64 +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/app.py +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/assets/dbx.css +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/assets/quiz.js +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/assets/viz.css +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/assets/viz.js +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/src/databricksedu/catalog.py +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/assets/dbx.css +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/assets/quiz.js +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/assets/viz.js +0 -0
- {databricksedu-0.1.0 → databricksedu-0.2.1}/tools/render.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: databricksedu
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Bite-sized Databricks lessons that run inside your notebook: animated slides, notes, exercises and seeded demo data.
|
|
5
5
|
Project-URL: Homepage, https://github.com/misrori/databricksedu
|
|
6
6
|
Project-URL: Source, https://github.com/misrori/databricksedu
|
|
@@ -76,25 +76,29 @@ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspac
|
|
|
76
76
|
databricksedu.save("data-engineering") # a whole track, or save("all")
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
##
|
|
79
|
+
## Demo data in one line
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
Six datasets (retail, iot, churn, support, hr, cdc), each with several tables joined by real primary and
|
|
82
|
+
foreign keys. Give a catalog and a schema; one call creates everything and prints a report (what it created,
|
|
83
|
+
rows, size, columns). The catalog and schema must exist: nothing here creates them.
|
|
83
84
|
|
|
84
85
|
```python
|
|
85
86
|
from databricksedu import data
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
ds.preview()
|
|
88
|
+
CATALOG, SCHEMA = "main", "my_schema"
|
|
89
89
|
|
|
90
|
-
CATALOG
|
|
91
|
-
SCHEMA =
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (existing ones replaced)
|
|
91
|
+
data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
|
|
92
|
+
data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
|
|
93
|
+
data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
|
|
94
|
+
|
|
95
|
+
data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files
|
|
96
|
+
data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # run again: new rows, new files
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
`data.
|
|
97
|
-
|
|
99
|
+
`data.create` uses a fixed seed, so a whole class works on identical tables. `data.files` has no fixed seed:
|
|
100
|
+
every call adds new files with new rows and new ids, which is what Auto Loader and `COPY INTO` demos need.
|
|
101
|
+
`data.datasets()` describes them all; `data.generate("retail").to_pandas("fact_orders")` works without Spark.
|
|
98
102
|
|
|
99
103
|
## Practice exams
|
|
100
104
|
|
|
@@ -44,25 +44,29 @@ databricksedu.save("delta-table-anatomy") # copy its notebooks to /Workspac
|
|
|
44
44
|
databricksedu.save("data-engineering") # a whole track, or save("all")
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
##
|
|
47
|
+
## Demo data in one line
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
Six datasets (retail, iot, churn, support, hr, cdc), each with several tables joined by real primary and
|
|
50
|
+
foreign keys. Give a catalog and a schema; one call creates everything and prints a report (what it created,
|
|
51
|
+
rows, size, columns). The catalog and schema must exist: nothing here creates them.
|
|
51
52
|
|
|
52
53
|
```python
|
|
53
54
|
from databricksedu import data
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
ds.preview()
|
|
56
|
+
CATALOG, SCHEMA = "main", "my_schema"
|
|
57
57
|
|
|
58
|
-
CATALOG
|
|
59
|
-
SCHEMA =
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (existing ones replaced)
|
|
59
|
+
data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
|
|
60
|
+
data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
|
|
61
|
+
data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
|
|
62
|
+
|
|
63
|
+
data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files
|
|
64
|
+
data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # run again: new rows, new files
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
`data.
|
|
65
|
-
|
|
67
|
+
`data.create` uses a fixed seed, so a whole class works on identical tables. `data.files` has no fixed seed:
|
|
68
|
+
every call adds new files with new rows and new ids, which is what Auto Loader and `COPY INTO` demos need.
|
|
69
|
+
`data.datasets()` describes them all; `data.generate("retail").to_pandas("fact_orders")` works without Spark.
|
|
66
70
|
|
|
67
71
|
## Practice exams
|
|
68
72
|
|
|
@@ -137,20 +137,19 @@ Every file source also offers the hidden `_metadata` column: `_metadata.file_pat
|
|
|
137
137
|
```dataset retail
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
Land the first
|
|
140
|
+
Land the first order file in the `landing` volume. The cell starts clean every time you run it.
|
|
141
141
|
|
|
142
142
|
```python run
|
|
143
143
|
# Land the first file (clean start)
|
|
144
144
|
import shutil
|
|
145
145
|
from pyspark.sql import functions as F
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
state =
|
|
149
|
-
for p in (vol + "/autoloader_demo", state):
|
|
150
|
-
shutil.rmtree(p, ignore_errors=True)
|
|
147
|
+
state = data.volume(CATALOG, SCHEMA) + "/autoloader_state" # schema and checkpoint live here
|
|
148
|
+
shutil.rmtree(state, ignore_errors=True)
|
|
151
149
|
spark.sql("DROP TABLE IF EXISTS al_orders_bronze")
|
|
152
150
|
|
|
153
|
-
|
|
151
|
+
# one new file of 20,000 orders; fresh=True empties the folder first
|
|
152
|
+
landing = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="autoloader_demo", n_files=1, fresh=True)
|
|
154
153
|
```
|
|
155
154
|
|
|
156
155
|
```python run
|
|
@@ -175,8 +174,8 @@ ingest()
|
|
|
175
174
|
|
|
176
175
|
```python run
|
|
177
176
|
# A second file arrives: run the same stream again
|
|
178
|
-
|
|
179
|
-
ingest() #
|
|
177
|
+
data.files("retail", CATALOG, SCHEMA, volume="landing", folder="autoloader_demo", n_files=1)
|
|
178
|
+
ingest() # part_0001 is not read again: still 20,000 rows from it
|
|
180
179
|
```
|
|
181
180
|
|
|
182
181
|
```python run
|
|
@@ -188,7 +187,7 @@ copy = f"""
|
|
|
188
187
|
FILEFORMAT = CSV
|
|
189
188
|
FORMAT_OPTIONS ('header' = 'true', 'inferSchema' = 'true')
|
|
190
189
|
COPY_OPTIONS ('mergeSchema' = 'true')"""
|
|
191
|
-
spark.sql(copy).show() # loads
|
|
190
|
+
spark.sql(copy).show() # loads part_0001 and part_0002: 40,000 rows
|
|
192
191
|
spark.sql(copy).show() # 0 rows: both files are already recorded
|
|
193
192
|
```
|
|
194
193
|
|
|
@@ -196,21 +195,18 @@ spark.sql(copy).show() # 0 rows: both files are already recorded
|
|
|
196
195
|
|
|
197
196
|
## Exercise 1: rescue the bad rows
|
|
198
197
|
|
|
199
|
-
`
|
|
198
|
+
`data.files("retail", ...)` also writes `fact_orders_bad/fact_orders_bad.csv`, four rows with broken values. Load it with Auto Loader and schema hints. Predict which rows get a `_rescued_data` value.
|
|
200
199
|
|
|
201
200
|
```python todo
|
|
202
|
-
# TODO 1: base = data.
|
|
201
|
+
# TODO 1: base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="al_rescue", fresh=True)
|
|
203
202
|
# TODO 2: readStream cloudFiles (csv, header, inferColumnTypes) from base + "/fact_orders_bad"
|
|
204
203
|
# with cloudFiles.schemaHints = "order_date DATE, quantity INT, discount DOUBLE"
|
|
205
204
|
# TODO 3: write with availableNow to al_orders_rescued, then show the rows with _rescued_data
|
|
206
205
|
```
|
|
207
206
|
|
|
208
207
|
```python solution
|
|
209
|
-
import shutil
|
|
210
|
-
base = data.volume(CATALOG, SCHEMA) + "/al_rescue"
|
|
211
|
-
shutil.rmtree(base, ignore_errors=True)
|
|
212
208
|
spark.sql("DROP TABLE IF EXISTS al_orders_rescued")
|
|
213
|
-
|
|
209
|
+
base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="al_rescue", fresh=True)
|
|
214
210
|
|
|
215
211
|
(spark.readStream.format("cloudFiles")
|
|
216
212
|
.option("cloudFiles.format", "csv")
|
|
@@ -234,16 +230,13 @@ spark.sql("SELECT order_id, order_date, quantity, discount, _rescued_data FROM a
|
|
|
234
230
|
Land two files, run `COPY INTO` twice, then once more with `'force' = 'true'`. Predict the row count after each run.
|
|
235
231
|
|
|
236
232
|
```python todo
|
|
237
|
-
# TODO 1: base = data.
|
|
233
|
+
# TODO 1: base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="ci_force", n_files=2, fresh=True)
|
|
238
234
|
# TODO 2: create ci_force_orders, COPY INTO it from base + "/fact_orders" twice, count rows
|
|
239
235
|
# TODO 3: COPY INTO again with COPY_OPTIONS ('force' = 'true', 'mergeSchema' = 'true'), count rows
|
|
240
236
|
```
|
|
241
237
|
|
|
242
238
|
```python solution
|
|
243
|
-
|
|
244
|
-
base = data.volume(CATALOG, SCHEMA) + "/ci_force"
|
|
245
|
-
shutil.rmtree(base, ignore_errors=True)
|
|
246
|
-
ds.land_files(base, parts=3, upto=2)
|
|
239
|
+
base = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="ci_force", n_files=2, fresh=True)
|
|
247
240
|
spark.sql("DROP TABLE IF EXISTS ci_force_orders")
|
|
248
241
|
spark.sql("CREATE TABLE IF NOT EXISTS ci_force_orders")
|
|
249
242
|
|
|
@@ -161,9 +161,8 @@ A **full refresh** empties the streaming tables and re-reads every source from t
|
|
|
161
161
|
A pipeline cannot be created from a notebook cell, so the pipeline code in this module is display-only. You can prepare its source data here.
|
|
162
162
|
|
|
163
163
|
```python run
|
|
164
|
-
# Land the first
|
|
165
|
-
landing = data.
|
|
166
|
-
ds.land_files(landing, table="fact_orders", parts=3, upto=1, fmt="csv")
|
|
164
|
+
# Land the first raw order file (20,000 orders) in a volume; fresh=True starts clean
|
|
165
|
+
landing = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="pl_landing", n_files=1, fresh=True)
|
|
167
166
|
|
|
168
167
|
orders_path = landing + "/fact_orders"
|
|
169
168
|
print("Use this path in read_files:", orders_path)
|
|
@@ -178,7 +177,7 @@ display(spark.sql(f"""
|
|
|
178
177
|
"""))
|
|
179
178
|
```
|
|
180
179
|
|
|
181
|
-
> **Run it yourself** (needs permission to create pipelines and serverless): 1. Open **Jobs & Pipelines** and create an ETL pipeline. 2. Set its default catalog and schema to your `CATALOG` and `SCHEMA`. 3. Paste the SQL file from this module into the source file and put in the path printed above. 4. Click **Start** and watch the graph. 5. Run `
|
|
180
|
+
> **Run it yourself** (needs permission to create pipelines and serverless): 1. Open **Jobs & Pipelines** and create an ETL pipeline. 2. Set its default catalog and schema to your `CATALOG` and `SCHEMA`. 3. Paste the SQL file from this module into the source file and put in the path printed above. 4. Click **Start** and watch the graph. 5. Run `data.files("retail", CATALOG, SCHEMA, volume="landing", folder="pl_landing")` here to land one more file, start the pipeline again, and check in the update details that bronze read only 20,000 new rows.
|
|
182
181
|
|
|
183
182
|
## Exercise 1: predict the gold table
|
|
184
183
|
|
|
@@ -93,22 +93,26 @@ The data is shaped so that careless queries give wrong answers. That makes it go
|
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
- **Skew:** product ids 1 to 8 are Books and are ordered far more often (product 1 alone has about 13,900 orders). Electronics (ids 33 to 40) are rare but expensive. Good for join skew and "count vs revenue" discussions.
|
|
96
|
-
- **Bad files:** `
|
|
96
|
+
- **Bad files:** `data.files("retail", ...)` also writes `fact_orders_bad/fact_orders_bad.csv` with four malformed rows (`five` as a quantity, `not-a-date`) for rescued-data and expectations demos.
|
|
97
97
|
|
|
98
98
|
## 🐍 Use it from Python
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
One call puts the data where you need it and prints a report: what it created, rows, size and columns.
|
|
101
101
|
|
|
102
102
|
```python
|
|
103
103
|
from databricksedu import data
|
|
104
104
|
|
|
105
|
-
ds = data.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
ds = data.create("retail", CATALOG, SCHEMA) # Delta tables with keys (replaces existing)
|
|
106
|
+
data.create("retail", CATALOG, SCHEMA, mode="view") # views over Parquet files in a volume
|
|
107
|
+
data.create("retail", CATALOG, SCHEMA, mode="temp_view") # temporary views, this session only
|
|
108
|
+
data.create("retail", CATALOG, SCHEMA, drop_existing=False) # keep tables that already exist
|
|
109
|
+
data.create("retail", CATALOG, SCHEMA, scale=0.1) # 6,000 orders instead of 60,000
|
|
110
|
+
|
|
111
|
+
data.files("retail", CATALOG, SCHEMA, volume="landing", n_files=3) # 3 new CSV files; run again for more
|
|
112
|
+
|
|
113
|
+
pdf = ds.to_pandas("fact_orders") # a pandas DataFrame (no Spark needed)
|
|
109
114
|
print(ds.sql()) # the full CREATE TABLE / key script
|
|
110
|
-
ds.
|
|
111
|
-
ds.drop_tables() # clean up (the schema stays)
|
|
115
|
+
ds.drop_tables(CATALOG, SCHEMA) # clean up (the schema stays)
|
|
112
116
|
```
|
|
113
117
|
|
|
114
118
|
## 🧭 Cheat sheet
|
|
@@ -119,5 +123,6 @@ ds.drop_tables() # clean up (the schema stays)
|
|
|
119
123
|
| Revenue | `quantity * unit_price * (1 - discount)` |
|
|
120
124
|
| Order to customer | `JOIN dim_customer USING (customer_id)` |
|
|
121
125
|
| Order to product | `JOIN dim_product USING (product_id)` |
|
|
122
|
-
| Smaller data | `data.
|
|
126
|
+
| Smaller data | `data.create("retail", CATALOG, SCHEMA, scale=0.1)` |
|
|
127
|
+
| New raw files | `data.files("retail", CATALOG, SCHEMA, volume="landing")` |
|
|
123
128
|
| Clean up | `ds.drop_tables()` |
|
|
@@ -78,14 +78,13 @@ FROM readings;
|
|
|
78
78
|
```python
|
|
79
79
|
from databricksedu import data
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
landing = data.
|
|
83
|
-
|
|
84
|
-
ds.land_files(landing, parts=5, upto=3, fmt="json") # two more files arrive later
|
|
81
|
+
data.create("iot", CATALOG, SCHEMA) # tables: sites, devices, readings
|
|
82
|
+
landing = data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=1, fmt="json") # first file arrives
|
|
83
|
+
data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=2, fmt="json") # two more, new rows
|
|
85
84
|
# point Auto Loader or a streaming read at landing + "/readings"
|
|
86
85
|
```
|
|
87
86
|
|
|
88
|
-
`
|
|
87
|
+
Every `data.files` call writes **new** files with new rows and new `reading_id`s and never rewrites old ones, so an incremental reader only sees the new files.
|
|
89
88
|
|
|
90
89
|
## 🧭 Cheat sheet
|
|
91
90
|
|
|
@@ -94,5 +93,5 @@ ds.land_files(landing, parts=5, upto=3, fmt="json") # two more files arrive la
|
|
|
94
93
|
| Event time vs arrival | `event_ts` vs `ingest_ts` |
|
|
95
94
|
| Valid temperatures | `temperature BETWEEN -60 AND 60` |
|
|
96
95
|
| Deduplicate | key `(device_id, event_ts)` |
|
|
97
|
-
| Streaming files | `
|
|
98
|
-
| Smaller data | `data.
|
|
96
|
+
| Streaming files | `data.files("iot", CATALOG, SCHEMA, volume="landing", n_files=n, fmt="json")` |
|
|
97
|
+
| Smaller data | `data.create("iot", CATALOG, SCHEMA, scale=0.1)` |
|
{databricksedu-0.1.0 → databricksedu-0.2.1}/content/recaps/010-lakeflow-connect-recap/module.md
RENAMED
|
@@ -212,12 +212,11 @@ WHEN NOT MATCHED THEN INSERT *;
|
|
|
212
212
|
```dataset retail
|
|
213
213
|
```
|
|
214
214
|
|
|
215
|
-
Land
|
|
215
|
+
Land **retail** order files as CSV in the `landing` volume of your schema, then load them. Two order files land now, a third one arrives later.
|
|
216
216
|
|
|
217
217
|
```python run
|
|
218
|
-
# Land raw CSV files in a volume
|
|
219
|
-
LANDING = data.
|
|
220
|
-
ds.land_files(LANDING, upto=2)
|
|
218
|
+
# Land raw CSV files in a volume: 2 new order files (every run adds new ones)
|
|
219
|
+
LANDING = data.files("retail", CATALOG, SCHEMA, volume="landing", folder="lfc_landing", n_files=2)
|
|
221
220
|
```
|
|
222
221
|
|
|
223
222
|
```python run
|
|
@@ -247,7 +246,7 @@ display(spark.sql(COPY))
|
|
|
247
246
|
|
|
248
247
|
```python run
|
|
249
248
|
# 3) A new file arrives: COPY INTO loads only that one
|
|
250
|
-
|
|
249
|
+
data.files("retail", CATALOG, SCHEMA, volume="landing", folder="lfc_landing", n_files=1)
|
|
251
250
|
display(spark.sql(COPY))
|
|
252
251
|
```
|
|
253
252
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
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
|