fabricks 3.0.15__tar.gz → 3.0.17__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 (459) hide show
  1. {fabricks-3.0.15 → fabricks-3.0.17}/PKG-INFO +1 -1
  2. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/configurator.py +2 -7
  3. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/processor.py +5 -0
  4. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/base.sql.jinja +6 -2
  5. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/context.sql.jinja +3 -0
  6. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/generator.py +41 -31
  7. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/bronze.py +6 -1
  8. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/masks.py +8 -5
  9. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/udfs.py +1 -1
  10. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/__init__.py +4 -4
  11. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/masks.py +2 -2
  12. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/tables.py +3 -3
  13. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/table.py +8 -0
  14. {fabricks-3.0.15 → fabricks-3.0.17}/format.sh +1 -1
  15. {fabricks-3.0.15 → fabricks-3.0.17}/pyproject.toml +1 -1
  16. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +9 -0
  17. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/fabricksconfig.json +1 -1
  18. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_semantic.py +5 -0
  19. fabricks-3.0.17/tests/integration/landing_to_raw.py +46 -0
  20. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/_config.semantic.yml +1 -0
  21. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.princes.yml +8 -0
  22. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.princes.yml +9 -0
  23. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/utils.py +15 -3
  24. {fabricks-3.0.15 → fabricks-3.0.17}/uv.lock +1 -1
  25. {fabricks-3.0.15 → fabricks-3.0.17}/.gitignore +0 -0
  26. {fabricks-3.0.15 → fabricks-3.0.17}/.gitkeep +0 -0
  27. {fabricks-3.0.15 → fabricks-3.0.17}/.python-version +0 -0
  28. {fabricks-3.0.15 → fabricks-3.0.17}/README.md +0 -0
  29. {fabricks-3.0.15 → fabricks-3.0.17}/databricks.yml +0 -0
  30. {fabricks-3.0.15 → fabricks-3.0.17}/docs/helpers/init.md +0 -0
  31. {fabricks-3.0.15 → fabricks-3.0.17}/docs/helpers/job.md +0 -0
  32. {fabricks-3.0.15 → fabricks-3.0.17}/docs/helpers/runtime.md +0 -0
  33. {fabricks-3.0.15 → fabricks-3.0.17}/docs/helpers/schedule.md +0 -0
  34. {fabricks-3.0.15 → fabricks-3.0.17}/docs/helpers/step.md +0 -0
  35. {fabricks-3.0.15 → fabricks-3.0.17}/docs/index.md +0 -0
  36. {fabricks-3.0.15 → fabricks-3.0.17}/docs/introduction/layers.md +0 -0
  37. {fabricks-3.0.15 → fabricks-3.0.17}/docs/introduction/overview.md +0 -0
  38. {fabricks-3.0.15 → fabricks-3.0.17}/docs/reference/cdc.md +0 -0
  39. {fabricks-3.0.15 → fabricks-3.0.17}/docs/reference/checks-data-quality.md +0 -0
  40. {fabricks-3.0.15 → fabricks-3.0.17}/docs/reference/extenders-udfs-parsers.md +0 -0
  41. {fabricks-3.0.15 → fabricks-3.0.17}/docs/reference/table-options.md +0 -0
  42. {fabricks-3.0.15 → fabricks-3.0.17}/docs/steps/BRONZE.md +0 -0
  43. {fabricks-3.0.15 → fabricks-3.0.17}/docs/steps/GOLD.md +0 -0
  44. {fabricks-3.0.15 → fabricks-3.0.17}/docs/steps/SILVER.md +0 -0
  45. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/__init__.py +0 -0
  46. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/__init__.py +0 -0
  47. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/cdc/__init__.py +0 -0
  48. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/cdc/nocdc.py +0 -0
  49. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/cdc/scd1.py +0 -0
  50. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/cdc/scd2.py +0 -0
  51. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/context.py +0 -0
  52. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/core.py +0 -0
  53. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/deploy.py +0 -0
  54. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/exceptions.py +0 -0
  55. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/extenders.py +0 -0
  56. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/job_schema.py +0 -0
  57. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/log.py +0 -0
  58. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/masks.py +0 -0
  59. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/metastore/__init__.py +0 -0
  60. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/metastore/database.py +0 -0
  61. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/metastore/table.py +0 -0
  62. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/metastore/view.py +0 -0
  63. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/__init__.py +0 -0
  64. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/cluster.py +0 -0
  65. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/initialize.py +0 -0
  66. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/process.py +0 -0
  67. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/run.py +0 -0
  68. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/schedule.py +0 -0
  69. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/notebooks/terminate.py +0 -0
  70. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/parsers.py +0 -0
  71. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/schedules.py +0 -0
  72. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/udfs.py +0 -0
  73. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/utils.py +0 -0
  74. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/version.py +0 -0
  75. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/api/views.py +0 -0
  76. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/__init__.py +0 -0
  77. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/__init__.py +0 -0
  78. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/_types.py +0 -0
  79. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/cdc.py +0 -0
  80. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/generator.py +0 -0
  81. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/base/merger.py +0 -0
  82. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/cdc.py +0 -0
  83. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/nocdc.py +0 -0
  84. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/scd.py +0 -0
  85. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/scd1.py +0 -0
  86. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/scd2.py +0 -0
  87. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/__init__.py +0 -0
  88. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/current.sql.jinja +0 -0
  89. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja +0 -0
  90. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja +0 -0
  91. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/rectify.sql.jinja +0 -0
  92. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/ctes/slice.sql.jinja +0 -0
  93. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/filter.sql.jinja +0 -0
  94. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/filters/final.sql.jinja +0 -0
  95. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/filters/latest.sql.jinja +0 -0
  96. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/filters/update.sql.jinja +0 -0
  97. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/macros/bactick.sql.jinja +0 -0
  98. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/macros/hash.sql.jinja +0 -0
  99. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/merge.sql.jinja +0 -0
  100. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/merges/nocdc.sql.jinja +0 -0
  101. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/merges/scd1.sql.jinja +0 -0
  102. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/merges/scd2.sql.jinja +0 -0
  103. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/__init__.py +0 -0
  104. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/final.sql.jinja +0 -0
  105. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/nocdc/complete.sql.jinja +0 -0
  106. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/nocdc/update.sql.jinja +0 -0
  107. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/scd1.sql.jinja +0 -0
  108. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/queries/scd2.sql.jinja +0 -0
  109. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/cdc/templates/query.sql.jinja +0 -0
  110. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/__init__.py +0 -0
  111. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/_types.py +0 -0
  112. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/config.py +0 -0
  113. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/helpers.py +0 -0
  114. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/log.py +0 -0
  115. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/runtime.py +0 -0
  116. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/secret.py +0 -0
  117. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/spark_session.py +0 -0
  118. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/context/utils.py +0 -0
  119. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/__init__.py +0 -0
  120. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/__init__.py +0 -0
  121. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/base.py +0 -0
  122. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/generator.py +0 -0
  123. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/log.py +0 -0
  124. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/processor.py +0 -0
  125. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/run.py +0 -0
  126. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/terminator.py +0 -0
  127. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/dags/utils.py +0 -0
  128. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/extenders.py +0 -0
  129. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/job_schema.py +0 -0
  130. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/__init__.py +0 -0
  131. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/__init__.py +0 -0
  132. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/_types.py +0 -0
  133. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/checker.py +0 -0
  134. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/configurator.py +0 -0
  135. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/exception.py +0 -0
  136. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/invoker.py +0 -0
  137. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/job.py +0 -0
  138. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/base/processor.py +0 -0
  139. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_job.py +0 -0
  140. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_job_conf.py +0 -0
  141. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_job_id.py +0 -0
  142. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_jobs.py +0 -0
  143. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_schedule.py +0 -0
  144. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/get_schedules.py +0 -0
  145. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/gold.py +0 -0
  146. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/jobs/silver.py +0 -0
  147. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/__init__.py +0 -0
  148. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/_types.py +0 -0
  149. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/base.py +0 -0
  150. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/decorator.py +0 -0
  151. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/get_parser.py +0 -0
  152. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/parsers/utils.py +0 -0
  153. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/__init__.py +0 -0
  154. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/diagrams.py +0 -0
  155. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/generate.py +0 -0
  156. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/get_schedule.py +0 -0
  157. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/get_schedules.py +0 -0
  158. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/process.py +0 -0
  159. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/run.py +0 -0
  160. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/terminate.py +0 -0
  161. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/schedules/views.py +0 -0
  162. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/steps/__init__.py +0 -0
  163. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/steps/_types.py +0 -0
  164. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/steps/base.py +0 -0
  165. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/steps/get_step.py +0 -0
  166. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/steps/get_step_conf.py +0 -0
  167. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/core/views.py +0 -0
  168. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/notebooks.py +0 -0
  169. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/schedules.py +0 -0
  170. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/udfs.py +0 -0
  171. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/utils.py +0 -0
  172. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/deploy/views.py +0 -0
  173. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/README.md +0 -0
  174. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/__init__.py +0 -0
  175. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/_types.py +0 -0
  176. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/database.py +0 -0
  177. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/dbobject.py +0 -0
  178. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/pyproject.toml +0 -0
  179. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/utils.py +0 -0
  180. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/metastore/view.py +0 -0
  181. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/__init__.py +0 -0
  182. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/_types.py +0 -0
  183. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/azure_queue.py +0 -0
  184. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/azure_table.py +0 -0
  185. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/console.py +0 -0
  186. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/fdict.py +0 -0
  187. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/helpers.py +0 -0
  188. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/log.py +0 -0
  189. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/mermaid.py +0 -0
  190. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/path.py +0 -0
  191. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/pip.py +0 -0
  192. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/pydantic.py +0 -0
  193. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/read/__init__.py +0 -0
  194. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/read/_types.py +0 -0
  195. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/read/read.py +0 -0
  196. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/read/read_excel.py +0 -0
  197. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/read/read_yaml.py +0 -0
  198. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/schema/__init__.py +0 -0
  199. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
  200. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/schema/get_schema_for_type.py +0 -0
  201. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/spark.py +0 -0
  202. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/sqlglot.py +0 -0
  203. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/write/__init__.py +0 -0
  204. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/write/delta.py +0 -0
  205. {fabricks-3.0.15 → fabricks-3.0.17}/fabricks/utils/write/stream.py +0 -0
  206. {fabricks-3.0.15 → fabricks-3.0.17}/mkdocs.sh +0 -0
  207. {fabricks-3.0.15 → fabricks-3.0.17}/mkdocs.yml +0 -0
  208. {fabricks-3.0.15 → fabricks-3.0.17}/tests/__init__.py +0 -0
  209. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/README.md +0 -0
  210. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/__init__.py +0 -0
  211. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/_types.py +0 -0
  212. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/add_missing_modules.py +0 -0
  213. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/armageddon.py +0 -0
  214. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/compare.py +0 -0
  215. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
  216. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
  217. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
  218. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
  219. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
  220. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
  221. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
  222. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
  223. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
  224. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
  225. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
  226. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
  227. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
  228. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
  229. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
  230. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
  231. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
  232. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
  233. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
  234. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
  235. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
  236. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
  237. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
  238. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
  239. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
  240. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
  241. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
  242. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
  243. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
  244. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
  245. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
  246. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
  247. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
  248. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
  249. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
  250. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
  251. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
  252. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
  253. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
  254. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
  255. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
  256. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
  257. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
  258. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
  259. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
  260. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
  261. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
  262. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job01.sql +0 -0
  263. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job02.sql +0 -0
  264. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job03.sql +0 -0
  265. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job04.sql +0 -0
  266. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job05.sql +0 -0
  267. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job06.sql +0 -0
  268. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job07.sql +0 -0
  269. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job08.sql +0 -0
  270. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job09.sql +0 -0
  271. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job10.sql +0 -0
  272. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd1/job11.sql +0 -0
  273. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job01.sql +0 -0
  274. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job02.sql +0 -0
  275. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job03.sql +0 -0
  276. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job04.sql +0 -0
  277. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job05.sql +0 -0
  278. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job06.sql +0 -0
  279. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job07.sql +0 -0
  280. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job08.sql +0 -0
  281. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job09.sql +0 -0
  282. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job10.sql +0 -0
  283. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/gold/scd2/job11.sql +0 -0
  284. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job01.sql +0 -0
  285. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job02.sql +0 -0
  286. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job03.sql +0 -0
  287. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job04.sql +0 -0
  288. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job05.sql +0 -0
  289. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job06.sql +0 -0
  290. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job07.sql +0 -0
  291. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job08.sql +0 -0
  292. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job09.sql +0 -0
  293. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job10.sql +0 -0
  294. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd1/job11.sql +0 -0
  295. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job01.sql +0 -0
  296. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job02.sql +0 -0
  297. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job03.sql +0 -0
  298. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job04.sql +0 -0
  299. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job05.sql +0 -0
  300. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job06.sql +0 -0
  301. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job07.sql +0 -0
  302. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job08.sql +0 -0
  303. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job09.sql +0 -0
  304. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job10.sql +0 -0
  305. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/expected/silver/scd2/job11.sql +0 -0
  306. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/init.sh +0 -0
  307. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/initialize.py +0 -0
  308. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/__init__.py +0 -0
  309. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/__init__.py +0 -0
  310. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_cdc.py +0 -0
  311. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_check.py +0 -0
  312. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_dependency.py +0 -0
  313. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_gold.py +0 -0
  314. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_invoke.py +0 -0
  315. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_overwrite.py +0 -0
  316. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_schedule.py +0 -0
  317. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job1/test_silver.py +0 -0
  318. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job2/__init__.py +0 -0
  319. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job2/test_gold.py +0 -0
  320. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job2/test_run.py +0 -0
  321. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job2/test_semantic.py +0 -0
  322. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job2/test_silver.py +0 -0
  323. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job3/__init__.py +0 -0
  324. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job3/test_gold.py +0 -0
  325. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job3/test_run.py +0 -0
  326. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job3/test_silver.py +0 -0
  327. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job4/__init__.py +0 -0
  328. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job4/test_gold.py +0 -0
  329. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job4/test_run.py +0 -0
  330. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job5/__init__.py +0 -0
  331. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/jobs/job5/test_step.py +0 -0
  332. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/reset.py +0 -0
  333. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/run.py +0 -0
  334. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runjobs.py +0 -0
  335. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtests.py +0 -0
  336. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/.gitignore +0 -0
  337. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/__init__.py +0 -0
  338. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
  339. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
  340. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
  341. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
  342. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
  343. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
  344. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
  345. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/conf.fabricks.yml +0 -0
  346. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +0 -0
  347. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/extenders/__init__.py +0 -0
  348. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
  349. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
  350. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
  351. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
  352. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/masks/dummy.sql +0 -0
  353. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/add_missing_modules.py +0 -0
  354. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/cluster.py +0 -0
  355. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/initialize.py +0 -0
  356. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/process.py +0 -0
  357. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/run.py +0 -0
  358. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/schedule.py +0 -0
  359. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/notebooks/terminate.py +0 -0
  360. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/parsers/__init__.py +0 -0
  361. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/parsers/delete_log.py +0 -0
  362. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
  363. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/requirements.txt +0 -0
  364. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
  365. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
  366. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
  367. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
  368. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
  369. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
  370. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
  371. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
  372. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
  373. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
  374. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
  375. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
  376. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
  377. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
  378. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
  379. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
  380. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
  381. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
  382. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
  383. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
  384. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
  385. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
  386. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
  387. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
  388. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +0 -0
  389. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/add_missing_modules.py +0 -0
  390. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
  391. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
  392. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +0 -0
  393. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
  394. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/foreign_keys.sql +0 -0
  395. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
  396. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/masker_and_commenter.sql +0 -0
  397. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
  398. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/no_drop.sql +0 -0
  399. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +0 -0
  400. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/optimize_vacuum.sql +0 -0
  401. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
  402. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
  403. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
  404. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/primary_key.sql +0 -0
  405. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
  406. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
  407. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
  408. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
  409. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
  410. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
  411. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
  412. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
  413. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/post_run.sql +0 -0
  414. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
  415. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
  416. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
  417. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +0 -0
  418. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/nocdc/_config.nocdc.yml +0 -0
  419. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/nocdc/deduplicate.sql +0 -0
  420. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/nocdc/update.sql +0 -0
  421. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +0 -0
  422. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
  423. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
  424. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
  425. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
  426. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/special_char.sql +0 -0
  427. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
  428. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
  429. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
  430. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
  431. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
  432. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
  433. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
  434. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
  435. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
  436. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
  437. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
  438. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/transf/fact/memory.sql +0 -0
  439. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/gold/transf/post_run.py +0 -0
  440. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/job-schema.json +0 -0
  441. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/dim/_config.semantic.yml +0 -0
  442. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/dim/complex_query.sql +0 -0
  443. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
  444. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
  445. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
  446. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
  447. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
  448. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
  449. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.memory.yml +0 -0
  450. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
  451. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
  452. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/silver/_config.regents.yml +0 -0
  453. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
  454. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
  455. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
  456. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
  457. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
  458. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
  459. {fabricks-3.0.15 → fabricks-3.0.17}/tests/integration/schedule.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricks
