fabricks 3.0.3__tar.gz → 3.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. {fabricks-3.0.3 → fabricks-3.0.5}/PKG-INFO +2 -1
  2. fabricks-3.0.5/fabricks/api/version.py +3 -0
  3. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/configurator.py +4 -0
  4. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/generator.py +8 -18
  5. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/merger.py +1 -1
  6. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/processor.py +11 -6
  7. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/_types.py +13 -13
  8. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/configurator.py +0 -1
  9. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/generator.py +27 -25
  10. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/table.py +59 -35
  11. {fabricks-3.0.3 → fabricks-3.0.5}/pyproject.toml +2 -1
  12. fabricks-3.0.5/tests/integration/runtime/gold/transf/fact/memory.sql +1 -0
  13. {fabricks-3.0.3 → fabricks-3.0.5}/uv.lock +1580 -1579
  14. {fabricks-3.0.3 → fabricks-3.0.5}/.gitignore +0 -0
  15. {fabricks-3.0.3 → fabricks-3.0.5}/.gitkeep +0 -0
  16. {fabricks-3.0.3 → fabricks-3.0.5}/.python-version +0 -0
  17. {fabricks-3.0.3 → fabricks-3.0.5}/README.md +0 -0
  18. {fabricks-3.0.3 → fabricks-3.0.5}/databricks.yml +0 -0
  19. {fabricks-3.0.3 → fabricks-3.0.5}/docs/helpers/init.md +0 -0
  20. {fabricks-3.0.3 → fabricks-3.0.5}/docs/helpers/job.md +0 -0
  21. {fabricks-3.0.3 → fabricks-3.0.5}/docs/helpers/runtime.md +0 -0
  22. {fabricks-3.0.3 → fabricks-3.0.5}/docs/helpers/schedule.md +0 -0
  23. {fabricks-3.0.3 → fabricks-3.0.5}/docs/helpers/step.md +0 -0
  24. {fabricks-3.0.3 → fabricks-3.0.5}/docs/index.md +0 -0
  25. {fabricks-3.0.3 → fabricks-3.0.5}/docs/introduction/layers.md +0 -0
  26. {fabricks-3.0.3 → fabricks-3.0.5}/docs/introduction/overview.md +0 -0
  27. {fabricks-3.0.3 → fabricks-3.0.5}/docs/reference/cdc.md +0 -0
  28. {fabricks-3.0.3 → fabricks-3.0.5}/docs/reference/checks-data-quality.md +0 -0
  29. {fabricks-3.0.3 → fabricks-3.0.5}/docs/reference/extenders-udfs-parsers.md +0 -0
  30. {fabricks-3.0.3 → fabricks-3.0.5}/docs/reference/table-options.md +0 -0
  31. {fabricks-3.0.3 → fabricks-3.0.5}/docs/steps/BRONZE.md +0 -0
  32. {fabricks-3.0.3 → fabricks-3.0.5}/docs/steps/GOLD.md +0 -0
  33. {fabricks-3.0.3 → fabricks-3.0.5}/docs/steps/SILVER.md +0 -0
  34. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/__init__.py +0 -0
  35. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/__init__.py +0 -0
  36. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/cdc/__init__.py +0 -0
  37. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/cdc/nocdc.py +0 -0
  38. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/cdc/scd1.py +0 -0
  39. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/cdc/scd2.py +0 -0
  40. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/context.py +0 -0
  41. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/core.py +0 -0
  42. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/exceptions.py +0 -0
  43. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/extenders.py +0 -0
  44. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/job_schema.py +0 -0
  45. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/log.py +0 -0
  46. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/metastore/__init__.py +0 -0
  47. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/metastore/database.py +0 -0
  48. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/metastore/table.py +0 -0
  49. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/metastore/view.py +0 -0
  50. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/__init__.py +0 -0
  51. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/add_fabricks.py +0 -0
  52. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/cluster.py +0 -0
  53. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/initialize.py +0 -0
  54. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/optimize.py +0 -0
  55. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/process.py +0 -0
  56. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/run.py +0 -0
  57. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/terminate.py +0 -0
  58. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/notebooks/vacuum.py +0 -0
  59. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/parsers.py +0 -0
  60. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/schedules.py +0 -0
  61. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/udfs.py +0 -0
  62. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/utils.py +0 -0
  63. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/api/views.py +0 -0
  64. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/__init__.py +0 -0
  65. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/__init__.py +0 -0
  66. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/_types.py +0 -0
  67. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/base/cdc.py +0 -0
  68. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/cdc.py +0 -0
  69. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/nocdc.py +0 -0
  70. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/scd.py +0 -0
  71. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/scd1.py +0 -0
  72. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/scd2.py +0 -0
  73. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/__init__.py +0 -0
  74. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/filter/final.sql.jinja +0 -0
  75. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/filter/latest.sql.jinja +0 -0
  76. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/filter/update.sql.jinja +0 -0
  77. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/filter.sql.jinja +0 -0
  78. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/merge/scd1.sql.jinja +0 -0
  79. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/merge/scd2.sql.jinja +0 -0
  80. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/merge.sql.jinja +0 -0
  81. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/__init__.py +0 -0
  82. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/base.sql.jinja +0 -0
  83. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/context.sql.jinja +0 -0
  84. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/current.sql.jinja +0 -0
  85. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/deduplicate_hash.sql.jinja +0 -0
  86. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/deduplicate_key.sql.jinja +0 -0
  87. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/final.sql.jinja +0 -0
  88. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/hash.sql.jinja +0 -0
  89. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/nocdc.sql.jinja +0 -0
  90. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/rectify.sql.jinja +0 -0
  91. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/scd1.sql.jinja +0 -0
  92. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/scd2.sql.jinja +0 -0
  93. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query/slice.sql.jinja +0 -0
  94. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/cdc/templates/query.sql.jinja +0 -0
  95. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/__init__.py +0 -0
  96. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/base.py +0 -0
  97. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/fabricks/__init__.py +0 -0
  98. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/fabricks/base.py +0 -0
  99. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/fabricks/environment.py +0 -0
  100. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/fabricks/pyproject.py +0 -0
  101. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/jobs/__init__.py +0 -0
  102. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/jobs/base.py +0 -0
  103. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/jobs/bronze.py +0 -0
  104. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/jobs/gold.py +0 -0
  105. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/jobs/silver.py +0 -0
  106. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/runtime.py +0 -0
  107. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/steps/__init__.py +0 -0
  108. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/steps/base.py +0 -0
  109. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/steps/bronze.py +0 -0
  110. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/steps/gold.py +0 -0
  111. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/config/steps/silver.py +0 -0
  112. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/__init__.py +0 -0
  113. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/_types.py +0 -0
  114. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/log.py +0 -0
  115. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/runtime.py +0 -0
  116. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/secret.py +0 -0
  117. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/context/spark_session.py +0 -0
  118. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/__init__.py +0 -0
  119. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/__init__.py +0 -0
  120. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/base.py +0 -0
  121. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/generator.py +0 -0
  122. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/log.py +0 -0
  123. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/processor.py +0 -0
  124. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/run.py +0 -0
  125. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/terminator.py +0 -0
  126. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/dags/utils.py +0 -0
  127. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/deploy/__init__.py +0 -0
  128. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/deploy/tables.py +0 -0
  129. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/deploy/udfs.py +0 -0
  130. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/deploy/views.py +0 -0
  131. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/extenders.py +0 -0
  132. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/__init__.py +0 -0
  133. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/__init__.py +0 -0
  134. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/checker.py +0 -0
  135. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/exception.py +0 -0
  136. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/invoker.py +0 -0
  137. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/job.py +0 -0
  138. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/base/processor.py +0 -0
  139. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/bronze.py +0 -0
  140. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/get_job.py +0 -0
  141. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/get_job_conf.py +0 -0
  142. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/get_job_id.py +0 -0
  143. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/get_jobs.py +0 -0
  144. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/gold.py +0 -0
  145. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/jobs/silver.py +0 -0
  146. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/parsers/__init__.py +0 -0
  147. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/parsers/_types.py +0 -0
  148. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/parsers/base.py +0 -0
  149. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/parsers/decorator.py +0 -0
  150. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/parsers/get_parser.py +0 -0
  151. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/schedules.py +0 -0
  152. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/__init__.py +0 -0
  153. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/armageddon.py +0 -0
  154. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/generate.py +0 -0
  155. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/job_schema.py +0 -0
  156. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/process.py +0 -0
  157. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/stats.py +0 -0
  158. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/steps.py +0 -0
  159. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/scripts/terminate.py +0 -0
  160. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/steps/__init__.py +0 -0
  161. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/steps/_types.py +0 -0
  162. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/steps/base.py +0 -0
  163. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/steps/get_step.py +0 -0
  164. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/steps/get_step_conf.py +0 -0
  165. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/udfs.py +0 -0
  166. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/utils.py +0 -0
  167. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/core/views.py +0 -0
  168. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/README.md +0 -0
  169. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/__init__.py +0 -0
  170. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/_types.py +0 -0
  171. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/database.py +0 -0
  172. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/dbobject.py +0 -0
  173. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/pyproject.toml +0 -0
  174. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/utils.py +0 -0
  175. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/metastore/view.py +0 -0
  176. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/__init__.py +0 -0
  177. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/azure_queue.py +0 -0
  178. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/azure_table.py +0 -0
  179. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/console.py +0 -0
  180. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/fdict.py +0 -0
  181. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/helpers.py +0 -0
  182. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/log.py +0 -0
  183. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/path.py +0 -0
  184. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/pip.py +0 -0
  185. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/pydantic.py +0 -0
  186. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/read/__init__.py +0 -0
  187. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/read/_types.py +0 -0
  188. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/read/read.py +0 -0
  189. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/read/read_excel.py +0 -0
  190. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/read/read_yaml.py +0 -0
  191. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/schema/__init__.py +0 -0
  192. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
  193. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/schema/get_schema_for_type.py +0 -0
  194. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/spark.py +0 -0
  195. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/sqlglot.py +0 -0
  196. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/write/__init__.py +0 -0
  197. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/write/delta.py +0 -0
  198. {fabricks-3.0.3 → fabricks-3.0.5}/fabricks/utils/write/stream.py +0 -0
  199. {fabricks-3.0.3 → fabricks-3.0.5}/format.sh +0 -0
  200. {fabricks-3.0.3 → fabricks-3.0.5}/mkdocs.yml +0 -0
  201. {fabricks-3.0.3 → fabricks-3.0.5}/tests/__init__.py +0 -0
  202. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/__init__.py +0 -0
  203. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/_types.py +0 -0
  204. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/add_fabricks.py +0 -0
  205. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/armageddon.py +0 -0
  206. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/compare.py +0 -0
  207. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
  208. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
  209. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
  210. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +0 -0
  211. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
  212. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
  213. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
  214. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
  215. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
  216. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
  217. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
  218. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
  219. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
  220. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
  221. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
  222. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
  223. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
  224. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
  225. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
  226. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
  227. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
  228. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
  229. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
  230. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
  231. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
  232. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
  233. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
  234. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
  235. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
  236. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
  237. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
  238. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
  239. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
  240. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
  241. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
  242. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
  243. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
  244. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
  245. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
  246. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
  247. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
  248. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
  249. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
  250. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
  251. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
  252. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
  253. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
  254. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
  255. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job01.sql +0 -0
  256. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job02.sql +0 -0
  257. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job03.sql +0 -0
  258. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job04.sql +0 -0
  259. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job05.sql +0 -0
  260. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job06.sql +0 -0
  261. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job07.sql +0 -0
  262. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job08.sql +0 -0
  263. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job09.sql +0 -0
  264. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job10.sql +0 -0
  265. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd1/job11.sql +0 -0
  266. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job01.sql +0 -0
  267. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job02.sql +0 -0
  268. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job03.sql +0 -0
  269. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job04.sql +0 -0
  270. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job05.sql +0 -0
  271. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job06.sql +0 -0
  272. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job07.sql +0 -0
  273. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job08.sql +0 -0
  274. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job09.sql +0 -0
  275. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job10.sql +0 -0
  276. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/gold/scd2/job11.sql +0 -0
  277. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job01.sql +0 -0
  278. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job02.sql +0 -0
  279. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job03.sql +0 -0
  280. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job04.sql +0 -0
  281. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job05.sql +0 -0
  282. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job06.sql +0 -0
  283. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job07.sql +0 -0
  284. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job08.sql +0 -0
  285. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job09.sql +0 -0
  286. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job10.sql +0 -0
  287. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd1/job11.sql +0 -0
  288. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job01.sql +0 -0
  289. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job02.sql +0 -0
  290. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job03.sql +0 -0
  291. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job04.sql +0 -0
  292. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job05.sql +0 -0
  293. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job06.sql +0 -0
  294. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job07.sql +0 -0
  295. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job08.sql +0 -0
  296. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job09.sql +0 -0
  297. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job10.sql +0 -0
  298. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/expected/silver/scd2/job11.sql +0 -0
  299. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/init.sh +0 -0
  300. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/initialize.py +0 -0
  301. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/__init__.py +0 -0
  302. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/__init__.py +0 -0
  303. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_cdc.py +0 -0
  304. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_check.py +0 -0
  305. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_dependency.py +0 -0
  306. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_gold.py +0 -0
  307. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_invoke.py +0 -0
  308. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_overwrite.py +0 -0
  309. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_schedule.py +0 -0
  310. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_semantic.py +0 -0
  311. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job1/test_silver.py +0 -0
  312. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job2/__init__.py +0 -0
  313. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job2/test_gold.py +0 -0
  314. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job2/test_run.py +0 -0
  315. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job2/test_semantic.py +0 -0
  316. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job2/test_silver.py +0 -0
  317. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job3/__init__.py +0 -0
  318. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job3/test_gold.py +0 -0
  319. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job3/test_run.py +0 -0
  320. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job3/test_silver.py +0 -0
  321. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job4/__init__.py +0 -0
  322. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job4/test_gold.py +0 -0
  323. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job4/test_run.py +0 -0
  324. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job5/__init__.py +0 -0
  325. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/jobs/job5/test_step.py +0 -0
  326. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/reset.py +0 -0
  327. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/run.py +0 -0
  328. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runjobs.py +0 -0
  329. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtests.py +0 -0
  330. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/.gitignore +0 -0
  331. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/__init__.py +0 -0
  332. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/add_fabricks.py +0 -0
  333. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
  334. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
  335. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
  336. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
  337. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
  338. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
  339. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
  340. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/conf.fabricks.yml +0 -0
  341. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +0 -0
  342. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/extenders/__init__.py +0 -0
  343. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
  344. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
  345. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
  346. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
  347. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/parsers/__init__.py +0 -0
  348. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/parsers/delete_log.py +0 -0
  349. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
  350. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/requirements.txt +0 -0
  351. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
  352. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
  353. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
  354. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
  355. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
  356. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
  357. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
  358. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
  359. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
  360. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
  361. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
  362. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
  363. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
  364. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
  365. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
  366. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
  367. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
  368. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
  369. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
  370. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
  371. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
  372. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
  373. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
  374. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
  375. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +0 -0
  376. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
  377. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
  378. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +0 -0
  379. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
  380. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
  381. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
  382. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +0 -0
  383. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
  384. /fabricks-3.0.3/tests/integration/runtime/gold/gold/fact/overwrite.sql → /fabricks-3.0.5/tests/integration/runtime/gold/gold/fact/option_b.sql +0 -0
  385. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
  386. /fabricks-3.0.3/tests/integration/runtime/gold/transf/fact/memory.sql → /fabricks-3.0.5/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
  387. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
  388. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
  389. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
  390. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
  391. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
  392. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
  393. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
  394. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
  395. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/post_run.sql +0 -0
  396. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
  397. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
  398. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
  399. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +0 -0
  400. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +0 -0
  401. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
  402. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
  403. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
  404. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
  405. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
  406. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
  407. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
  408. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
  409. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
  410. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
  411. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
  412. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
  413. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
  414. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
  415. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
  416. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/gold/transf/post_run.py +0 -0
  417. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/job-schema.json +0 -0
  418. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/_config.semantic.yml +0 -0
  419. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
  420. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
  421. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
  422. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
  423. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
  424. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
  425. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.memory.yml +0 -0
  426. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
  427. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.princes.yml +0 -0
  428. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
  429. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/silver/_config.regents.yml +0 -0
  430. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
  431. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
  432. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
  433. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.princes.yml +0 -0
  434. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
  435. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
  436. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
  437. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/schedule.py +0 -0
  438. {fabricks-3.0.3 → fabricks-3.0.5}/tests/integration/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricks
