fabricks 3.0.16__tar.gz → 3.0.18__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.16 → fabricks-3.0.18}/PKG-INFO +1 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/configurator.py +2 -7
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/processor.py +5 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/base.sql.jinja +6 -2
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/context.sql.jinja +3 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/_types.py +4 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/generator.py +41 -31
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/bronze.py +6 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/gold.py +3 -3
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/udfs.py +8 -8
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/table.py +8 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/format.sh +1 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/pyproject.toml +1 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +9 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/fabricksconfig.json +1 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_semantic.py +5 -0
- fabricks-3.0.18/tests/integration/landing_to_raw.py +46 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/_config.semantic.yml +1 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.princes.yml +8 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.princes.yml +9 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/utils.py +15 -3
- {fabricks-3.0.16 → fabricks-3.0.18}/uv.lock +1 -1
- {fabricks-3.0.16 → fabricks-3.0.18}/.gitignore +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/.gitkeep +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/.python-version +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/README.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/databricks.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/helpers/init.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/helpers/job.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/helpers/runtime.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/helpers/schedule.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/helpers/step.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/index.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/introduction/layers.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/introduction/overview.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/reference/cdc.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/reference/checks-data-quality.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/reference/extenders-udfs-parsers.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/reference/table-options.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/steps/BRONZE.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/steps/GOLD.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/docs/steps/SILVER.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/cdc/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/cdc/nocdc.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/cdc/scd1.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/cdc/scd2.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/context.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/core.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/deploy.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/exceptions.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/extenders.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/job_schema.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/log.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/masks.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/metastore/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/metastore/database.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/metastore/table.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/metastore/view.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/cluster.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/initialize.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/process.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/schedule.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/notebooks/terminate.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/parsers.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/schedules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/udfs.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/version.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/api/views.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/cdc.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/generator.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/base/merger.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/cdc.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/nocdc.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/scd.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/scd1.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/scd2.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/current.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/rectify.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/ctes/slice.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/filter.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/filters/final.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/filters/latest.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/filters/update.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/macros/bactick.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/macros/hash.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/merge.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/merges/nocdc.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/merges/scd1.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/merges/scd2.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/final.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/nocdc/complete.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/nocdc/update.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/scd1.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/queries/scd2.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/cdc/templates/query.sql.jinja +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/config.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/helpers.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/log.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/runtime.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/secret.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/spark_session.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/context/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/base.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/generator.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/log.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/processor.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/terminator.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/dags/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/extenders.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/job_schema.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/checker.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/configurator.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/exception.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/invoker.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/job.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/base/processor.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_job.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_job_conf.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_job_id.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_jobs.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_schedule.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/get_schedules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/jobs/silver.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/masks.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/base.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/decorator.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/get_parser.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/parsers/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/diagrams.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/generate.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/get_schedule.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/get_schedules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/process.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/terminate.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/schedules/views.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/steps/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/steps/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/steps/base.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/steps/get_step.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/steps/get_step_conf.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/core/views.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/masks.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/notebooks.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/schedules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/tables.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/udfs.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/deploy/views.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/README.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/database.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/dbobject.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/pyproject.toml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/utils.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/metastore/view.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/azure_queue.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/azure_table.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/console.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/fdict.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/helpers.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/log.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/mermaid.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/path.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/pip.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/pydantic.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/read/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/read/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/read/read.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/read/read_excel.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/read/read_yaml.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/schema/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/schema/get_schema_for_type.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/spark.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/sqlglot.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/write/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/write/delta.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/fabricks/utils/write/stream.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/mkdocs.sh +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/mkdocs.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/README.md +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/_types.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/add_missing_modules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/armageddon.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/compare.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job01.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job02.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job03.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job04.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job05.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job06.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job07.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job08.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job09.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job10.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd1/job11.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job01.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job02.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job03.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job04.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job05.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job06.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job07.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job08.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job09.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job10.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/gold/scd2/job11.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job01.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job02.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job03.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job04.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job05.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job06.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job07.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job08.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job09.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job10.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd1/job11.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job01.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job02.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job03.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job04.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job05.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job06.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job07.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job08.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job09.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job10.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/expected/silver/scd2/job11.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/init.sh +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/initialize.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_cdc.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_check.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_dependency.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_gold.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_invoke.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_overwrite.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_schedule.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job1/test_silver.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job2/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job2/test_gold.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job2/test_run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job2/test_semantic.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job2/test_silver.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job3/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job3/test_gold.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job3/test_run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job3/test_silver.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job4/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job4/test_gold.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job4/test_run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job5/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/jobs/job5/test_step.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/reset.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runjobs.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtests.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/.gitignore +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/conf.fabricks.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/extenders/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/masks/dummy.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/add_missing_modules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/cluster.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/initialize.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/process.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/schedule.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/notebooks/terminate.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/parsers/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/parsers/delete_log.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/requirements.txt +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/add_missing_modules.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/foreign_keys.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/masker_and_commenter.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/no_drop.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/optimize_vacuum.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/primary_key.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/post_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/nocdc/_config.nocdc.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/nocdc/deduplicate.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/nocdc/update.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/special_char.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/transf/fact/memory.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/gold/transf/post_run.py +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/job-schema.json +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/dim/_config.semantic.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/dim/complex_query.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.memory.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/silver/_config.regents.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
- {fabricks-3.0.16 → fabricks-3.0.18}/tests/integration/schedule.py +0 -0
|
@@ -90,6 +90,7 @@ class Configurator(ABC):
|
|
|
90
90
|
"__identity",
|
|
91
91
|
"__source",
|
|
92
92
|
"__key",
|
|
93
|
+
"__hash",
|
|
93
94
|
"__timestamp",
|
|
94
95
|
"__valid_from",
|
|
95
96
|
"__valid_to",
|
|
@@ -110,7 +111,6 @@ class Configurator(ABC):
|
|
|
110
111
|
cols = [
|
|
111
112
|
"__operation",
|
|
112
113
|
"__metadata",
|
|
113
|
-
"__hash",
|
|
114
114
|
"__rescued_data",
|
|
115
115
|
]
|
|
116
116
|
|
|
@@ -126,6 +126,7 @@ class Configurator(ABC):
|
|
|
126
126
|
"__identity",
|
|
127
127
|
"__source",
|
|
128
128
|
"__key",
|
|
129
|
+
"__hash",
|
|
129
130
|
"__timestamp",
|
|
130
131
|
"__valid_from",
|
|
131
132
|
"__valid_to",
|
|
@@ -134,7 +135,6 @@ class Configurator(ABC):
|
|
|
134
135
|
# Trailing
|
|
135
136
|
"__operation",
|
|
136
137
|
"__metadata",
|
|
137
|
-
"__hash",
|
|
138
138
|
"__rescued_data",
|
|
139
139
|
]
|
|
140
140
|
|
|
@@ -192,11 +192,6 @@ class Configurator(ABC):
|
|
|
192
192
|
leading = self.allowed_ouput_leading__columns
|
|
193
193
|
trailing = self.allowed_output_trailing__columns
|
|
194
194
|
|
|
195
|
-
# move __hash to the front of the table to ensure statistics are present
|
|
196
|
-
if "__key" not in columns and "__hash" in columns:
|
|
197
|
-
leading = ["__hash" if c == "__key" else c for c in leading]
|
|
198
|
-
trailing = [c for c in trailing if c != "__hash"]
|
|
199
|
-
|
|
200
195
|
__leading = [c for c in leading if c in columns]
|
|
201
196
|
__trailing = [c for c in trailing if c in columns]
|
|
202
197
|
|
|
@@ -51,6 +51,7 @@ class Processor(Generator):
|
|
|
51
51
|
|
|
52
52
|
overwrite = []
|
|
53
53
|
exclude = kwargs.get("exclude", []) # used by silver to exclude __operation from output if not update
|
|
54
|
+
cast = kwargs.get("cast", {}) # used by silver to cast columns to target types
|
|
54
55
|
|
|
55
56
|
order_duplicate_by = kwargs.get("order_duplicate_by", None)
|
|
56
57
|
if order_duplicate_by:
|
|
@@ -140,6 +141,8 @@ class Processor(Generator):
|
|
|
140
141
|
# override timestamp if added and found in df
|
|
141
142
|
if add_timestamp and "__timestamp" in inputs:
|
|
142
143
|
overwrite.append("__timestamp")
|
|
144
|
+
elif "__timestamp" in inputs:
|
|
145
|
+
cast["__timestamp"] = "timestamp"
|
|
143
146
|
|
|
144
147
|
# override key if added and found in df (key needed for merge)
|
|
145
148
|
if add_key and "__key" in inputs:
|
|
@@ -356,6 +359,8 @@ class Processor(Generator):
|
|
|
356
359
|
"correct_valid_from": correct_valid_from,
|
|
357
360
|
# overwrite
|
|
358
361
|
"overwrite": overwrite,
|
|
362
|
+
# cast
|
|
363
|
+
"cast": cast,
|
|
359
364
|
# filter
|
|
360
365
|
"slices": None,
|
|
361
366
|
"sources": None,
|
|
@@ -5,10 +5,14 @@ with
|
|
|
5
5
|
__base as (
|
|
6
6
|
select
|
|
7
7
|
*
|
|
8
|
-
{% if overwrite %}
|
|
8
|
+
{% if overwrite or cast %}
|
|
9
9
|
-- will be overwritten below
|
|
10
|
-
except (
|
|
10
|
+
except (
|
|
11
|
+
{% for o in overwrite %}{{ o }}, {% endfor %}
|
|
12
|
+
{% for key, value in cast.items() %} {{ key }}, {% endfor %}
|
|
13
|
+
)
|
|
11
14
|
{% endif %},
|
|
15
|
+
{% for key, value in cast.items() %} cast({{ key }} as {{ value }}) as {{ key }}, {% endfor %}
|
|
12
16
|
{% if add_calculated_columns %} {% for c in add_calculated_columns %} {{ c }}, {% endfor %} {% endif %}
|
|
13
17
|
{% if add_timestamp %} cast(current_date() as timestamp) as __timestamp, {% endif %}
|
|
14
18
|
{% if add_operation %} cast('{{ add_operation }}' as string) as __operation, {% endif %}
|
|
@@ -141,6 +141,9 @@
|
|
|
141
141
|
{%- if overwrite %}
|
|
142
142
|
☐ overwrite: {{ overwrite | join(", ") | truncate(100, killwords=True) }}
|
|
143
143
|
{%- endif %}
|
|
144
|
+
{%- if cast %}
|
|
145
|
+
☐ cast: {{ cast | join(", ") | truncate(100, killwords=True) }}
|
|
146
|
+
{%- endif %}
|
|
144
147
|
|
|
145
148
|
👨👩👧 PARENTS
|
|
146
149
|
{%- if parent_slice %}
|
|
@@ -16,6 +16,9 @@ class RuntimeTimeoutOptions(TypedDict):
|
|
|
16
16
|
pre_run: int
|
|
17
17
|
post_run: int
|
|
18
18
|
|
|
19
|
+
class UDFOptions(TypedDict):
|
|
20
|
+
prefix: Optional[str]
|
|
21
|
+
schema: Optional[str]
|
|
19
22
|
|
|
20
23
|
class StepTimeoutOptions(TypedDict):
|
|
21
24
|
step: Optional[int]
|
|
@@ -123,6 +126,7 @@ class Conf(TypedDict):
|
|
|
123
126
|
options: RuntimeOptions
|
|
124
127
|
path_options: RuntimePathOptions
|
|
125
128
|
extender_options: Optional[ExtenderOptions]
|
|
129
|
+
udf_options: Optional[UDFOptions]
|
|
126
130
|
spark_options: SparkOptions
|
|
127
131
|
bronze: Optional[List[Bronze]]
|
|
128
132
|
silver: Optional[List[Silver]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
|
-
from typing import Optional, Sequence, Union, cast
|
|
2
|
+
from typing import List, Optional, Sequence, Union, cast
|
|
3
3
|
|
|
4
4
|
from pyspark.sql import DataFrame
|
|
5
5
|
from pyspark.sql.functions import lit
|
|
@@ -166,6 +166,31 @@ class Generator(Configurator):
|
|
|
166
166
|
"""
|
|
167
167
|
...
|
|
168
168
|
|
|
169
|
+
def _get_clustering_columns(self, df: DataFrame) -> Optional[List[str]]:
|
|
170
|
+
columns = self.options.table.get_list("cluster_by")
|
|
171
|
+
if columns:
|
|
172
|
+
return columns
|
|
173
|
+
|
|
174
|
+
columns = []
|
|
175
|
+
|
|
176
|
+
if "__source" in df.columns:
|
|
177
|
+
columns = ["__source"]
|
|
178
|
+
if "__is_current" in df.columns:
|
|
179
|
+
columns.append("__is_current")
|
|
180
|
+
|
|
181
|
+
if "__key" in df.columns:
|
|
182
|
+
columns.append("__key")
|
|
183
|
+
elif "__hash" in df.columns:
|
|
184
|
+
columns.append("__hash")
|
|
185
|
+
|
|
186
|
+
if columns:
|
|
187
|
+
DEFAULT_LOGGER.debug(f"found clustering columns ({', '.join(columns)})", extra={"label": self})
|
|
188
|
+
return columns
|
|
189
|
+
|
|
190
|
+
else:
|
|
191
|
+
DEFAULT_LOGGER.debug("could not determine any clustering column", extra={"label": self})
|
|
192
|
+
return None
|
|
193
|
+
|
|
169
194
|
def create_table(self):
|
|
170
195
|
def _create_table(df: DataFrame, batch: Optional[int] = 0):
|
|
171
196
|
df = self.base_transform(df)
|
|
@@ -242,20 +267,13 @@ class Generator(Configurator):
|
|
|
242
267
|
cluster_by = []
|
|
243
268
|
|
|
244
269
|
else:
|
|
245
|
-
cluster_by = self.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
cluster_by.append("__key")
|
|
253
|
-
elif "__hash" in df.columns:
|
|
254
|
-
cluster_by.append("__hash")
|
|
255
|
-
|
|
256
|
-
if not cluster_by:
|
|
257
|
-
DEFAULT_LOGGER.debug("could not determine clustering column", extra={"label": self})
|
|
258
|
-
liquid_clustering = False
|
|
270
|
+
cluster_by = self._get_clustering_columns(df)
|
|
271
|
+
|
|
272
|
+
if cluster_by:
|
|
273
|
+
liquid_clustering = True
|
|
274
|
+
|
|
275
|
+
else:
|
|
276
|
+
liquid_clustering = None
|
|
259
277
|
cluster_by = None
|
|
260
278
|
|
|
261
279
|
if liquid_clustering is None:
|
|
@@ -446,20 +464,12 @@ class Generator(Configurator):
|
|
|
446
464
|
enable = enable_step
|
|
447
465
|
|
|
448
466
|
if enable:
|
|
449
|
-
cluster_by = self.
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
cluster_by.append("__key")
|
|
457
|
-
elif "__hash" in df.columns:
|
|
458
|
-
cluster_by.append("__hash")
|
|
459
|
-
|
|
460
|
-
if len(cluster_by) > 0:
|
|
461
|
-
self.table.enable_liquid_clustering(cluster_by, auto=False)
|
|
462
|
-
else:
|
|
463
|
-
self.table.enable_liquid_clustering(auto=True)
|
|
467
|
+
cluster_by = self._get_clustering_columns(df)
|
|
468
|
+
|
|
469
|
+
if cluster_by and len(cluster_by) > 0:
|
|
470
|
+
self.table.enable_liquid_clustering(cluster_by, auto=False)
|
|
471
|
+
else:
|
|
472
|
+
self.table.enable_liquid_clustering(auto=True)
|
|
473
|
+
|
|
464
474
|
else:
|
|
465
|
-
DEFAULT_LOGGER.debug("
|
|
475
|
+
DEFAULT_LOGGER.debug("liquid clustering disabled", extra={"label": self})
|
|
@@ -2,7 +2,7 @@ from typing import Optional, Sequence, Union, cast
|
|
|
2
2
|
|
|
3
3
|
from pyspark.sql import DataFrame
|
|
4
4
|
from pyspark.sql.functions import expr, lit, md5
|
|
5
|
-
from pyspark.sql.types import Row
|
|
5
|
+
from pyspark.sql.types import Row, TimestampType
|
|
6
6
|
|
|
7
7
|
from fabricks.cdc.nocdc import NoCDC
|
|
8
8
|
from fabricks.context import VARIABLES
|
|
@@ -91,6 +91,11 @@ class Bronze(BaseJob):
|
|
|
91
91
|
try:
|
|
92
92
|
df = self.spark.sql(f"select * from {file_format}.`{self.data_path}`")
|
|
93
93
|
assert len(df.columns) > 1, "external table must have at least one column"
|
|
94
|
+
if "__timestamp" in df.columns:
|
|
95
|
+
assert isinstance(df.schema["__timestamp"].dataType, TimestampType), (
|
|
96
|
+
"__timestamp must be of type timestamp"
|
|
97
|
+
)
|
|
98
|
+
|
|
94
99
|
except Exception as e:
|
|
95
100
|
DEFAULT_LOGGER.exception("read external table failed", extra={"label": self})
|
|
96
101
|
raise e
|
|
@@ -10,7 +10,7 @@ from fabricks.cdc.nocdc import NoCDC
|
|
|
10
10
|
from fabricks.context.log import DEFAULT_LOGGER
|
|
11
11
|
from fabricks.core.jobs.base._types import JobDependency, TGold
|
|
12
12
|
from fabricks.core.jobs.base.job import BaseJob
|
|
13
|
-
from fabricks.core.udfs import is_registered, register_udf
|
|
13
|
+
from fabricks.core.udfs import is_registered, register_udf, udf_prefix
|
|
14
14
|
from fabricks.metastore.view import create_or_replace_global_temp_view
|
|
15
15
|
from fabricks.utils.path import Path
|
|
16
16
|
from fabricks.utils.sqlglot import fix, get_tables
|
|
@@ -90,8 +90,8 @@ class Gold(BaseJob):
|
|
|
90
90
|
|
|
91
91
|
else:
|
|
92
92
|
matches = []
|
|
93
|
-
if "
|
|
94
|
-
r = re.compile(
|
|
93
|
+
if f"{udf_prefix}" in self.sql:
|
|
94
|
+
r = re.compile(rf"(?<={udf_prefix})\w*(?=\()")
|
|
95
95
|
matches = re.findall(r, self.sql)
|
|
96
96
|
matches = set(matches)
|
|
97
97
|
matches = list(matches)
|
|
@@ -5,11 +5,13 @@ from typing import Callable, List, Optional
|
|
|
5
5
|
|
|
6
6
|
from pyspark.sql import SparkSession
|
|
7
7
|
|
|
8
|
-
from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK
|
|
8
|
+
from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK, CONF_RUNTIME
|
|
9
9
|
from fabricks.context.log import DEFAULT_LOGGER
|
|
10
10
|
|
|
11
11
|
UDFS: dict[str, Callable] = {}
|
|
12
12
|
|
|
13
|
+
udf_schema = CONF_RUNTIME.get("udf_options", {}).get("schema", "default")
|
|
14
|
+
udf_prefix = CONF_RUNTIME.get("udf_options", {}).get("prefix", "udf_")
|
|
13
15
|
|
|
14
16
|
def register_all_udfs(extension: Optional[str] = None, override: bool = False):
|
|
15
17
|
"""
|
|
@@ -47,12 +49,12 @@ def is_registered(udf: str, spark: Optional[SparkSession] = None) -> bool:
|
|
|
47
49
|
spark = SPARK
|
|
48
50
|
assert spark is not None
|
|
49
51
|
|
|
50
|
-
df = spark.sql("show user functions in
|
|
52
|
+
df = spark.sql(f"show user functions in {udf_schema}")
|
|
51
53
|
|
|
52
54
|
if CATALOG:
|
|
53
|
-
df = df.where(f"function == '{CATALOG}.
|
|
55
|
+
df = df.where(f"function == '{CATALOG}.{udf_schema}.{udf_prefix}{udf}'")
|
|
54
56
|
else:
|
|
55
|
-
df = df.where(f"function == 'spark_catalog.
|
|
57
|
+
df = df.where(f"function == 'spark_catalog.{udf_schema}.{udf_prefix}{udf}'")
|
|
56
58
|
|
|
57
59
|
return not df.isEmpty()
|
|
58
60
|
|
|
@@ -72,9 +74,9 @@ def register_udf(
|
|
|
72
74
|
|
|
73
75
|
if not is_registered(udf, spark) or override:
|
|
74
76
|
if override:
|
|
75
|
-
DEFAULT_LOGGER.debug(f"override udf {udf}")
|
|
77
|
+
DEFAULT_LOGGER.debug(f"override udf {udf}", extra={"label": "fabricks"})
|
|
76
78
|
else:
|
|
77
|
-
DEFAULT_LOGGER.debug(f"register udf {udf}")
|
|
79
|
+
DEFAULT_LOGGER.debug(f"register udf {udf}", extra={"label": "fabricks"})
|
|
78
80
|
|
|
79
81
|
if extension is None:
|
|
80
82
|
extension = get_extension(udf)
|
|
@@ -89,8 +91,6 @@ def register_udf(
|
|
|
89
91
|
elif extension == "py":
|
|
90
92
|
if not IS_UNITY_CATALOG:
|
|
91
93
|
assert path.exists(), f"udf not found ({path.string})"
|
|
92
|
-
else:
|
|
93
|
-
DEFAULT_LOGGER.debug(f"could not check if udf exists ({path.string})")
|
|
94
94
|
|
|
95
95
|
spec = importlib.util.spec_from_file_location(udf, path.string)
|
|
96
96
|
assert spec, f"no valid udf found ({path.string})"
|
|
@@ -579,6 +579,14 @@ class Table(DbObject):
|
|
|
579
579
|
|
|
580
580
|
return self.spark.sql(f"describe detail {self.qualified_name}")
|
|
581
581
|
|
|
582
|
+
def get_partitions(self) -> List[str]:
|
|
583
|
+
assert self.registered, f"{self} not registered"
|
|
584
|
+
|
|
585
|
+
try:
|
|
586
|
+
return self.spark.sql(f"show partitions {self.qualified_name}").columns
|
|
587
|
+
except AnalysisException:
|
|
588
|
+
return []
|
|
589
|
+
|
|
582
590
|
def get_properties(self) -> DataFrame:
|
|
583
591
|
assert self.registered, f"{self} not registered"
|
|
584
592
|
|
|
@@ -7,5 +7,14 @@
|
|
|
7
7
|
"BEL_RestoredDateUtc": null,
|
|
8
8
|
"BEL_IsFullLoad": true,
|
|
9
9
|
"BEL_UpdateDateUtc": "2022-01-01 01:00:00"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"@Id": 6004,
|
|
13
|
+
"Näàme": "Gabriel",
|
|
14
|
+
"double Field!": 0.19000102,
|
|
15
|
+
"BEL_DeleteDateUtc": null,
|
|
16
|
+
"BEL_RestoredDateUtc": null,
|
|
17
|
+
"BEL_IsFullLoad": true,
|
|
18
|
+
"BEL_UpdateDateUtc": "2022-01-01 01:00:00"
|
|
10
19
|
}
|
|
11
20
|
]
|
|
@@ -65,6 +65,7 @@ def test_semantic_fact_zstd():
|
|
|
65
65
|
@pytest.mark.order(139)
|
|
66
66
|
def test_semantic_fact_powerbi():
|
|
67
67
|
j = get_job(step="semantic", topic="fact", item="powerbi")
|
|
68
|
+
|
|
68
69
|
props_df = j.table.show_properties()
|
|
69
70
|
assert props_df.where("key == 'delta.minReaderVersion'").select("value").collect()[0][0] == "2", (
|
|
70
71
|
"minReaderVersion <> 2"
|
|
@@ -72,3 +73,7 @@ def test_semantic_fact_powerbi():
|
|
|
72
73
|
assert props_df.where("key == 'delta.minWriterVersion'").select("value").collect()[0][0] == "5", (
|
|
73
74
|
"minWriterVersion <> 5"
|
|
74
75
|
)
|
|
76
|
+
|
|
77
|
+
partitions = j.table.get_partitions()
|
|
78
|
+
assert len(partitions) == 1, "partition not found"
|
|
79
|
+
assert partitions[0].lower() == "monarch", "partition <> monarch"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Databricks notebook source
|
|
2
|
+
# MAGIC %run ./add_missing_modules
|
|
3
|
+
|
|
4
|
+
# COMMAND ----------
|
|
5
|
+
|
|
6
|
+
from logging import DEBUG
|
|
7
|
+
|
|
8
|
+
from databricks.sdk.runtime import dbutils, spark
|
|
9
|
+
|
|
10
|
+
from fabricks.context import CATALOG
|
|
11
|
+
from fabricks.context.log import DEFAULT_LOGGER
|
|
12
|
+
from tests.integration._types import paths
|
|
13
|
+
from tests.integration.utils import git_to_landing, landing_to_raw
|
|
14
|
+
|
|
15
|
+
# COMMAND ----------
|
|
16
|
+
|
|
17
|
+
DEFAULT_LOGGER.setLevel(DEBUG)
|
|
18
|
+
|
|
19
|
+
# COMMAND ----------
|
|
20
|
+
|
|
21
|
+
if CATALOG:
|
|
22
|
+
try:
|
|
23
|
+
spark.sql(f"use catalog {CATALOG}")
|
|
24
|
+
spark.sql("drop schema if exists bronze cascade")
|
|
25
|
+
spark.sql("create schema bronze")
|
|
26
|
+
|
|
27
|
+
except Exception:
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
# COMMAND ----------
|
|
31
|
+
|
|
32
|
+
paths.landing.rm()
|
|
33
|
+
git_to_landing()
|
|
34
|
+
|
|
35
|
+
# COMMAND ----------
|
|
36
|
+
|
|
37
|
+
paths.raw.rm()
|
|
38
|
+
landing_to_raw(1)
|
|
39
|
+
|
|
40
|
+
# COMMAND ----------
|
|
41
|
+
|
|
42
|
+
paths.out.rm()
|
|
43
|
+
|
|
44
|
+
# COMMAND ----------
|
|
45
|
+
|
|
46
|
+
dbutils.notebook.exit(value="exit (0)") # type: ignore
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import re
|
|
2
3
|
from typing import Any, List, Union, cast
|
|
3
4
|
|
|
4
5
|
import pandas as pd
|
|
@@ -22,7 +23,7 @@ def create_random_tables():
|
|
|
22
23
|
spark.sql(f"create table if not exists bronze.princess_no_column using delta location '{uri}'")
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
def convert_parquet_to_delta(topic: str):
|
|
26
|
+
def convert_parquet_to_delta(topic: str, deletelog: bool = True):
|
|
26
27
|
for i in range(1, 4):
|
|
27
28
|
dfs = []
|
|
28
29
|
|
|
@@ -30,7 +31,11 @@ def convert_parquet_to_delta(topic: str):
|
|
|
30
31
|
if i > 1:
|
|
31
32
|
root = root.joinpath(str(i))
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
_paths = [topic]
|
|
35
|
+
if deletelog:
|
|
36
|
+
_paths.append(f"{topic}__deletelog")
|
|
37
|
+
|
|
38
|
+
for p in _paths:
|
|
34
39
|
df = (
|
|
35
40
|
spark.read.option("pathGlobFilter", "*.parquet")
|
|
36
41
|
.option("recursiveFileLookup", "True")
|
|
@@ -59,7 +64,13 @@ def convert_parquet_to_delta(topic: str):
|
|
|
59
64
|
)
|
|
60
65
|
df = df.withColumn("__timestamp", expr("to_timestamp(__timestamp, 'yyyyMMddHHmmss')"))
|
|
61
66
|
df = df.drop("__split", "__split_size", "__file_path", "__file_name")
|
|
62
|
-
|
|
67
|
+
|
|
68
|
+
writer = df.write.mode("append").option("mergeSchema", "True").format("delta")
|
|
69
|
+
|
|
70
|
+
if any(not re.match(r"^[a-zA-Z0-9_]+$", c) for c in df.columns):
|
|
71
|
+
writer = writer.option("delta.columnMapping.mode", "name")
|
|
72
|
+
|
|
73
|
+
writer.save(f"{root}/delta/{topic}")
|
|
63
74
|
|
|
64
75
|
|
|
65
76
|
def convert_json_to_parquet(from_dir: Path, to_dir: Path):
|
|
@@ -128,6 +139,7 @@ def landing_to_raw(iter: Union[int, List[int]]):
|
|
|
128
139
|
|
|
129
140
|
convert_parquet_to_delta("regent")
|
|
130
141
|
convert_parquet_to_delta("monarch")
|
|
142
|
+
convert_parquet_to_delta("prince", deletelog=False)
|
|
131
143
|
|
|
132
144
|
|
|
133
145
|
def create_expected_views():
|
|
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
|
|
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
|