fabricks 3.0.10__tar.gz → 3.0.12__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.
- {fabricks-3.0.10 → fabricks-3.0.12}/PKG-INFO +1 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/README.md +0 -4
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/merger.py +1 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/processor.py +4 -3
- fabricks-3.0.12/fabricks/context/config.py +127 -0
- fabricks-3.0.10/fabricks/context/config/utils.py → fabricks-3.0.12/fabricks/context/helpers.py +31 -3
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/runtime.py +18 -42
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/secret.py +1 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/processor.py +3 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/generator.py +19 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/views.py +8 -3
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/table.py +39 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/pyproject.toml +1 -1
- {fabricks-3.0.10 → fabricks-3.0.12}/uv.lock +1 -1
- fabricks-3.0.10/fabricks/context/config/__init__.py +0 -92
- {fabricks-3.0.10 → fabricks-3.0.12}/.gitignore +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/.gitkeep +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/.python-version +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/databricks.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/helpers/init.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/helpers/job.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/helpers/runtime.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/helpers/schedule.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/helpers/step.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/index.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/introduction/layers.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/introduction/overview.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/reference/cdc.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/reference/checks-data-quality.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/reference/extenders-udfs-parsers.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/reference/table-options.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/steps/BRONZE.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/steps/GOLD.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/docs/steps/SILVER.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/cdc/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/cdc/nocdc.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/cdc/scd1.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/cdc/scd2.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/context.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/core.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/deploy.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/exceptions.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/extenders.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/job_schema.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/log.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/masks.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/metastore/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/metastore/database.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/metastore/table.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/metastore/view.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/cluster.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/initialize.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/process.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/notebooks/terminate.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/parsers.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/schedules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/udfs.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/version.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/api/views.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/cdc.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/configurator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/base/generator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/cdc.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/nocdc.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/scd.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/scd1.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/scd2.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/base.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/current.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/rectify.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/slice.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/filter.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/filters/final.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/filters/latest.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/filters/update.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/macros/bactick.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/macros/hash.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/merge.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/merges/nocdc.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/merges/scd1.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/merges/scd2.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/context.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/final.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/nocdc/complete.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/nocdc/update.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/scd1.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/queries/scd2.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/cdc/templates/query.sql.jinja +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/log.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/spark_session.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/context/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/base.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/generator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/log.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/terminator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/dags/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/extenders.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/job_schema.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/checker.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/configurator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/exception.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/invoker.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/job.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/base/processor.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/bronze.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_job.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_job_conf.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_job_id.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_jobs.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/get_schedules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/gold.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/jobs/silver.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/masks.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/base.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/decorator.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/get_parser.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/parsers/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/diagrams.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/generate.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/get_schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/get_schedules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/process.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/terminate.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/schedules/views.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/steps/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/steps/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/steps/base.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/steps/get_step.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/steps/get_step_conf.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/udfs.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/core/views.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/masks.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/notebooks.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/schedules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/tables.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/udfs.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/deploy/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/README.md +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/database.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/dbobject.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/pyproject.toml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/utils.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/metastore/view.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/azure_queue.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/azure_table.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/console.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/fdict.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/helpers.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/log.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/mermaid.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/path.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/pip.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/pydantic.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/read/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/read/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/read/read.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/read/read_excel.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/read/read_yaml.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/schema/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/schema/get_schema_for_type.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/spark.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/sqlglot.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/write/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/write/delta.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/fabricks/utils/write/stream.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/format.sh +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/mkdocs.sh +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/mkdocs.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/_types.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/add_missing_modules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/armageddon.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/compare.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job01.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job02.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job03.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job04.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job05.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job06.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job07.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job08.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job09.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job10.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job11.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job01.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job02.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job03.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job04.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job05.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job06.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job07.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job08.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job09.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job10.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job11.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job01.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job02.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job03.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job04.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job05.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job06.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job07.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job08.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job09.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job10.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job11.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job01.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job02.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job03.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job04.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job05.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job06.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job07.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job08.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job09.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job10.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job11.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/fabricksconfig.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/init.sh +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/initialize.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_cdc.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_check.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_dependency.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_gold.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_invoke.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_overwrite.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_semantic.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job1/test_silver.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job2/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job2/test_gold.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job2/test_run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job2/test_semantic.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job2/test_silver.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job3/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job3/test_gold.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job3/test_run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job3/test_silver.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job4/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job4/test_gold.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job4/test_run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job5/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/jobs/job5/test_step.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/reset.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runjobs.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtests.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/.gitignore +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/conf.fabricks.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/masks/dummy.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/add_missing_modules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/cluster.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/initialize.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/process.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/terminate.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/delete_log.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/requirements.txt +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/add_missing_modules.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/foreign_keys.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/masker_and_commenter.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/no_drop.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/optimize_vacuum.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/primary_key.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/post_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/_config.nocdc.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/deduplicate.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/update.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/special_char.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/fact/memory.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/post_run.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/job-schema.json +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/dim/_config.semantic.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/dim/complex_query.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/_config.semantic.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.memory.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.princes.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.regents.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.princes.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/schedule.py +0 -0
- {fabricks-3.0.10 → fabricks-3.0.12}/tests/integration/utils.py +0 -0
|
@@ -271,12 +271,8 @@ with
|
|
|
271
271
|
from dates d
|
|
272
272
|
left join newkey r on d.__timestamp between r.__valid_from and r.__valid_to and d.only_offer_id = r.only_offer_id
|
|
273
273
|
group by d.only_offer_id, __timestamp, __operation
|
|
274
|
-
|
|
275
274
|
```
|
|
276
275
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
276
|
## 🧾 Conclusion
|
|
281
277
|
|
|
282
278
|
Fabricks helps you define pipelines declaratively in YAML and implement logic in SQL, while handling CDC, dependencies, logging, and table lifecycle. Start from the examples near each step, then evolve to advanced features like checks, UDFs, extenders, and semantic properties.
|
|
@@ -390,11 +390,12 @@ class Processor(Generator):
|
|
|
390
390
|
try:
|
|
391
391
|
sql = template.render(**context)
|
|
392
392
|
if fix:
|
|
393
|
-
DEFAULT_LOGGER.debug("fix context", extra={"label": self, "sql": sql})
|
|
394
393
|
sql = self.fix_sql(sql)
|
|
394
|
+
else:
|
|
395
|
+
DEFAULT_LOGGER.debug("print query", extra={"label": self, "sql": sql})
|
|
395
396
|
|
|
396
397
|
except (Exception, TypeError) as e:
|
|
397
|
-
DEFAULT_LOGGER.exception("fail to
|
|
398
|
+
DEFAULT_LOGGER.exception("fail to render sql query", extra={"label": self, "context": context})
|
|
398
399
|
raise e
|
|
399
400
|
|
|
400
401
|
row = self.spark.sql(sql).collect()[0]
|
|
@@ -425,7 +426,7 @@ class Processor(Generator):
|
|
|
425
426
|
|
|
426
427
|
except (Exception, TypeError) as e:
|
|
427
428
|
DEFAULT_LOGGER.debug("context", extra={"label": self, "context": context})
|
|
428
|
-
DEFAULT_LOGGER.exception("fail to
|
|
429
|
+
DEFAULT_LOGGER.exception("fail to render sql query", extra={"label": self, "context": context})
|
|
429
430
|
raise e
|
|
430
431
|
|
|
431
432
|
return sql
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
from typing import Final
|
|
4
|
+
|
|
5
|
+
from fabricks.context.helpers import get_config_from_file
|
|
6
|
+
from fabricks.utils.log import get_logger
|
|
7
|
+
from fabricks.utils.path import Path
|
|
8
|
+
from fabricks.utils.spark import spark
|
|
9
|
+
|
|
10
|
+
logger, _ = get_logger("logs", level=logging.DEBUG)
|
|
11
|
+
file_path, file_config, origin = get_config_from_file()
|
|
12
|
+
|
|
13
|
+
if file_path:
|
|
14
|
+
logger.debug(f"found {origin} config ({file_path})", extra={"label": "config"})
|
|
15
|
+
|
|
16
|
+
# path to runtime
|
|
17
|
+
runtime = os.environ.get("FABRICKS_RUNTIME", "none")
|
|
18
|
+
runtime = None if runtime.lower() == "none" else runtime
|
|
19
|
+
if runtime is None:
|
|
20
|
+
if runtime := file_config.get("runtime"):
|
|
21
|
+
assert file_path is not None
|
|
22
|
+
runtime = file_path.joinpath(runtime)
|
|
23
|
+
logger.debug(f"resolve runtime from {origin} file", extra={"label": "config"})
|
|
24
|
+
else:
|
|
25
|
+
logger.debug("resolve runtime from env", extra={"label": "config"})
|
|
26
|
+
|
|
27
|
+
if runtime is None:
|
|
28
|
+
if file_path is not None:
|
|
29
|
+
runtime = file_path
|
|
30
|
+
logger.debug(f"resolve runtime from {origin} file", extra={"label": "config"})
|
|
31
|
+
else:
|
|
32
|
+
raise ValueError(
|
|
33
|
+
"could not resolve runtime (could not find pyproject.toml nor fabricksconfig.json nor FABRICKS_RUNTIME)"
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
path_runtime = Path(runtime, assume_git=True)
|
|
37
|
+
|
|
38
|
+
# path to config
|
|
39
|
+
config = os.environ.get("FABRICKS_CONFIG")
|
|
40
|
+
if config is None:
|
|
41
|
+
if config := file_config.get("config"):
|
|
42
|
+
assert file_path is not None
|
|
43
|
+
config = file_path.joinpath(config)
|
|
44
|
+
logger.debug(f"resolve config from {origin} file", extra={"label": "config"})
|
|
45
|
+
else:
|
|
46
|
+
logger.debug("resolve config from env", extra={"label": "config"})
|
|
47
|
+
|
|
48
|
+
if config is None:
|
|
49
|
+
logger.debug("resolve config from default path", extra={"label": "config"})
|
|
50
|
+
config = path_runtime.joinpath(
|
|
51
|
+
"fabricks",
|
|
52
|
+
f"conf.{spark.conf.get('spark.databricks.clusterUsageTags.clusterOwnerOrgId')}.yml",
|
|
53
|
+
).string
|
|
54
|
+
|
|
55
|
+
path_config = Path(config, assume_git=True)
|
|
56
|
+
|
|
57
|
+
# path to notebooks
|
|
58
|
+
notebooks = os.environ.get("FABRICKS_NOTEBOOKS", "none")
|
|
59
|
+
notebooks = None if notebooks.lower() == "none" else notebooks
|
|
60
|
+
if notebooks is None:
|
|
61
|
+
if notebooks := file_config.get("notebooks"):
|
|
62
|
+
assert file_path is not None
|
|
63
|
+
notebooks = file_path.joinpath(notebooks)
|
|
64
|
+
logger.debug(f"resolve notebooks from {origin} file", extra={"label": "config"})
|
|
65
|
+
else:
|
|
66
|
+
logger.debug("resolve notebooks from env", extra={"label": "config"})
|
|
67
|
+
|
|
68
|
+
if notebooks is None:
|
|
69
|
+
logger.debug("resolve notebooks from default path", extra={"label": "config"})
|
|
70
|
+
notebooks = path_runtime.joinpath("notebooks")
|
|
71
|
+
|
|
72
|
+
path_notebooks = Path(str(notebooks), assume_git=True)
|
|
73
|
+
|
|
74
|
+
# job config from yaml
|
|
75
|
+
is_job_config_from_yaml = os.environ.get("FABRICKS_IS_JOB_CONFIG_FROM_YAML", None)
|
|
76
|
+
if is_job_config_from_yaml is None:
|
|
77
|
+
if is_job_config_from_yaml := file_config.get("job_config_from_yaml"):
|
|
78
|
+
logger.debug(f"resolve job_config_from_yaml from {origin} file", extra={"label": "config"})
|
|
79
|
+
else:
|
|
80
|
+
logger.debug("resolve job_config_from_yaml from env", extra={"label": "config"})
|
|
81
|
+
|
|
82
|
+
# debug mode
|
|
83
|
+
is_debugmode = os.environ.get("FABRICKS_IS_DEBUGMODE", None)
|
|
84
|
+
if is_debugmode is None:
|
|
85
|
+
if is_debugmode := file_config.get("debugmode"):
|
|
86
|
+
logger.debug(f"resolve debugmode from {origin} file", extra={"label": "config"})
|
|
87
|
+
else:
|
|
88
|
+
logger.debug("resolve debugmode from env", extra={"label": "config"})
|
|
89
|
+
|
|
90
|
+
# dev mode
|
|
91
|
+
is_devmode = os.environ.get("FABRICKS_IS_DEVMODE", None)
|
|
92
|
+
if is_devmode is None:
|
|
93
|
+
if is_devmode := file_config.get("devmode"):
|
|
94
|
+
logger.debug(f"resolve devmode from {origin} file", extra={"label": "config"})
|
|
95
|
+
else:
|
|
96
|
+
logger.debug("resolve devmode from env", extra={"label": "config"})
|
|
97
|
+
|
|
98
|
+
# log level
|
|
99
|
+
loglevel = os.environ.get("FABRICKS_LOGLEVEL", None)
|
|
100
|
+
if loglevel is None:
|
|
101
|
+
if loglevel := file_config.get("loglevel"):
|
|
102
|
+
logger.debug(f"resolve loglevel from {origin} file", extra={"label": "config"})
|
|
103
|
+
else:
|
|
104
|
+
logger.debug("resolve loglevel from env", extra={"label": "config"})
|
|
105
|
+
|
|
106
|
+
loglevel = loglevel.upper() if loglevel else "INFO"
|
|
107
|
+
if loglevel == "DEBUG":
|
|
108
|
+
_loglevel = logging.DEBUG
|
|
109
|
+
elif loglevel == "INFO":
|
|
110
|
+
_loglevel = logging.INFO
|
|
111
|
+
elif loglevel == "WARNING":
|
|
112
|
+
_loglevel = logging.WARNING
|
|
113
|
+
elif loglevel == "ERROR":
|
|
114
|
+
_loglevel = logging.ERROR
|
|
115
|
+
elif loglevel == "CRITICAL":
|
|
116
|
+
_loglevel = logging.CRITICAL
|
|
117
|
+
else:
|
|
118
|
+
raise ValueError(f"could not resolve {loglevel} (DEBUG, INFO, WARNING, ERROR or CRITICAL)")
|
|
119
|
+
|
|
120
|
+
# Constants
|
|
121
|
+
PATH_CONFIG: Final[Path] = path_config
|
|
122
|
+
PATH_RUNTIME: Final[Path] = path_runtime
|
|
123
|
+
PATH_NOTEBOOKS: Final[Path] = path_notebooks
|
|
124
|
+
IS_JOB_CONFIG_FROM_YAML: Final[bool] = str(is_job_config_from_yaml).lower() in ("true", "1", "yes")
|
|
125
|
+
IS_DEBUGMODE: Final[bool] = str(is_debugmode).lower() in ("true", "1", "yes")
|
|
126
|
+
IS_DEVMODE: Final[bool] = str(is_devmode).lower() in ("true", "1", "yes")
|
|
127
|
+
LOGLEVEL: Final[int] = _loglevel
|
fabricks-3.0.10/fabricks/context/config/utils.py → fabricks-3.0.12/fabricks/context/helpers.py
RENAMED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from fabricks.utils.path import Path
|
|
4
|
+
|
|
5
|
+
|
|
1
6
|
def get_config_from_toml():
|
|
2
7
|
import os
|
|
3
8
|
import pathlib
|
|
@@ -44,10 +49,33 @@ def get_config_from_json():
|
|
|
44
49
|
def get_config_from_file():
|
|
45
50
|
json_path, json_config = get_config_from_json()
|
|
46
51
|
if json_config:
|
|
47
|
-
return json_path, json_config
|
|
52
|
+
return json_path, json_config, "json"
|
|
48
53
|
|
|
49
54
|
pyproject_path, pyproject_config = get_config_from_toml()
|
|
50
55
|
if pyproject_config:
|
|
51
|
-
return pyproject_path, pyproject_config
|
|
56
|
+
return pyproject_path, pyproject_config, "pyproject"
|
|
52
57
|
|
|
53
|
-
return None, {}
|
|
58
|
+
return None, {}, None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_storage_paths(objects: List[dict], variables: dict) -> dict:
|
|
62
|
+
d = {}
|
|
63
|
+
for o in objects:
|
|
64
|
+
if o:
|
|
65
|
+
name = o.get("name")
|
|
66
|
+
assert name
|
|
67
|
+
uri = o.get("path_options", {}).get("storage")
|
|
68
|
+
assert uri
|
|
69
|
+
d[name] = Path.from_uri(uri, regex=variables)
|
|
70
|
+
return d
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def get_runtime_path(objects: List[dict], root: Path) -> dict:
|
|
74
|
+
d = {}
|
|
75
|
+
for o in objects:
|
|
76
|
+
name = o.get("name")
|
|
77
|
+
assert name
|
|
78
|
+
uri = o.get("path_options", {}).get("runtime")
|
|
79
|
+
assert uri
|
|
80
|
+
d[name] = root.joinpath(uri)
|
|
81
|
+
return d
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
from typing import Final,
|
|
1
|
+
from typing import Final, Optional
|
|
2
2
|
|
|
3
3
|
import yaml
|
|
4
4
|
|
|
5
|
-
from fabricks.context.config import
|
|
5
|
+
from fabricks.context.config import PATH_CONFIG, PATH_RUNTIME
|
|
6
|
+
from fabricks.context.helpers import get_runtime_path, get_storage_paths
|
|
6
7
|
from fabricks.utils.path import Path
|
|
7
8
|
|
|
8
|
-
with open(str(
|
|
9
|
+
with open(str(PATH_CONFIG)) as f:
|
|
9
10
|
data = yaml.safe_load(f)
|
|
10
11
|
|
|
11
12
|
conf: dict = [d["conf"] for d in data][0]
|
|
@@ -51,67 +52,42 @@ FABRICKS_STORAGE_CREDENTIAL: Final[Optional[str]] = path_options.get("storage_cr
|
|
|
51
52
|
|
|
52
53
|
path_udfs = path_options.get("udfs", "fabricks/udfs")
|
|
53
54
|
assert path_udfs, "path to udfs mandatory"
|
|
54
|
-
PATH_UDFS: Final[Path] =
|
|
55
|
+
PATH_UDFS: Final[Path] = PATH_RUNTIME.joinpath(path_udfs)
|
|
55
56
|
|
|
56
57
|
path_parsers = path_options.get("parsers", "fabricks/parsers")
|
|
57
58
|
assert path_parsers, "path to parsers mandatory"
|
|
58
|
-
PATH_PARSERS: Final[Path] =
|
|
59
|
+
PATH_PARSERS: Final[Path] = PATH_RUNTIME.joinpath(path_parsers)
|
|
59
60
|
|
|
60
61
|
path_extenders = path_options.get("extenders", "fabricks/extenders")
|
|
61
62
|
assert path_extenders, "path to extenders mandatory"
|
|
62
|
-
PATH_EXTENDERS: Final[Path] =
|
|
63
|
+
PATH_EXTENDERS: Final[Path] = PATH_RUNTIME.joinpath(path_extenders)
|
|
63
64
|
|
|
64
65
|
path_views = path_options.get("views", "fabricks/views")
|
|
65
66
|
assert path_views, "path to views mandatory"
|
|
66
|
-
PATH_VIEWS: Final[Path] =
|
|
67
|
+
PATH_VIEWS: Final[Path] = PATH_RUNTIME.joinpath(path_views)
|
|
67
68
|
|
|
68
69
|
path_schedules = path_options.get("schedules", "fabricks/schedules")
|
|
69
70
|
assert path_schedules, "path to schedules mandatory"
|
|
70
|
-
PATH_SCHEDULES: Final[Path] =
|
|
71
|
+
PATH_SCHEDULES: Final[Path] = PATH_RUNTIME.joinpath(path_schedules)
|
|
71
72
|
|
|
72
73
|
path_requirements = path_options.get("requirements", "fabricks/requirements")
|
|
73
74
|
assert path_requirements, "path to requirements mandatory"
|
|
74
|
-
PATH_REQUIREMENTS: Final[Path] =
|
|
75
|
+
PATH_REQUIREMENTS: Final[Path] = PATH_RUNTIME.joinpath(path_requirements)
|
|
75
76
|
|
|
76
77
|
path_masks = path_options.get("masks", "fabricks/masks")
|
|
77
78
|
assert path_masks, "path to masks mandatory"
|
|
78
|
-
PATH_MASKS: Final[Path] =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def _get_storage_paths(objects: List[dict]) -> dict:
|
|
82
|
-
d = {}
|
|
83
|
-
for o in objects:
|
|
84
|
-
if o:
|
|
85
|
-
name = o.get("name")
|
|
86
|
-
assert name
|
|
87
|
-
uri = o.get("path_options", {}).get("storage")
|
|
88
|
-
assert uri
|
|
89
|
-
d[name] = Path.from_uri(uri, regex=variables)
|
|
90
|
-
return d
|
|
91
|
-
|
|
79
|
+
PATH_MASKS: Final[Path] = PATH_RUNTIME.joinpath(path_masks)
|
|
92
80
|
|
|
93
81
|
PATHS_STORAGE: Final[dict[str, Path]] = {
|
|
94
82
|
"fabricks": FABRICKS_STORAGE,
|
|
95
|
-
**
|
|
96
|
-
**
|
|
97
|
-
**
|
|
98
|
-
**
|
|
83
|
+
**get_storage_paths(BRONZE, variables),
|
|
84
|
+
**get_storage_paths(SILVER, variables),
|
|
85
|
+
**get_storage_paths(GOLD, variables),
|
|
86
|
+
**get_storage_paths(databases, variables),
|
|
99
87
|
}
|
|
100
88
|
|
|
101
|
-
|
|
102
|
-
def _get_runtime_path(objects: List[dict]) -> dict:
|
|
103
|
-
d = {}
|
|
104
|
-
for o in objects:
|
|
105
|
-
name = o.get("name")
|
|
106
|
-
assert name
|
|
107
|
-
uri = o.get("path_options", {}).get("runtime")
|
|
108
|
-
assert uri
|
|
109
|
-
d[name] = path_runtime.joinpath(uri)
|
|
110
|
-
return d
|
|
111
|
-
|
|
112
|
-
|
|
113
89
|
PATHS_RUNTIME: Final[dict[str, Path]] = {
|
|
114
|
-
**
|
|
115
|
-
**
|
|
116
|
-
**
|
|
90
|
+
**get_runtime_path(BRONZE, PATH_RUNTIME),
|
|
91
|
+
**get_runtime_path(SILVER, PATH_RUNTIME),
|
|
92
|
+
**get_runtime_path(GOLD, PATH_RUNTIME),
|
|
117
93
|
}
|
|
@@ -40,7 +40,7 @@ def _get_secret_from_secret_scope(secret_scope: str, name: str) -> str:
|
|
|
40
40
|
if not _scopes or secret_scope not in _scopes: # we get the scopes only once, unless you search for something new
|
|
41
41
|
_scopes = [s.name for s in dbutils.secrets.listScopes()]
|
|
42
42
|
|
|
43
|
-
assert secret_scope in _scopes, "scope {secret_scope} not found"
|
|
43
|
+
assert secret_scope in _scopes, f"scope {secret_scope} not found"
|
|
44
44
|
|
|
45
45
|
return dbutils.secrets.get(scope=secret_scope, key=name)
|
|
46
46
|
|
|
@@ -10,7 +10,7 @@ from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_ex
|
|
|
10
10
|
|
|
11
11
|
from fabricks.context import PATH_NOTEBOOKS
|
|
12
12
|
from fabricks.core.dags.base import BaseDags
|
|
13
|
-
from fabricks.core.dags.log import LOGGER
|
|
13
|
+
from fabricks.core.dags.log import LOGGER, TABLE_LOG_HANDLER
|
|
14
14
|
from fabricks.core.dags.run import run
|
|
15
15
|
from fabricks.core.jobs.base._types import TStep
|
|
16
16
|
from fabricks.core.steps.get_step import get_step
|
|
@@ -148,7 +148,9 @@ class DagProcessor(BaseDags):
|
|
|
148
148
|
finally:
|
|
149
149
|
j["Status"] = "ok"
|
|
150
150
|
self.table.upsert(j)
|
|
151
|
+
|
|
151
152
|
LOGGER.info("end", extra=self.extra(j))
|
|
153
|
+
TABLE_LOG_HANDLER.flush()
|
|
152
154
|
|
|
153
155
|
dependencies = self.table.query(f"PartitionKey eq 'dependencies' and ParentId eq '{j.get('JobId')}'")
|
|
154
156
|
self.table.delete(dependencies)
|
|
@@ -336,7 +336,7 @@ class Generator(Configurator):
|
|
|
336
336
|
|
|
337
337
|
comment = self.options.table.get("comment")
|
|
338
338
|
if comment:
|
|
339
|
-
self.table.
|
|
339
|
+
self.table.add_table_comment(comment=comment)
|
|
340
340
|
|
|
341
341
|
else:
|
|
342
342
|
DEFAULT_LOGGER.debug("table exists, skip creation", extra={"label": self})
|
|
@@ -389,6 +389,24 @@ class Generator(Configurator):
|
|
|
389
389
|
def overwrite_schema(self, df: Optional[DataFrame] = None):
|
|
390
390
|
self._update_schema(df=df, overwrite=True)
|
|
391
391
|
|
|
392
|
+
def update_comments(self, table: Optional[bool] = True, columns: Optional[bool] = True):
|
|
393
|
+
if self.virtual:
|
|
394
|
+
return
|
|
395
|
+
|
|
396
|
+
if self.persist:
|
|
397
|
+
self.table.drop_comments()
|
|
398
|
+
|
|
399
|
+
if table:
|
|
400
|
+
comment = self.options.table.get("comment")
|
|
401
|
+
if comment:
|
|
402
|
+
self.table.add_table_comment(comment=comment)
|
|
403
|
+
|
|
404
|
+
if columns:
|
|
405
|
+
comments = self.options.table.get_dict("comments")
|
|
406
|
+
if comments:
|
|
407
|
+
for col, comment in comments.items():
|
|
408
|
+
self.table.add_column_comment(column=col, comment=comment)
|
|
409
|
+
|
|
392
410
|
def get_differences_with_deltatable(self, df: Optional[DataFrame] = None):
|
|
393
411
|
if df is None:
|
|
394
412
|
df = self.get_data(stream=self.stream)
|
|
@@ -276,6 +276,7 @@ def create_or_replace_logs_pivot_view():
|
|
|
276
276
|
l.step,
|
|
277
277
|
l.job,
|
|
278
278
|
l.job_id,
|
|
279
|
+
-- flags
|
|
279
280
|
collect_set(l.status) as statuses,
|
|
280
281
|
array_contains(statuses, 'skipped') as skipped,
|
|
281
282
|
array_contains(statuses, 'warned') as warned,
|
|
@@ -283,15 +284,19 @@ def create_or_replace_logs_pivot_view():
|
|
|
283
284
|
array_contains(statuses, 'failed') or (not done and not skipped) as failed,
|
|
284
285
|
not done and not failed and not skipped and array_contains(statuses, 'running') as timed_out,
|
|
285
286
|
not array_contains(statuses, 'running') as cancelled,
|
|
287
|
+
--
|
|
286
288
|
max(l.notebook_id) as notebook_id,
|
|
289
|
+
--
|
|
290
|
+
max(l.timestamp) filter (where l.status = 'running') as start_time,
|
|
291
|
+
max(l.timestamp) filter (where l.status in ('done', 'ok')) as end_time,
|
|
292
|
+
--
|
|
287
293
|
max(l.timestamp) filter (where l.status = 'scheduled' ) as scheduled_time,
|
|
288
294
|
max(l.timestamp) filter (where l.status = 'waiting' ) as waiting_time,
|
|
289
|
-
max(l.timestamp) filter (where l.status = 'running') as start_time,
|
|
290
295
|
max(l.timestamp) filter (where l.status = 'running' ) as running_time,
|
|
291
296
|
max(l.timestamp) filter (where l.status = 'done' ) as done_time,
|
|
292
297
|
max(l.timestamp) filter (where l.status = 'failed' ) as failed_time,
|
|
293
|
-
max(l.timestamp) filter(where l.status = 'ok') as
|
|
294
|
-
|
|
298
|
+
max(l.timestamp) filter (where l.status = 'ok') as ok_time,
|
|
299
|
+
--
|
|
295
300
|
max(l.exception) as exception
|
|
296
301
|
from
|
|
297
302
|
fabricks.logs l
|
|
@@ -666,7 +666,45 @@ class Table(DbObject):
|
|
|
666
666
|
"""
|
|
667
667
|
)
|
|
668
668
|
|
|
669
|
-
def
|
|
669
|
+
def drop_comments(self):
|
|
670
|
+
self.drop_table_comment()
|
|
671
|
+
for col in self.columns:
|
|
672
|
+
self.drop_column_comment(col)
|
|
673
|
+
|
|
674
|
+
def drop_table_comment(self):
|
|
675
|
+
assert self.registered, f"{self} not registered"
|
|
676
|
+
|
|
677
|
+
DEFAULT_LOGGER.debug("drop table comment", extra={"label": self})
|
|
678
|
+
self.spark.sql(
|
|
679
|
+
f"""
|
|
680
|
+
comment on table {self.qualified_name}
|
|
681
|
+
is null;
|
|
682
|
+
"""
|
|
683
|
+
)
|
|
684
|
+
|
|
685
|
+
def drop_column_comment(self, column: str):
|
|
686
|
+
assert self.registered, f"{self} not registered"
|
|
687
|
+
|
|
688
|
+
DEFAULT_LOGGER.debug(f"drop comment from column {column}", extra={"label": self})
|
|
689
|
+
self.spark.sql(
|
|
690
|
+
f"""
|
|
691
|
+
comment on column {self.qualified_name}.`{column}`
|
|
692
|
+
is null;
|
|
693
|
+
"""
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
def add_column_comment(self, column: str, comment: str):
|
|
697
|
+
assert self.registered, f"{self} not registered"
|
|
698
|
+
|
|
699
|
+
DEFAULT_LOGGER.debug(f"add comment '{comment}' to column {column}", extra={"label": self})
|
|
700
|
+
self.spark.sql(
|
|
701
|
+
f"""
|
|
702
|
+
comment on column {self.qualified_name}.`{column}`
|
|
703
|
+
is '{comment}';
|
|
704
|
+
"""
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
def add_table_comment(self, comment: str):
|
|
670
708
|
assert self.registered, f"{self} not registered"
|
|
671
709
|
|
|
672
710
|
DEFAULT_LOGGER.debug(f"add comment '{comment}'", extra={"label": self})
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import os
|
|
3
|
-
from typing import Final
|
|
4
|
-
|
|
5
|
-
from fabricks.context.config.utils import get_config_from_file
|
|
6
|
-
from fabricks.utils.path import Path
|
|
7
|
-
from fabricks.utils.spark import spark
|
|
8
|
-
|
|
9
|
-
file_path, file_config = get_config_from_file()
|
|
10
|
-
|
|
11
|
-
runtime = os.environ.get("FABRICKS_RUNTIME", "none")
|
|
12
|
-
runtime = None if runtime.lower() == "none" else runtime
|
|
13
|
-
if runtime is None:
|
|
14
|
-
if runtime := file_config.get("runtime"):
|
|
15
|
-
assert file_path is not None
|
|
16
|
-
runtime = file_path.joinpath(runtime)
|
|
17
|
-
|
|
18
|
-
if runtime is None:
|
|
19
|
-
if file_path is not None:
|
|
20
|
-
runtime = file_path
|
|
21
|
-
else:
|
|
22
|
-
raise ValueError(
|
|
23
|
-
"could not resolve runtime (could not find pyproject.toml nor fabricksconfig.json nor FABRICKS_RUNTIME)"
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
path_runtime = Path(runtime, assume_git=True)
|
|
27
|
-
PATH_RUNTIME: Final[Path] = path_runtime
|
|
28
|
-
|
|
29
|
-
notebooks = os.environ.get("FABRICKS_NOTEBOOKS", "none")
|
|
30
|
-
notebooks = None if notebooks.lower() == "none" else notebooks
|
|
31
|
-
if notebooks is None:
|
|
32
|
-
if notebooks := file_config.get("notebooks"):
|
|
33
|
-
assert file_path is not None
|
|
34
|
-
notebooks = file_path.joinpath(notebooks)
|
|
35
|
-
|
|
36
|
-
notebooks = notebooks if notebooks else path_runtime.joinpath("notebooks")
|
|
37
|
-
PATH_NOTEBOOKS: Final[Path] = Path(str(notebooks), assume_git=True)
|
|
38
|
-
|
|
39
|
-
is_job_config_from_yaml = os.environ.get("FABRICKS_IS_JOB_CONFIG_FROM_YAML", None)
|
|
40
|
-
if is_job_config_from_yaml is None:
|
|
41
|
-
assert file_path is not None
|
|
42
|
-
is_job_config_from_yaml = file_config.get("job_config_from_yaml")
|
|
43
|
-
|
|
44
|
-
IS_JOB_CONFIG_FROM_YAML: Final[bool] = str(is_job_config_from_yaml).lower() in ("true", "1", "yes")
|
|
45
|
-
|
|
46
|
-
is_debugmode = os.environ.get("FABRICKS_IS_DEBUGMODE", None)
|
|
47
|
-
if is_debugmode is None:
|
|
48
|
-
is_debugmode = file_config.get("debugmode")
|
|
49
|
-
|
|
50
|
-
IS_DEBUGMODE: Final[bool] = str(is_debugmode).lower() in ("true", "1", "yes")
|
|
51
|
-
|
|
52
|
-
is_devmode = os.environ.get("FABRICKS_IS_DEVMODE", None)
|
|
53
|
-
if is_devmode is None:
|
|
54
|
-
is_devmode = file_config.get("devmode")
|
|
55
|
-
|
|
56
|
-
IS_DEVMODE: Final[bool] = str(is_devmode).lower() in ("true", "1", "yes")
|
|
57
|
-
|
|
58
|
-
loglevel = os.environ.get("FABRICKS_LOGLEVEL", None)
|
|
59
|
-
if loglevel is None:
|
|
60
|
-
loglevel = file_config.get("loglevel")
|
|
61
|
-
|
|
62
|
-
loglevel = loglevel.upper() if loglevel else "INFO"
|
|
63
|
-
if loglevel == "DEBUG":
|
|
64
|
-
_loglevel = logging.DEBUG
|
|
65
|
-
elif loglevel == "INFO":
|
|
66
|
-
_loglevel = logging.INFO
|
|
67
|
-
elif loglevel == "WARNING":
|
|
68
|
-
_loglevel = logging.WARNING
|
|
69
|
-
elif loglevel == "ERROR":
|
|
70
|
-
_loglevel = logging.ERROR
|
|
71
|
-
elif loglevel == "CRITICAL":
|
|
72
|
-
_loglevel = logging.CRITICAL
|
|
73
|
-
else:
|
|
74
|
-
raise ValueError(f"could not resolve {loglevel} (DEBUG, INFO, WARNING, ERROR or CRITICAL)")
|
|
75
|
-
|
|
76
|
-
LOGLEVEL = _loglevel
|
|
77
|
-
|
|
78
|
-
path_config = os.environ.get("FABRICKS_CONFIG")
|
|
79
|
-
if path_config is None:
|
|
80
|
-
if path_config := file_config.get("config"):
|
|
81
|
-
assert file_path is not None
|
|
82
|
-
path_config = file_path.joinpath(path_config)
|
|
83
|
-
else:
|
|
84
|
-
path_config = PATH_RUNTIME.joinpath(path_config).string if path_config else None
|
|
85
|
-
|
|
86
|
-
if not path_config:
|
|
87
|
-
path_config = PATH_RUNTIME.joinpath(
|
|
88
|
-
"fabricks",
|
|
89
|
-
f"conf.{spark.conf.get('spark.databricks.clusterUsageTags.clusterOwnerOrgId')}.yml",
|
|
90
|
-
).string
|
|
91
|
-
|
|
92
|
-
PATH_CONFIG: Final[Path] = Path(path_config, assume_git=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|