3
- Version: 3.0.3
3
+ Version: 3.0.5
4
4
  Author-email: BMS DWH Team <bi_support@bmsuisse.ch>
5
5
  Requires-Python: <4,>=3.9
6
6
  Requires-Dist: azure-data-tables<13,>=12.5.0
@@ -8,6 +8,7 @@ Requires-Dist: azure-identity>=1.10.0
8
8
  Requires-Dist: azure-storage-blob>=12.14.1
9
9
  Requires-Dist: azure-storage-queue<13,>=12.10.0
10
10
  Requires-Dist: databricks-sdk>=0.20.0
11
+ Requires-Dist: importlib-metadata>=8.6.1
11
12
  Requires-Dist: jinja2>=2.11.3
12
13
  Requires-Dist: pydantic-settings
13
14
  Requires-Dist: pydantic-yaml>=1.4.0
@@ -0,0 +1,3 @@
1
+ import importlib.metadata
2
+
3
+ FABRICKS_VERSION = importlib.metadata.version("fabricks")
@@ -37,6 +37,10 @@ class Configurator(ABC):
37
37
  def is_registered(self):
38
38
  return self.table.is_registered
39
39
 
40
+ @property
41
+ def qualified_name(self):
42
+ return f"{self.database}_{'_'.join(self.levels)}"
43
+
40
44
  @abstractmethod