3
- Version: 3.0.15
3
+ Version: 3.0.17
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
@@ -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 ({% for o in overwrite %}{{ o }}, {% endfor %})
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 %}
@@ -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.options.table.get_list("cluster_by") or []
246
- if not cluster_by:
247
- if "__source" in df.columns:
248
- cluster_by.append("__source")
249
- if "__is_current" in df.columns:
250
- cluster_by.append("__is_current")
251
- if "__key" in df.columns:
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.options.table.get_list("cluster_by") or []
450
- if not cluster_by:
451
- if "__source" in df.columns:
452
- cluster_by.append("__source")
453
- if "__is_current" in df.columns:
454
- cluster_by.append("__is_current")
455
- if "__key" in df.columns:
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("could not enable liquid clustering", extra={"label": self})
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
@@ -7,7 +7,7 @@ from fabricks.context import CATALOG, PATH_MASKS, SPARK
7
7
  from fabricks.context.log import DEFAULT_LOGGER
8
8
 
9
9
 
10
- def register_all_masks():
10
+ def register_all_masks(override: bool = False):
11
11
  """
12
12
  Register all masks.
13
13
  """
@@ -16,7 +16,7 @@ def register_all_masks():
16
16
  for mask in get_masks():
17
17
  split = mask.split(".")