41
45
  def get_query(self, src: Union[DataFrame, Table, str], **kwargs):
42
46
  raise NotImplementedError()
@@ -34,10 +34,8 @@ class Generator(Configurator):
34
34
 
35
35
  df = self.get_data(src, **kwargs)
36
36
 
37
- if liquid_clustering:
38
- assert cluster_by, "clustering column not found"
39
- elif partitioning:
40
- assert partition_by, "partitioning column not found"
37
+ if partitioning is True:
38
+ assert partition_by, "partitioning column(s) not found"
41
39
 
42
40
  df = self.reorder_columns(df)
43
41
 
@@ -84,22 +82,14 @@ class Generator(Configurator):
84
82
  DEFAULT_LOGGER.exception("could not execute sql query", extra={"job": self, "sql": sql})
85
83
 
86
84
  def optimize_table(self):
87
- liquid_clustering = self.table.get_property("delta.feature.liquid") == "supported"
85
+ columns = None
88
86
 
89
- if liquid_clustering:
90
- self.table.optimize()
91
- else:
92
- columns = None
93
-
94
- if self.change_data_capture == "scd1":
95
- columns = ["__key"]
96
- elif self.change_data_capture == "scd2":
97
- columns = ["__key", "__valid_from"]
98
-
99
- vorder = self.table.get_property("delta.parquet.vorder.enabled") or "false"
100
- vorder = vorder.lower() == "true"
87
+ if self.change_data_capture == "scd1":
88
+ columns = ["__key"]
89
+ elif self.change_data_capture == "scd2":
90
+ columns = ["__key", "__valid_from"]
101
91
 
102
- self.table.optimize(columns=columns, vorder=vorder)
92
+ self.table.optimize(columns=columns)
103
93
 
104
94
  def get_differences_with_deltatable(self, src: Union[DataFrame, Table, str], **kwargs) -> Optional[DataFrame]:
105
95
  if self.is_view:
@@ -101,7 +101,7 @@ class Merger(Processor):
101
101
  self.create_table(src, **kwargs)
102
102
 
103
103
  df = self.get_data(src, **kwargs)
104
- global_temp_view = f"{self.database}_{'_'.join(self.levels)}__merge"
104
+ global_temp_view = f"{self.qualified_name}__merge"
105
105
  view = create_or_replace_global_temp_view(global_temp_view, df, uuid=kwargs.get("uuid", False))
106
106
 
107
107
  merge = self.get_merge_query(view, **kwargs)
@@ -16,7 +16,7 @@ from fabricks.utils.sqlglot import fix as fix_sql
16
16
  class Processor(Generator):
17
17
  def get_data(self, src: Union[DataFrame, Table, str], **kwargs) -> DataFrame:
18
18
  if isinstance(src, (DataFrame, CDataFrame)):
19
- name = f"{self.database}_{'_'.join(self.levels)}__data"
19
+ name = f"{self.qualified_name}__data"
20
20
  global_temp_view = create_or_replace_global_temp_view(name, src, uuid=kwargs.get("uuid", False))