18
18
  try:
19
- register_mask(mask=split[0])
19
+ register_mask(mask=split[0], override=override)
20
20
  except Exception as e:
21
21
  DEFAULT_LOGGER.exception(f"could not register mask {mask}", exc_info=e)
22
22
 
@@ -40,13 +40,16 @@ def is_registered(mask: str, spark: Optional[SparkSession] = None) -> bool:
40
40
  return not df.isEmpty()
41
41
 
42
42
 
43
- def register_mask(mask: str, spark: Optional[SparkSession] = None):
43
+ def register_mask(mask: str, override: Optional[bool] = False, spark: Optional[SparkSession] = None):
44
44
  if spark is None:
45
45
  spark = SPARK
46
46
  assert spark is not None
47
47
 
48
- if not is_registered(mask, spark):
49
- DEFAULT_LOGGER.debug(f"register mask {mask}")
48
+ if not is_registered(mask, spark) or override:
49
+ if override:
50
+ DEFAULT_LOGGER.debug(f"override mask {mask}")
51
+ else:
52
+ DEFAULT_LOGGER.debug(f"register mask {mask}")
50
53
 
51
54
  path = PATH_MASKS.joinpath(f"{mask}.sql")
52
55
  spark.sql(path.get_sql())
@@ -60,8 +60,8 @@ def is_registered(udf: str, spark: Optional[SparkSession] = None) -> bool:
60
60
  def register_udf(
61
61
  udf: str,
62
62
  extension: Optional[str] = None,
63
+ override: Optional[bool] = False,
63
64
  spark: Optional[SparkSession] = None,
64
- override: bool = False,
65
65
  ):