21
21
  src = f"select * from {global_temp_view}"
22
22
 
@@ -347,8 +347,11 @@ class Processor(Generator):
347
347
  df = self.get_data(src, **kwargs)
348
348
  df = self.reorder_columns(df)
349
349
 
350
+ name = f"{self.qualified_name}__append"
351
+ create_or_replace_global_temp_view(name, df, uuid=kwargs.get("uuid", False))
352
+
350
353
  DEFAULT_LOGGER.debug("append", extra={"job": self})
351
- df.write.format("delta").mode("append").save(self.table.delta_path.string)
354
+ self.spark.sql(f"insert into table {self.table} by name select * from global_temp.{name}")
352
355
 
353
356
  def overwrite(
354
357
  self,
@@ -366,9 +369,11 @@ class Processor(Generator):
366
369
  if kwargs.get("update_where"):
367
370
  dynamic = True
368
371
 
369
- writer = df.write.format("delta").mode("overwrite")
370
372
  if dynamic:
371
- writer.option("partitionOverwriteMode", "dynamic")
373
+ self.spark.sql("set spark.sql.sources.partitionOverwriteMode = dynamic")
374
+
375
+ name = f"{self.qualified_name}__overwrite"
376
+ create_or_replace_global_temp_view(name, df, uuid=kwargs.get("uuid", False))
372
377
 
373
- DEFAULT_LOGGER.info("overwrite", extra={"job": self})
374
- writer.save(self.table.delta_path.string)
378
+ DEFAULT_LOGGER.debug("overwrite", extra={"job": self})
379
+ self.spark.sql(f"insert overwrite table {self.table} by name select * from global_temp.{name}")
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass
2
- from typing import Any, List, Literal, Optional, TypedDict, Union
2
+ from typing import List, Literal, Optional, TypedDict, Union
3
3
 
4
4
  from pydantic import BaseModel, ConfigDict, model_validator
5
5
  from pyspark.sql.types import StringType, StructField, StructType
@@ -33,8 +33,8 @@ Origins = Literal["parser", "job"]
33
33
 
34
34
 
35
35
  class SparkOptions(TypedDict):
36
- sql: Optional[dict[Any, Any]]
37
- conf: Optional[dict[Any, Any]]
36
+ sql: Optional[dict[str, str]]
37
+ conf: Optional[dict[str, str]]
38
38
 
39
39
 
40
40
  class TableOptions(TypedDict):
@@ -45,17 +45,17 @@ class TableOptions(TypedDict):
45
45
  cluster_by: Optional[List[str]]
46
46
  powerbi: Optional[bool]
47
47
  bloomfilter_by: Optional[List[str]]
48
- constraints: Optional[dict[Any, Any]]
49
- properties: Optional[dict[Any, Any]]
48
+ constraints: Optional[dict[str, str]]
49
+ properties: Optional[dict[str, str]]
50
50
  comment: Optional[str]
51
- calculated_columns: Optional[dict[Any, Any]]
51
+ calculated_columns: Optional[dict[str, str]]
52
52
  retention_days: Optional[int]
53
53
 
54
54
 
55
55
  class _InvokeOptions(TypedDict):
56
56
  notebook: str
57
57
  timeout: int
58
- arguments: Optional[dict[Any, Any]]
58
+ arguments: Optional[dict[str, str]]
59
59
 
60
60
 
61
61
  class InvokerOptions(TypedDict):
@@ -66,7 +66,7 @@ class InvokerOptions(TypedDict):
66
66
 
67
67
  class ExtenderOptions(TypedDict):
68
68
  extender: str
69
- arguments: Optional[dict[Any, Any]]
69
+ arguments: Optional[dict[str, str]]
70
70
 
71
71
 
72
72
  class CheckOptions(TypedDict):
@@ -90,7 +90,7 @@ class BronzeOptions(TypedDict):
90
90
  filter_where: Optional[str]
91
91
  # extra
92
92
  encrypted_columns: Optional[List[str]]
93
- calculated_columns: Optional[dict[Any, Any]]
93
+ calculated_columns: Optional[dict[str, str]]
94
94
  operation: Optional[Operations]
95
95
  timeout: Optional[int]
96
96
 
@@ -106,7 +106,7 @@ class SilverOptions(TypedDict):
106
106
  deduplicate: Optional[bool]
107
107
  stream: Optional[bool]
108
108
  # else
109
- order_duplicate_by: Optional[dict[Any, Any]]
109
+ order_duplicate_by: Optional[dict[str, str]]
110
110
  timeout: Optional[int]
111
111
 
112
112
 
@@ -141,7 +141,7 @@ class BaseJobConf:
141
141
 
142
142
  @dataclass
143
143
  class JobConfBronze(BaseJobConf):
144
- step: str
144
+ step: TBronze
145
145
  options: BronzeOptions
146
146
  table_options: Optional[TableOptions] = None
147
147
  parser_options: Optional[ParserOptions] = None
@@ -155,7 +155,7 @@ class JobConfBronze(BaseJobConf):
155
155
 
156
156
  @dataclass
157
157
  class JobConfSilver(BaseJobConf):
158
- step: str
158
+ step: TSilver
159
159
  options: SilverOptions
160
160
  table_options: Optional[TableOptions] = None
161
161
  check_options: Optional[CheckOptions] = None
@@ -168,7 +168,7 @@ class JobConfSilver(BaseJobConf):
168
168
 
169
169
  @dataclass
170
170
  class JobConfGold(BaseJobConf):
171
- step: str
171
+ step: TGold
172
172
  options: Optional[GoldOptions]
173
173
  table_options: Optional[TableOptions] = None
174
174
  check_options: Optional[CheckOptions] = None
@@ -54,7 +54,6 @@ class Configurator(ABC):
54
54
  _cdc: Optional[Union[NoCDC, SCD1, SCD2]] = None
55
55
  _change_data_capture: Optional[ChangeDataCaptures] = None
56
56
  _mode: Optional[Modes] = None
57
- _liquid_clustering: Optional[bool] = False
58
57
 
59
58
  @property
60
59
  @abstractmethod
@@ -209,33 +209,38 @@ class Generator(Configurator):
209
209
  identity = self.options.table.get_boolean("identity", False)
210
210
 
211
211
  # first take from job options, then from step options
212
- liquid_clustering_job = self.options.table.get_boolean("liquid_clustering", None)
212
+ liquid_clustering_job = self.options.table.get("liquid_clustering", None)
213
213
  liquid_clustering_step = self.step_conf.get("table_options", {}).get("liquid_clustering", None)
214
214
  if liquid_clustering_job is not None:
215
215
  liquid_clustering = liquid_clustering_job
216
216
  elif liquid_clustering_step:
217
217
  liquid_clustering = liquid_clustering_step
218
218
 
219
- if liquid_clustering:
220
- cluster_by = self.options.table.get_list("cluster_by") or []
221
- if not cluster_by:
222
- if "__source" in df.columns:
223
- cluster_by.append("__source")
224
- if "__is_current" in df.columns:
225
- cluster_by.append("__is_current")
226
- if "__key" in df.columns:
227
- cluster_by.append("__key")
228
- elif "__hash" in df.columns:
229
- cluster_by.append("__hash")
230
-
231
- if not cluster_by:
232
- DEFAULT_LOGGER.warning(
233
- "liquid clustering disabled (no clustering columns found)", extra={"job": self}
234
- )
235
- liquid_clustering = False
236
- cluster_by = None
219
+ if liquid_clustering is not None:
220
+ if liquid_clustering == "auto":
221
+ liquid_clustering = True
222
+ cluster_by = []
237
223
 
238
- if not liquid_clustering:
224
+ else:
225
+ cluster_by = self.options.table.get_list("cluster_by") or []
226
+ if not cluster_by:
227
+ if "__source" in df.columns:
228
+ cluster_by.append("__source")
229
+ if "__is_current" in df.columns:
230
+ cluster_by.append("__is_current")
231
+ if "__key" in df.columns:
232
+ cluster_by.append("__key")
233
+ elif "__hash" in df.columns:
234
+ cluster_by.append("__hash")
235
+
236
+ if not cluster_by:
237
+ DEFAULT_LOGGER.warning(
238
+ "liquid clustering disabled (no clustering columns found)", extra={"job": self}
239
+ )
240
+ liquid_clustering = False
241
+ cluster_by = None
242
+
243
+ if liquid_clustering is None:
239
244
  cluster_by = None
240
245
  partition_by = self.options.table.get_list("partition_by")
241
246
  if partition_by:
@@ -404,11 +409,8 @@ class Generator(Configurator):
404
409
  cluster_by.append("__hash")
405
410
 
406
411
  if len(cluster_by) > 0:
407
- self.table.enable_liquid_clustering(cluster_by)
412
+ self.table.enable_liquid_clustering(cluster_by, auto=False)
408
413
  else:
409
- DEFAULT_LOGGER.warning(
410
- "liquid clustering not enabled (no clustering column found)", extra={"job": self}
411
- )
412
-
414
+ self.table.enable_liquid_clustering(auto=True)
413
415
  else:
414
416
  DEFAULT_LOGGER.debug("liquid clustering not enabled", extra={"job": self})
@@ -65,15 +65,28 @@ class Table(DbObject):
65
65
  @property
66
66
  def identity_enabled(self) -> bool:
67
67
  assert self.is_registered, f"{self} not registered"
68
-
69
68
  return self.get_property("delta.feature.identityColumns") == "supported"
70
69
 
71
70
  @property
72
71
  def type_widening_enabled(self) -> bool:
73
72
  assert self.is_registered, f"{self} not registered"
74
-
75
73
  return self.get_property("delta.enableTypeWidening") == "true"
76
74
 
75
+ @property
76
+ def liquid_clustering_enabled(self) -> bool:
77
+ assert self.is_registered, f"{self} not registered"
78
+ return self.get_property("delta.feature.clustering") == "supported"
79
+
80
+ @property
81
+ def auto_liquid_clustering_enabled(self) -> bool:
82
+ assert self.is_registered, f"{self} not registered"
83
+ return self.get_property("delta.clusterByAuto") == "true"
84
+
85
+ @property
86
+ def vorder_enabled(self) -> bool:
87
+ assert self.is_registered, f"{self} not registered"
88
+ return self.get_property("delta.parquet.vorder.enabled") == "true"
89
+
77
90
  def drop(self):
78
91
  super().drop()
79
92
  if self.delta_path.exists():
@@ -160,11 +173,14 @@ class Table(DbObject):
160
173
  ddl_tblproperties = "-- not tblproperties"
161
174
 
162
175
  if liquid_clustering:
163
- assert cluster_by
164
- if isinstance(cluster_by, str):
165
- cluster_by = [cluster_by]
166
- cluster_by = [f"`{c}`" for c in cluster_by]
167
- ddl_cluster_by = "cluster by (" + ", ".join(cluster_by) + ")"
176
+ if cluster_by:
177
+ if isinstance(cluster_by, str):
178
+ cluster_by = [cluster_by]
179
+ cluster_by = [f"`{c}`" for c in cluster_by]
180
+ ddl_cluster_by = "cluster by (" + ", ".join(cluster_by) + ")"
181
+
182
+ else:
183
+ ddl_cluster_by = "cluster by auto"
168
184
 
169
185
  if partitioning:
170
186
  assert partition_by
@@ -388,37 +404,38 @@ class Table(DbObject):
388
404
  pass
389
405
  self.spark.sql("SET self.spark.databricks.delta.retentionDurationCheck.enabled = True")
390
406
 
391
- def optimize(
392
- self,
393
- columns: Optional[Union[str, List[str]]] = None,
394
- vorder: Optional[bool] = False,
395
- ):
407
+ def optimize(self, columns: Optional[Union[str, List[str]]] = None):
396
408
  assert self.is_registered, f"{self} not registered"
397
409
 
398
410
  DEFAULT_LOGGER.info("optimize", extra={"job": self})
399
411
 
400
- zorder_by = columns is not None
401
- if zorder_by:
412
+ if self.liquid_clustering_enabled:
413
+ self.spark.sql(f"optimize {self.qualified_name}")
414
+
415
+ elif self.auto_liquid_clustering_enabled:
416
+ self.spark.sql(f"optimize {self.qualified_name}")
417
+
418
+ elif columns is None:
419
+ if self.vorder_enabled:
420
+ DEFAULT_LOGGER.debug("vorder", extra={"job": self})
421
+ self.spark.sql(f"optimize {self.qualified_name} vorder")
422
+ else:
423
+ self.spark.sql(f"optimize {self.qualified_name}")
424
+
425
+ else:
402
426
  if isinstance(columns, str):
403
427
  columns = [columns]
404
428
  columns = [f"`{c}`" for c in columns]
405
429
  cols = ", ".join(columns)
406
430
 
407
- if vorder:
431
+ if self.vorder_enabled:
408
432
  DEFAULT_LOGGER.debug(f"zorder by {cols} vorder", extra={"job": self})
409
433
  self.spark.sql(f"optimize {self.qualified_name} zorder by ({cols}) vorder")
434
+
410
435
  else:
411
436
  DEFAULT_LOGGER.debug(f"zorder by {cols}", extra={"job": self})
412
437
  self.spark.sql(f"optimize {self.qualified_name} zorder by ({cols})")
413
438
 
414
- elif vorder:
415
- DEFAULT_LOGGER.debug("vorder", extra={"job": self})
416
- self.spark.sql(f"optimize {self.qualified_name} vorder")
417
-
418
- else:
419
- DEFAULT_LOGGER.debug("optimize", extra={"job": self})
420
- self.spark.sql(f"optimize {self.qualified_name}")
421
-
422
439
  def analyze(self):
423
440
  assert self.is_registered, f"{self} not registered"
424
441
 
@@ -658,18 +675,25 @@ class Table(DbObject):
658
675
  df = self.spark.sql(f"describe history {self.qualified_name}")
659
676
  return df
660
677
 
661
- def enable_liquid_clustering(self, columns: Union[str, List[str]]):
678
+ def enable_liquid_clustering(self, columns: Optional[Union[str, List[str]]] = None, auto: Optional[bool] = False):
662
679
  assert self.is_registered, f"{self} not registered"
663
680
 
664
- if isinstance(columns, str):
665
- columns = [columns]
666
- columns = [f"`{c}`" for c in columns]
667
- cols = ", ".join(columns)
668
- DEFAULT_LOGGER.info(f"cluster by {cols}", extra={"job": self})
681
+ if auto:
682
+ DEFAULT_LOGGER.info("cluster by auto", extra={"job": self})
683
+ self.spark.sql(f"alter table {self.qualified_name} cluster by automatic")
669
684
 
670
- self.spark.sql(
671
- f"""
672
- alter table {self.qualified_name}
673
- cluster by ({cols})
674
- """
675
- )
685
+ else:
686
+ assert columns, "at least one clustering column must be specified"
687
+
688
+ if isinstance(columns, str):
689
+ columns = [columns]
690
+ columns = [f"`{c}`" for c in columns]
691
+ cols = ", ".join(columns)
692
+
693
+ DEFAULT_LOGGER.info(f"cluster by {cols}", extra={"job": self})
694
+ self.spark.sql(
695
+ f"""
696
+ alter table {self.qualified_name}
697
+ cluster by ({cols})
698
+ """
699
+ )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fabricks"
3
- version = "3.0.3"
3
+ version = "3.0.5"
4
4
  description = ""
5
5
  authors = [
6
6
  { name = "BMS DWH Team", email = "bi_support@bmsuisse.ch" },
@@ -13,6 +13,7 @@ dependencies = [
13
13
  "azure-storage-blob >=12.14.1",
14
14
  "azure-storage-queue >=12.10.0,<13",
15
15
  "databricks-sdk >=0.20.0",
16
+ "importlib-metadata>=8.6.1",
16
17
  "jinja2 >=2.11.3",
17
18
  "pydantic>=1.10.21",
18
19
  "pydantic-settings",
@@ -0,0 +1 @@
1
+ select `id` as id, `name` as monarch, `doubleField` as value from silver.monarch_scd1__current