66
66
  """
67
67
  Register a user-defined function (UDF).
@@ -25,12 +25,12 @@ class Deploy:
25
25
  deploy_views()
26
26
 
27
27
  @staticmethod
28
- def udfs():
29
- deploy_udfs()
28
+ def udfs(override: bool = True):
29
+ deploy_udfs(override=override)
30
30
 
31
31
  @staticmethod
32
- def masks():
33
- deploy_masks()
32
+ def masks(override: bool = True):
33
+ deploy_masks(override=override)
34
34
 
35
35
  @staticmethod
36
36
  def notebooks():
@@ -2,7 +2,7 @@ from fabricks.context.log import DEFAULT_LOGGER
2
2
  from fabricks.core.masks import register_all_masks
3
3
 
4
4
 
5
- def deploy_masks():
5
+ def deploy_masks(override: bool = True):
6
6
  DEFAULT_LOGGER.info("create or replace masks")
7
7
 
8
- register_all_masks()
8
+ register_all_masks(override=override)
@@ -9,9 +9,9 @@ from fabricks.metastore.table import Table
9
9
  def deploy_tables(drop: bool = False):
10
10
  DEFAULT_LOGGER.info("create or replace fabricks (default) tables")
11
11
 
12
- create_table_log(drop)
13
- create_table_dummy(drop)
14
- create_table_step(drop)
12
+ create_table_log(drop=drop)
13
+ create_table_dummy(drop=drop)
14
+ create_table_step(drop=drop)
15
15
 
16
16
 
17
17
  def create_table_step(drop: bool = False):
@@ -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
 
@@ -45,7 +45,7 @@ fi
45
45
 
46
46
  if [ -z "$build" ]
47
47
  then
48
- build="true"
48
+ build="false"
49
49
  fi
50
50
 
51
51
  if [ "$all" = "true" ] || [ "$python" = "true" ]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fabricks"
3
- version = "3.0.15"
3
+ version = "3.0.17"
4
4
  description = ""
5
5
  authors = [
6
6
  { name = "BMS DWH Team", email = "bi_support@bmsuisse.ch" },
@@ -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
  ]
@@ -2,7 +2,7 @@
2
2
  "runtime": "runtime",
3
3
  "notebooks": "runtime/fabricks/notebooks",
4
4
  "job_config_from_yaml": true,
5
- "loglevel": "info",
5
+ "loglevel": "debug",
6
6
  "debugmode": true,
7
7
  "config": "runtime/fabricks/conf.uc.fabricks.yml",
8
8
  "devmode": true
@@ -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
@@ -42,6 +42,7 @@
42
42
  mode: complete
43
43
  table_options:
44
44
  powerbi: true
45
+ partition_by: [Monarch]
45
46
  - job:
46
47
  step: semantic
47
48
  topic: fact
@@ -16,3 +16,11 @@
16
16
  options:
17
17
  mode: update
18
18
  change_data_capture: scd1
19
+ - job:
20
+ step: silver
21
+ topic: prince
22
+ item: scd2
23
+ tags: [test]
24
+ options:
25
+ mode: update
26
+ change_data_capture: scd2
@@ -18,3 +18,12 @@
18
18
  uri: abfss://test@$datahub/raw/2/prince
19
19
  parser: monarch
20
20
  keys: ['@Id']
21
+ - job:
22
+ step: bronze
23
+ topic: prince
24
+ item: scd2
25
+ options:
26
+ mode: register
27
+ uri: abfss://test@$datahub/raw/2/delta/prince
28
+ parser: monarch
29
+ keys: ['@Id']
@@ -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
- for p in [f"{topic}__deletelog", topic]:
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
- df.write.mode("append").option("mergeSchema", "True").format("delta").save(f"{root}/delta/{topic}")
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():
@@ -645,7 +645,7 @@ wheels = [
645
645
 
646
646
  [[package]]
647
647
  name = "fabricks"
648
- version = "3.0.15"
648
+ version = "3.0.17"
649
649
  source = { editable = "." }
650
650
  dependencies = [
651
651
  { name = "azure-data-tables" },
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