fabricks 3.0.5.2__tar.gz → 3.0.7__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 (505) hide show
  1. {fabricks-3.0.5.2 → fabricks-3.0.7}/PKG-INFO +2 -1
  2. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/helpers/init.md +29 -34
  3. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/helpers/job.md +18 -20
  4. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/helpers/runtime.md +9 -14
  5. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/helpers/schedule.md +14 -21
  6. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/helpers/step.md +23 -26
  7. fabricks-3.0.7/docs/index.md +51 -0
  8. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/introduction/layers.md +10 -9
  9. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/introduction/overview.md +11 -10
  10. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/reference/cdc.md +54 -62
  11. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/reference/checks-data-quality.md +15 -20
  12. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/reference/extenders-udfs-parsers.md +11 -16
  13. {fabricks-3.0.5.2 → fabricks-3.0.7}/docs/reference/table-options.md +22 -21
  14. fabricks-3.0.7/docs/steps/BRONZE.md +110 -0
  15. fabricks-3.0.7/docs/steps/GOLD.md +184 -0
  16. fabricks-3.0.7/docs/steps/SILVER.md +150 -0
  17. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/__init__.py +2 -0
  18. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/context.py +1 -2
  19. fabricks-3.0.7/fabricks/api/deploy.py +3 -0
  20. fabricks-3.0.7/fabricks/api/job_schema.py +3 -0
  21. fabricks-3.0.7/fabricks/api/masks.py +3 -0
  22. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/initialize.py +2 -2
  23. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/process.py +2 -2
  24. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/run.py +2 -2
  25. fabricks-3.0.7/fabricks/api/notebooks/schedule.py +75 -0
  26. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/terminate.py +2 -2
  27. fabricks-3.0.7/fabricks/api/schedules.py +3 -0
  28. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/__init__.py +2 -2
  29. fabricks-3.0.7/fabricks/cdc/base/__init__.py +4 -0
  30. fabricks-3.0.7/fabricks/cdc/base/_types.py +10 -0
  31. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/base/configurator.py +86 -41
  32. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/base/generator.py +44 -35
  33. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/base/merger.py +16 -14
  34. fabricks-3.0.7/fabricks/cdc/base/processor.py +471 -0
  35. fabricks-3.0.7/fabricks/cdc/nocdc.py +20 -0
  36. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/ctes}/base.sql.jinja +7 -6
  37. fabricks-3.0.7/fabricks/cdc/templates/ctes/current.sql.jinja +28 -0
  38. fabricks-3.0.7/fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja +32 -0
  39. fabricks-3.0.7/fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja +31 -0
  40. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/ctes}/rectify.sql.jinja +4 -22
  41. fabricks-3.0.7/fabricks/cdc/templates/ctes/slice.sql.jinja +1 -0
  42. fabricks-3.0.7/fabricks/cdc/templates/filter.sql.jinja +4 -0
  43. fabricks-3.0.7/fabricks/cdc/templates/macros/bactick.sql.jinja +1 -0
  44. fabricks-3.0.7/fabricks/cdc/templates/macros/hash.sql.jinja +18 -0
  45. fabricks-3.0.7/fabricks/cdc/templates/merge.sql.jinja +3 -0
  46. fabricks-3.0.7/fabricks/cdc/templates/merges/nocdc.sql.jinja +41 -0
  47. fabricks-3.0.7/fabricks/cdc/templates/queries/context.sql.jinja +186 -0
  48. fabricks-3.0.5.2/fabricks/cdc/templates/query/nocdc.sql.jinja → fabricks-3.0.7/fabricks/cdc/templates/queries/nocdc/complete.sql.jinja +1 -1
  49. fabricks-3.0.7/fabricks/cdc/templates/queries/nocdc/update.sql.jinja +35 -0
  50. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/queries}/scd1.sql.jinja +2 -28
  51. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/queries}/scd2.sql.jinja +29 -48
  52. fabricks-3.0.7/fabricks/cdc/templates/query.sql.jinja +15 -0
  53. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/context/__init__.py +18 -4
  54. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/context/_types.py +2 -0
  55. fabricks-3.0.7/fabricks/context/config/__init__.py +92 -0
  56. fabricks-3.0.7/fabricks/context/config/utils.py +53 -0
  57. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/context/log.py +8 -2
  58. fabricks-3.0.7/fabricks/context/runtime.py +117 -0
  59. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/context/secret.py +1 -1
  60. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/context/spark_session.py +1 -1
  61. fabricks-3.0.7/fabricks/context/utils.py +80 -0
  62. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/generator.py +6 -7
  63. fabricks-3.0.7/fabricks/core/dags/log.py +12 -0
  64. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/processor.py +11 -11
  65. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/utils.py +15 -1
  66. {fabricks-3.0.5.2/fabricks/core/scripts → fabricks-3.0.7/fabricks/core}/job_schema.py +4 -0
  67. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/_types.py +64 -22
  68. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/checker.py +13 -12
  69. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/configurator.py +41 -67
  70. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/generator.py +55 -24
  71. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/invoker.py +54 -30
  72. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/processor.py +43 -26
  73. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/bronze.py +45 -38
  74. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/get_jobs.py +2 -2
  75. fabricks-3.0.7/fabricks/core/jobs/get_schedule.py +10 -0
  76. fabricks-3.0.7/fabricks/core/jobs/get_schedules.py +32 -0
  77. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/gold.py +61 -48
  78. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/silver.py +39 -40
  79. fabricks-3.0.7/fabricks/core/masks.py +52 -0
  80. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/parsers/base.py +2 -2
  81. fabricks-3.0.7/fabricks/core/schedules/__init__.py +14 -0
  82. fabricks-3.0.7/fabricks/core/schedules/diagrams.py +46 -0
  83. fabricks-3.0.7/fabricks/core/schedules/get_schedule.py +5 -0
  84. fabricks-3.0.7/fabricks/core/schedules/get_schedules.py +9 -0
  85. fabricks-3.0.7/fabricks/core/schedules/run.py +3 -0
  86. fabricks-3.0.7/fabricks/core/schedules/views.py +61 -0
  87. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/steps/base.py +110 -72
  88. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/udfs.py +12 -23
  89. fabricks-3.0.7/fabricks/core/views.py +41 -0
  90. fabricks-3.0.7/fabricks/deploy/__init__.py +97 -0
  91. fabricks-3.0.7/fabricks/deploy/masks.py +8 -0
  92. fabricks-3.0.7/fabricks/deploy/notebooks.py +71 -0
  93. fabricks-3.0.7/fabricks/deploy/schedules.py +8 -0
  94. {fabricks-3.0.5.2/fabricks/core → fabricks-3.0.7/fabricks}/deploy/tables.py +16 -13
  95. {fabricks-3.0.5.2/fabricks/core → fabricks-3.0.7/fabricks}/deploy/udfs.py +3 -1
  96. fabricks-3.0.7/fabricks/deploy/utils.py +36 -0
  97. {fabricks-3.0.5.2/fabricks/core → fabricks-3.0.7/fabricks}/deploy/views.py +5 -9
  98. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/database.py +3 -3
  99. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/dbobject.py +4 -4
  100. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/table.py +157 -88
  101. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/view.py +13 -6
  102. fabricks-3.0.7/fabricks/utils/_types.py +6 -0
  103. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/azure_table.py +4 -3
  104. fabricks-3.0.7/fabricks/utils/helpers.py +228 -0
  105. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/log.py +29 -18
  106. fabricks-3.0.7/fabricks/utils/read/_types.py +3 -0
  107. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/schema/get_schema_for_type.py +6 -0
  108. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/write/delta.py +3 -3
  109. fabricks-3.0.7/mkdocs.sh +1 -0
  110. {fabricks-3.0.5.2 → fabricks-3.0.7}/pyproject.toml +7 -5
  111. fabricks-3.0.5.2/tests/integration/add_fabricks.py → fabricks-3.0.7/tests/integration/add_missing_modules.py +2 -1
  112. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/armageddon.py +3 -9
  113. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/compare.py +2 -0
  114. fabricks-3.0.7/tests/integration/fabricksconfig.json +8 -0
  115. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/initialize.py +3 -1
  116. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_gold.py +22 -0
  117. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_schedule.py +21 -29
  118. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job2/test_run.py +5 -2
  119. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job3/test_gold.py +36 -1
  120. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job5/test_step.py +32 -7
  121. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/reset.py +1 -1
  122. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/run.py +1 -1
  123. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runjobs.py +7 -3
  124. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtests.py +1 -1
  125. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/conf.fabricks.yml +3 -0
  126. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +2 -0
  127. fabricks-3.0.7/tests/integration/runtime/fabricks/masks/dummy.sql +1 -0
  128. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/add_missing_modules.py +24 -0
  129. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/cluster.py +6 -0
  130. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/initialize.py +42 -0
  131. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/process.py +54 -0
  132. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/run.py +59 -0
  133. fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/schedule.py +76 -0
  134. fabricks-3.0.5.2/fabricks/api/notebooks/vacuum.py → fabricks-3.0.7/tests/integration/runtime/fabricks/notebooks/terminate.py +10 -8
  135. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/parsers/delete_log.py +1 -1
  136. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +58 -1
  137. fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/add_missing_modules.py +24 -0
  138. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +1 -1
  139. fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/foreign_keys.sql +3 -0
  140. fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/masker_and_commenter.sql +3 -0
  141. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +80 -11
  142. fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/primary_key.sql +3 -0
  143. fabricks-3.0.7/tests/integration/runtime/gold/gold/invoke/post_run.sql +1 -0
  144. fabricks-3.0.7/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +1 -0
  145. fabricks-3.0.7/tests/integration/runtime/gold/gold/nocdc/_config.nocdc.yml +17 -0
  146. fabricks-3.0.7/tests/integration/runtime/gold/gold/nocdc/deduplicate.sql +18 -0
  147. fabricks-3.0.7/tests/integration/runtime/gold/gold/nocdc/update.sql +9 -0
  148. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +8 -0
  149. fabricks-3.0.7/tests/integration/runtime/gold/gold/scd1/special_char.sql +1 -0
  150. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/job-schema.json +214 -0
  151. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/schedule.py +3 -3
  152. {fabricks-3.0.5.2 → fabricks-3.0.7}/uv.lock +39 -1
  153. fabricks-3.0.5.2/docs/index.md +0 -49
  154. fabricks-3.0.5.2/docs/steps/BRONZE.md +0 -144
  155. fabricks-3.0.5.2/docs/steps/GOLD.md +0 -641
  156. fabricks-3.0.5.2/docs/steps/SILVER.md +0 -260
  157. fabricks-3.0.5.2/fabricks/api/job_schema.py +0 -3
  158. fabricks-3.0.5.2/fabricks/api/notebooks/add_fabricks.py +0 -13
  159. fabricks-3.0.5.2/fabricks/api/notebooks/optimize.py +0 -29
  160. fabricks-3.0.5.2/fabricks/api/schedules.py +0 -17
  161. fabricks-3.0.5.2/fabricks/cdc/base/__init__.py +0 -4
  162. fabricks-3.0.5.2/fabricks/cdc/base/_types.py +0 -3
  163. fabricks-3.0.5.2/fabricks/cdc/base/processor.py +0 -383
  164. fabricks-3.0.5.2/fabricks/cdc/nocdc.py +0 -19
  165. fabricks-3.0.5.2/fabricks/cdc/templates/filter.sql.jinja +0 -4
  166. fabricks-3.0.5.2/fabricks/cdc/templates/merge.sql.jinja +0 -2
  167. fabricks-3.0.5.2/fabricks/cdc/templates/query/context.sql.jinja +0 -101
  168. fabricks-3.0.5.2/fabricks/cdc/templates/query/current.sql.jinja +0 -32
  169. fabricks-3.0.5.2/fabricks/cdc/templates/query/deduplicate_hash.sql.jinja +0 -21
  170. fabricks-3.0.5.2/fabricks/cdc/templates/query/deduplicate_key.sql.jinja +0 -14
  171. fabricks-3.0.5.2/fabricks/cdc/templates/query/hash.sql.jinja +0 -1
  172. fabricks-3.0.5.2/fabricks/cdc/templates/query/slice.sql.jinja +0 -14
  173. fabricks-3.0.5.2/fabricks/cdc/templates/query.sql.jinja +0 -11
  174. fabricks-3.0.5.2/fabricks/config/base.py +0 -8
  175. fabricks-3.0.5.2/fabricks/config/fabricks/__init__.py +0 -26
  176. fabricks-3.0.5.2/fabricks/config/fabricks/base.py +0 -90
  177. fabricks-3.0.5.2/fabricks/config/fabricks/environment.py +0 -9
  178. fabricks-3.0.5.2/fabricks/config/fabricks/pyproject.py +0 -47
  179. fabricks-3.0.5.2/fabricks/config/jobs/__init__.py +0 -6
  180. fabricks-3.0.5.2/fabricks/config/jobs/base.py +0 -101
  181. fabricks-3.0.5.2/fabricks/config/jobs/bronze.py +0 -38
  182. fabricks-3.0.5.2/fabricks/config/jobs/gold.py +0 -27
  183. fabricks-3.0.5.2/fabricks/config/jobs/silver.py +0 -22
  184. fabricks-3.0.5.2/fabricks/config/runtime.py +0 -67
  185. fabricks-3.0.5.2/fabricks/config/steps/__init__.py +0 -6
  186. fabricks-3.0.5.2/fabricks/config/steps/base.py +0 -50
  187. fabricks-3.0.5.2/fabricks/config/steps/bronze.py +0 -7
  188. fabricks-3.0.5.2/fabricks/config/steps/gold.py +0 -14
  189. fabricks-3.0.5.2/fabricks/config/steps/silver.py +0 -15
  190. fabricks-3.0.5.2/fabricks/context/runtime.py +0 -293
  191. fabricks-3.0.5.2/fabricks/core/dags/log.py +0 -25
  192. fabricks-3.0.5.2/fabricks/core/deploy/__init__.py +0 -17
  193. fabricks-3.0.5.2/fabricks/core/schedules.py +0 -142
  194. fabricks-3.0.5.2/fabricks/core/scripts/__init__.py +0 -9
  195. fabricks-3.0.5.2/fabricks/core/scripts/armageddon.py +0 -87
  196. fabricks-3.0.5.2/fabricks/core/scripts/stats.py +0 -51
  197. fabricks-3.0.5.2/fabricks/core/scripts/steps.py +0 -26
  198. fabricks-3.0.5.2/fabricks/core/views.py +0 -34
  199. fabricks-3.0.5.2/fabricks/utils/helpers.py +0 -98
  200. fabricks-3.0.5.2/fabricks/utils/read/_types.py +0 -3
  201. fabricks-3.0.5.2/tests/integration/runtime/add_fabricks.py +0 -11
  202. fabricks-3.0.5.2/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
  203. fabricks-3.0.5.2/tests/integration/runtime/gold/gold/fact/option_b.sql +0 -1
  204. {fabricks-3.0.5.2 → fabricks-3.0.7}/.gitignore +0 -0
  205. {fabricks-3.0.5.2 → fabricks-3.0.7}/.gitkeep +0 -0
  206. {fabricks-3.0.5.2 → fabricks-3.0.7}/.python-version +0 -0
  207. {fabricks-3.0.5.2 → fabricks-3.0.7}/README.md +0 -0
  208. {fabricks-3.0.5.2 → fabricks-3.0.7}/databricks.yml +0 -0
  209. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/__init__.py +0 -0
  210. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/cdc/__init__.py +0 -0
  211. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/cdc/nocdc.py +0 -0
  212. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/cdc/scd1.py +0 -0
  213. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/cdc/scd2.py +0 -0
  214. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/core.py +0 -0
  215. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/exceptions.py +0 -0
  216. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/extenders.py +0 -0
  217. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/log.py +0 -0
  218. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/metastore/__init__.py +0 -0
  219. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/metastore/database.py +0 -0
  220. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/metastore/table.py +0 -0
  221. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/metastore/view.py +0 -0
  222. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/__init__.py +0 -0
  223. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/notebooks/cluster.py +0 -0
  224. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/parsers.py +0 -0
  225. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/udfs.py +0 -0
  226. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/utils.py +0 -0
  227. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/version.py +0 -0
  228. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/api/views.py +0 -0
  229. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/base/cdc.py +0 -0
  230. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/cdc.py +0 -0
  231. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/scd.py +0 -0
  232. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/scd1.py +0 -0
  233. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/scd2.py +0 -0
  234. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/cdc/templates/__init__.py +0 -0
  235. {fabricks-3.0.5.2/fabricks/cdc/templates/filter → fabricks-3.0.7/fabricks/cdc/templates/filters}/final.sql.jinja +0 -0
  236. {fabricks-3.0.5.2/fabricks/cdc/templates/filter → fabricks-3.0.7/fabricks/cdc/templates/filters}/latest.sql.jinja +0 -0
  237. {fabricks-3.0.5.2/fabricks/cdc/templates/filter → fabricks-3.0.7/fabricks/cdc/templates/filters}/update.sql.jinja +0 -0
  238. {fabricks-3.0.5.2/fabricks/cdc/templates/merge → fabricks-3.0.7/fabricks/cdc/templates/merges}/scd1.sql.jinja +0 -0
  239. {fabricks-3.0.5.2/fabricks/cdc/templates/merge → fabricks-3.0.7/fabricks/cdc/templates/merges}/scd2.sql.jinja +0 -0
  240. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/queries}/__init__.py +0 -0
  241. {fabricks-3.0.5.2/fabricks/cdc/templates/query → fabricks-3.0.7/fabricks/cdc/templates/queries}/final.sql.jinja +0 -0
  242. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/__init__.py +0 -0
  243. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/__init__.py +0 -0
  244. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/base.py +0 -0
  245. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/run.py +0 -0
  246. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/dags/terminator.py +0 -0
  247. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/extenders.py +0 -0
  248. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/__init__.py +0 -0
  249. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/__init__.py +0 -0
  250. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/exception.py +0 -0
  251. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/base/job.py +0 -0
  252. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/get_job.py +0 -0
  253. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/get_job_conf.py +0 -0
  254. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/jobs/get_job_id.py +0 -0
  255. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/parsers/__init__.py +0 -0
  256. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/parsers/_types.py +0 -0
  257. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/parsers/decorator.py +0 -0
  258. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/parsers/get_parser.py +0 -0
  259. {fabricks-3.0.5.2/fabricks/core → fabricks-3.0.7/fabricks/core/parsers}/utils.py +0 -0
  260. {fabricks-3.0.5.2/fabricks/core/scripts → fabricks-3.0.7/fabricks/core/schedules}/generate.py +0 -0
  261. {fabricks-3.0.5.2/fabricks/core/scripts → fabricks-3.0.7/fabricks/core/schedules}/process.py +0 -0
  262. {fabricks-3.0.5.2/fabricks/core/scripts → fabricks-3.0.7/fabricks/core/schedules}/terminate.py +0 -0
  263. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/steps/__init__.py +0 -0
  264. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/steps/_types.py +0 -0
  265. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/steps/get_step.py +0 -0
  266. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/core/steps/get_step_conf.py +0 -0
  267. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/README.md +0 -0
  268. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/__init__.py +0 -0
  269. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/_types.py +0 -0
  270. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/pyproject.toml +0 -0
  271. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/metastore/utils.py +0 -0
  272. {fabricks-3.0.5.2/fabricks/config → fabricks-3.0.7/fabricks/utils}/__init__.py +0 -0
  273. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/azure_queue.py +0 -0
  274. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/console.py +0 -0
  275. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/fdict.py +0 -0
  276. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/path.py +0 -0
  277. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/pip.py +0 -0
  278. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/pydantic.py +0 -0
  279. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/read/__init__.py +0 -0
  280. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/read/read.py +0 -0
  281. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/read/read_excel.py +0 -0
  282. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/read/read_yaml.py +0 -0
  283. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/schema/__init__.py +0 -0
  284. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
  285. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/spark.py +0 -0
  286. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/sqlglot.py +0 -0
  287. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/write/__init__.py +0 -0
  288. {fabricks-3.0.5.2 → fabricks-3.0.7}/fabricks/utils/write/stream.py +0 -0
  289. {fabricks-3.0.5.2 → fabricks-3.0.7}/format.sh +0 -0
  290. {fabricks-3.0.5.2 → fabricks-3.0.7}/mkdocs.yml +0 -0
  291. {fabricks-3.0.5.2/fabricks/utils → fabricks-3.0.7/tests}/__init__.py +0 -0
  292. {fabricks-3.0.5.2/tests → fabricks-3.0.7/tests/integration}/__init__.py +0 -0
  293. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/_types.py +0 -0
  294. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
  295. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
  296. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
  297. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +0 -0
  298. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
  299. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
  300. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
  301. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
  302. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
  303. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
  304. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
  305. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
  306. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
  307. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
  308. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
  309. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
  310. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
  311. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
  312. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
  313. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
  314. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
  315. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
  316. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
  317. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
  318. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
  319. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
  320. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
  321. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
  322. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
  323. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
  324. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
  325. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
  326. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
  327. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
  328. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
  329. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
  330. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
  331. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
  332. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
  333. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
  334. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
  335. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
  336. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
  337. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
  338. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
  339. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
  340. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
  341. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
  342. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job01.sql +0 -0
  343. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job02.sql +0 -0
  344. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job03.sql +0 -0
  345. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job04.sql +0 -0
  346. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job05.sql +0 -0
  347. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job06.sql +0 -0
  348. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job07.sql +0 -0
  349. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job08.sql +0 -0
  350. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job09.sql +0 -0
  351. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job10.sql +0 -0
  352. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd1/job11.sql +0 -0
  353. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job01.sql +0 -0
  354. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job02.sql +0 -0
  355. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job03.sql +0 -0
  356. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job04.sql +0 -0
  357. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job05.sql +0 -0
  358. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job06.sql +0 -0
  359. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job07.sql +0 -0
  360. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job08.sql +0 -0
  361. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job09.sql +0 -0
  362. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job10.sql +0 -0
  363. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/gold/scd2/job11.sql +0 -0
  364. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job01.sql +0 -0
  365. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job02.sql +0 -0
  366. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job03.sql +0 -0
  367. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job04.sql +0 -0
  368. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job05.sql +0 -0
  369. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job06.sql +0 -0
  370. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job07.sql +0 -0
  371. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job08.sql +0 -0
  372. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job09.sql +0 -0
  373. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job10.sql +0 -0
  374. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd1/job11.sql +0 -0
  375. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job01.sql +0 -0
  376. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job02.sql +0 -0
  377. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job03.sql +0 -0
  378. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job04.sql +0 -0
  379. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job05.sql +0 -0
  380. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job06.sql +0 -0
  381. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job07.sql +0 -0
  382. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job08.sql +0 -0
  383. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job09.sql +0 -0
  384. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job10.sql +0 -0
  385. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/expected/silver/scd2/job11.sql +0 -0
  386. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/init.sh +0 -0
  387. {fabricks-3.0.5.2/tests/integration → fabricks-3.0.7/tests/integration/jobs}/__init__.py +0 -0
  388. {fabricks-3.0.5.2/tests/integration/jobs → fabricks-3.0.7/tests/integration/jobs/job1}/__init__.py +0 -0
  389. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_cdc.py +0 -0
  390. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_check.py +0 -0
  391. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_dependency.py +0 -0
  392. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_invoke.py +0 -0
  393. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_overwrite.py +0 -0
  394. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_semantic.py +0 -0
  395. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job1/test_silver.py +0 -0
  396. {fabricks-3.0.5.2/tests/integration/jobs/job1 → fabricks-3.0.7/tests/integration/jobs/job2}/__init__.py +0 -0
  397. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job2/test_gold.py +0 -0
  398. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job2/test_semantic.py +0 -0
  399. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job2/test_silver.py +0 -0
  400. {fabricks-3.0.5.2/tests/integration/jobs/job2 → fabricks-3.0.7/tests/integration/jobs/job3}/__init__.py +0 -0
  401. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job3/test_run.py +0 -0
  402. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job3/test_silver.py +0 -0
  403. {fabricks-3.0.5.2/tests/integration/jobs/job3 → fabricks-3.0.7/tests/integration/jobs/job4}/__init__.py +0 -0
  404. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job4/test_gold.py +0 -0
  405. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/jobs/job4/test_run.py +0 -0
  406. {fabricks-3.0.5.2/tests/integration/jobs/job4 → fabricks-3.0.7/tests/integration/jobs/job5}/__init__.py +0 -0
  407. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/.gitignore +0 -0
  408. {fabricks-3.0.5.2/tests/integration/jobs/job5 → fabricks-3.0.7/tests/integration/runtime}/__init__.py +0 -0
  409. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
  410. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
  411. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
  412. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
  413. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
  414. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
  415. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
  416. {fabricks-3.0.5.2/tests/integration/runtime → fabricks-3.0.7/tests/integration/runtime/fabricks/extenders}/__init__.py +0 -0
  417. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
  418. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
  419. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
  420. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
  421. {fabricks-3.0.5.2/tests/integration/runtime/fabricks/extenders → fabricks-3.0.7/tests/integration/runtime/fabricks/parsers}/__init__.py +0 -0
  422. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
  423. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/requirements.txt +0 -0
  424. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
  425. {fabricks-3.0.5.2/tests/integration/runtime/fabricks/parsers → fabricks-3.0.7/tests/integration/runtime/fabricks/udfs}/__init__.py +0 -0
  426. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
  427. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
  428. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
  429. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
  430. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
  431. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
  432. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
  433. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
  434. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
  435. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
  436. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
  437. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
  438. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
  439. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
  440. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
  441. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
  442. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
  443. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
  444. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
  445. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
  446. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
  447. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
  448. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
  449. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
  450. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
  451. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
  452. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
  453. /fabricks-3.0.5.2/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql → /fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/no_drop.sql +0 -0
  454. /fabricks-3.0.5.2/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql → /fabricks-3.0.7/tests/integration/runtime/gold/gold/fact/optimize_vacuum.sql +0 -0
  455. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
  456. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
  457. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
  458. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
  459. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
  460. /fabricks-3.0.5.2/tests/integration/runtime/gold/gold/invoke/post_run.sql → /fabricks-3.0.7/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
  461. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
  462. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
  463. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
  464. /fabricks-3.0.5.2/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql → /fabricks-3.0.7/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
  465. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
  466. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
  467. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
  468. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
  469. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
  470. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
  471. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
  472. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
  473. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
  474. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
  475. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
  476. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
  477. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
  478. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
  479. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
  480. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
  481. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
  482. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
  483. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
  484. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/transf/fact/memory.sql +0 -0
  485. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/gold/transf/post_run.py +0 -0
  486. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/_config.semantic.yml +0 -0
  487. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
  488. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
  489. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
  490. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
  491. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
  492. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
  493. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.memory.yml +0 -0
  494. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
  495. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.princes.yml +0 -0
  496. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
  497. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/silver/_config.regents.yml +0 -0
  498. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
  499. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
  500. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
  501. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.princes.yml +0 -0
  502. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
  503. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
  504. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
  505. {fabricks-3.0.5.2 → fabricks-3.0.7}/tests/integration/utils.py +0 -0
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricks
3
- Version: 3.0.5.2
3
+ Version: 3.0.7
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
7
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
+ Requires-Dist: databricks-cli>=0.18.0
10
11
  Requires-Dist: databricks-sdk>=0.20.0
11
12
  Requires-Dist: importlib-metadata>=8.6.1
12
13
  Requires-Dist: jinja2>=2.11.3
@@ -1,36 +1,36 @@
1
- # Initialize Fabricks
1
+ # Initialize Fabricks
2
2
 
3
3
  This helper explains how to initialize Fabricks on a Databricks cluster or local environment by:
4
4
 
5
5
  - Installing the Fabricks library
6
6
  - Pointing Fabricks to your runtime
7
- - Running the armageddon script to bootstrap metadata and objects
7
+ - Running the ``armageddon`` script to bootstrap metadata and objects
8
8
 
9
9
  ## 1) Install Fabricks
10
10
 
11
11
  You need the Fabricks package available on your cluster or local environment.
12
12
 
13
13
  - Databricks cluster (recommended)
14
- - Libraries → Install new → Python PyPI → fabricks (or install a wheel/artifact you build)
14
+ - Libraries → Install new → Python PyPI → `fabricks` (or install a wheel/artifact you build)
15
15
  - Alternatively, attach a workspace library artifact built from this repository
16
16
 
17
17
  - Local development (optional)
18
- - pip install fabricks
19
- - or from source (for development): pip install -e .[dev,test]
18
+ - `pip install fabricks`
19
+ - or from source (for development): `pip install -e .[dev,test]`
20
20
 
21
21
  Python >=3.9,<4 is recommended; align with your Databricks LTS runtime.
22
22
 
23
23
  ## 2) Point Fabricks to your runtime
24
24
 
25
- Fabricks discovers its runtime via either environment variables or [tool.fabricks] in your pyproject.toml. The core lookup logic is implemented in fabricks/context/runtime.py.
25
+ Fabricks discovers its runtime via either environment variables or `[tool.fabricks]` in your `pyproject.toml`. The core lookup logic is implemented in `fabricks/context/runtime.py`.
26
26
 
27
- *Option A*: Configure via pyproject.toml (preferred for repo-managed projects):
27
+ *Option A*: Configure via `pyproject.toml` (preferred for repo-managed projects):
28
28
  ```toml
29
29
  [tool.fabricks]
30
30
  runtime = "path/to/your/runtime" # e.g., tests/integration/runtime or examples/runtime
31
31
  notebooks = "fabricks/api/notebooks" # optional: helpers shipped with Fabricks
32
32
  job_config_from_yaml = true # optional
33
- loglevel = "info" # optional: DEBUG|INFO|WARNING|ERROR|CRITICAL
33
+ loglevel = "info" # optional: `DEBUG`|`INFO`|`WARNING`|`ERROR`|`CRITICAL`
34
34
  debugmode = false # optional
35
35
  config = "path/to/your/runtime/fabricks/conf.fabricks.yml" # main runtime YAML
36
36
  ```
@@ -42,16 +42,12 @@ config = "path/to/your/runtime/fabricks/conf.fabricks.yml" # main runtime YAML
42
42
  # FABRICKS_CONFIG: full path to your main conf.fabricks.yml (if not set, Fabricks tries to infer a conf.uc.<orgId>.yml)
43
43
  # FABRICKS_NOTEBOOKS: optional helper notebook path
44
44
  # FABRICKS_IS_JOB_CONFIG_FROM_YAML, FABRICKS_LOGLEVEL, FABRICKS_IS_DEBUGMODE: optional toggles
45
- ```
46
-
47
- Example on Databricks (Cluster → Configuration → Advanced options → Environment variables):
45
+ ```Example\non Databricks (Cluster → Configuration → Advanced options → Environment variables):
48
46
  ```
49
47
  FABRICKS_RUNTIME=/Workspace/Repos/your/repo/examples/runtime
50
48
  FABRICKS_CONFIG=/Workspace/Repos/your/repo/examples/runtime/fabricks/conf.fabricks.yml
51
49
  FABRICKS_LOGLEVEL=INFO
52
- ```
53
-
54
- You can also set env vars in a notebook before importing Fabricks:
50
+ ```You\ncan also set env vars in a notebook before importing Fabricks:
55
51
  ```python
56
52
  import os
57
53
  os.environ["FABRICKS_RUNTIME"] = "/Workspace/Repos/your/repo/examples/runtime"
@@ -60,20 +56,20 @@ os.environ["FABRICKS_CONFIG"] = "/Workspace/Repos/your/repo/examples/runtime/fab
60
56
  # os.environ["FABRICKS_LOGLEVEL"] = "INFO"
61
57
  ```
62
58
 
63
- ## 3) Run armageddon
59
+ ## 3) Run ``armageddon``
64
60
 
65
- armageddon performs a one-shot setup aligned with your runtime configuration (e.g., preparing databases/metadata, registering views).
61
+ ``armageddon`` performs a one-time setup based on your runtime configuration (e.g., preparing databases/metadata, registering views).
66
62
 
67
63
  Import and call:
68
64
  ```python
69
65
  # Databricks or local
70
- from fabricks.core.scripts.armageddon import armageddon
66
+ from fabricks.core.scripts.`armageddon` import `armageddon`
71
67
 
72
- # You may pass one or more steps (bronze, silver, gold, semantic, transf, ...)
68
+ # You may pass one or more steps (`bronze`, `silver`, `gold`, `semantic`, `transf`, ...)
73
69
  # Examples:
74
- armageddon(steps="gold") # single step
75
- armageddon(steps=["bronze", "silver", "gold"]) # multiple steps
76
- armageddon(steps=None) # default behavior, follow runtime config
70
+ `armageddon`(steps="gold") # single step
71
+ `armageddon`(steps=["bronze", "silver", "gold"]) # multiple steps
72
+ `armageddon`(steps=None) # default behavior, follow runtime config
77
73
  ```
78
74
 
79
75
  ## Example: Databricks Notebook: Initialize
@@ -87,30 +83,29 @@ Create a new notebook (Python) named initialize and include:
87
83
  # os.environ["FABRICKS_CONFIG"] = "/Workspace/Repos/your/repo/examples/runtime/fabricks/conf.fabricks.yml"
88
84
  # os.environ["FABRICKS_LOGLEVEL"] = "INFO"
89
85
 
90
- from fabricks.core.scripts.armageddon import armageddon
86
+ from fabricks.core.scripts.`armageddon` import `armageddon`
91
87
  # Run for all default steps from your runtime config:
92
- armageddon()
93
- ```
94
-
95
- Attach the Fabricks library to the cluster before running the notebook.
88
+ `armageddon`()
89
+ ```Attach\nthe Fabricks library to the cluster before running the notebook.
96
90
 
97
91
  ## Troubleshooting
98
92
 
99
93
  - Missing env/config:
100
- - ValueError: Must have at least a pyproject.toml or set FABRICKS_RUNTIME
101
- - Fix by setting FABRICKS_RUNTIME or adding [tool.fabricks] to pyproject.toml
94
+ - `ValueError`: Must have at least a `pyproject.toml` or set `FABRICKS_RUNTIME`
95
+ - Fix by setting `FABRICKS_RUNTIME` or adding `[tool.fabricks]` to `pyproject.toml`
102
96
 
103
97
  - Unity Catalog:
104
- - Ensure options.unity_catalog is true and options.catalog is set in conf.fabricks.yml
98
+ - Ensure `options.unity_catalog` is true and `options.catalog` is set in `conf.fabricks.yml`
105
99
 
106
100
  - Paths and storage:
107
- - conf.fabricks.yml must define path_options.storage and per-step runtime/storage paths; Fabricks uses these to resolve PATHS_RUNTIME and PATHS_STORAGE
101
+ - `conf.fabricks.yml` must define `path_options.storage` and per-step runtime/storage paths; Fabricks uses these to resolve `PATHS_RUNTIME` and `PATHS_STORAGE`
108
102
 
109
103
  - Logging:
110
- - Set FABRICKS_LOGLEVEL or tool.fabricks.loglevel to control verbosity
104
+ - Set `FABRICKS_LOGLEVEL` or `tool.fabricks.loglevel` to control verbosity
111
105
 
112
106
  ## Related topics
113
107
 
114
- - Runtime configuration: ../helpers/runtime.md
115
- - Step Helper: ./step.md
116
- - Job Helper: ./job.md
108
+ - Runtime configuration: `../helpers/runtime.md`
109
+ - Step Helper: `./step.md`
110
+ - Job Helper: `./job.md`
111
+
@@ -1,4 +1,4 @@
1
- # Job Helper
1
+ # Job Helper
2
2
 
3
3
  This helper describes a widget-driven approach to manage a Fabricks job.
4
4
 
@@ -24,7 +24,7 @@ j.run()
24
24
  # Other common operations:
25
25
  j.update_schema()
26
26
  j.overwrite_schema()
27
- j.register()
27
+ j.`register`()
28
28
 
29
29
  j.create()
30
30
 
@@ -59,17 +59,17 @@ dbutils.widgets.multiselect(
59
59
  "run",
60
60
  [
61
61
  "drop", -- Drop the job
62
- "register", -- Register the table
62
+ "`register`", -- Register the table
63
63
  "create", -- Create the job
64
64
  "truncate", -- Truncate the table
65
65
  "run", -- Run the job
66
66
  "for-each-run", -- Run the job (excluding the invoker(s) and the check(s))
67
67
  "overwrite", -- Overwrite the schema and run the job
68
- "pre-run-invoke", -- Run the pre-run invoker(s)
68
+ "pre-run-`invoke`", -- Run the pre-run invoker(s)
69
69
  "pre-run-check", -- Run the pre-run check(s)
70
- "post-run-invoke", -- Run the post-run invoker(s)
70
+ "post-run-`invoke`", -- Run the post-run invoker(s)
71
71
  "post-run-check", -- Run the post-run check(s)
72
- "update-schema", -- Update the schema
72
+ "`update`-schema", -- Update the schema
73
73
  "overwrite-schema", -- Overwrite the schema
74
74
  ],
75
75
  label="5 - Action(s)"
@@ -125,10 +125,7 @@ from fabricks.core.jobs import Gold # noqa: E402
125
125
  actions = dbutils.widgets.get("actions").split(",")
126
126
  actions = [a.strip() for a in actions]
127
127
 
128
- # COMMAND ----------
129
-
130
-
131
- def do(job: str) -> None:
128
+ # COMMAND ----------`n`ndef do(job: str) -> None:
132
129
  j = get_job(job=job)
133
130
  todos: dict[str, Callable] = {}
134
131
 
@@ -139,11 +136,11 @@ def do(job: str) -> None:
139
136
  if "drop" in actions:
140
137
  todos["drop"] = j.drop
141
138
 
142
- if "register" in actions:
143
- todos["register"] = j.register
139
+ if "`register`" in actions:
140
+ todos["`register`"] = j.`register`
144
141
 
145
- if "pre-run-invoke" in actions:
146
- todos["pre-run-invoke"] = j.invoke_pre_run
142
+ if "pre-run-`invoke`" in actions:
143
+ todos["pre-run-`invoke`"] = j.invoke_pre_run
147
144
 
148
145
  if "pre-run-check" in actions:
149
146
  todos["pre-run-check"] = j.check_pre_run
@@ -151,8 +148,8 @@ def do(job: str) -> None:
151
148
  if "create" in actions:
152
149
  todos["create"] = j.create
153
150
 
154
- if "update-schema" in actions:
155
- todos["update-schema"] = j.update_schema
151
+ if "`update`-schema" in actions:
152
+ todos["`update`-schema"] = j.update_schema
156
153
 
157
154
  if "overwrite-schema" in actions:
158
155
  todos["overwrite-schema"] = j.overwrite_schema
@@ -172,8 +169,8 @@ def do(job: str) -> None:
172
169
  if "post-run-check" in actions:
173
170
  todos["post-run-check"] = j.check_post_run
174
171
 
175
- if "post-run-invoke" in actions:
176
- todos["post-run-invoke"] = j.invoke_post_run
172
+ if "post-run-`invoke`" in actions:
173
+ todos["post-run-`invoke`"] = j.invoke_post_run
177
174
 
178
175
  for key, func in todos.items():
179
176
  func()
@@ -185,7 +182,7 @@ jobs = [s.strip() for s in dbutils.widgets.get("jobs").split(",")]
185
182
  jobs = [[j.strip() for j in job.split("//")] if "//" in job else job for job in jobs]
186
183
 
187
184
  for job in jobs:
188
- DEFAULT_LOGGER.warning(", ".join(actions), extra={"job": job})
185
+ DEFAULT_LOGGER.warning(", ".join(actions), extra={"label": job})
189
186
 
190
187
  # COMMAND ----------
191
188
 
@@ -203,8 +200,9 @@ dbutils.notebook.exit("exit (0)") # type: ignore
203
200
 
204
201
  ## Related topics
205
202
 
206
- - Steps: [Bronze](../steps/bronze.md) [Silver](../steps/silver.md) [Gold](../steps/gold.md)
203
+ - Steps: [Bronze](../steps/bronze.md) | [Silver](../steps/silver.md) | [Gold](../steps/gold.md)
207
204
  - Runtime overview and sample runtime: [Runtime](../helpers/runtime.md)
208
205
  - Checks & Data Quality: [Checks and Data Quality](../reference/checks-data-quality.md)
209
206
  - Table options and storage layout: [Table Options](../reference/table-options.md)
210
207
  - Extenders, UDFs & Views: [Extenders, UDFs & Views](../reference/extenders-udfs-parsers.md)
208
+
@@ -1,4 +1,4 @@
1
- # Runtime Configuration
1
+ # Runtime Configuration
2
2
 
3
3
  The Fabricks runtime is the folder where your Lakehouse project lives (configs, SQL, jobs, UDFs, extenders, views). This page explains how to point Fabricks to your runtime, how to structure it, and how to configure schedules and step paths.
4
4
 
@@ -19,7 +19,7 @@ This quick path gets a working runtime running end-to-end using the sample inclu
19
19
  ```
20
20
 
21
21
  2) Inspect the sample runtime
22
- - Directory: `examples/runtime` (see structure in Sample runtime below).
22
+ - Directory: `examples/runtime` (see structure in “Sample runtime” below).
23
23
  - It contains a minimal schedule and a Gold `hello_world.sql` full-refresh job.
24
24
 
25
25
  3) Run a schedule
@@ -29,11 +29,11 @@ This quick path gets a working runtime running end-to-end using the sample inclu
29
29
  Expected outputs
30
30
  - Tables/views:
31
31
  - A Gold table for the `hello_world` job (full refresh).
32
- - If using memory mode jobs, temporary views are registered for downstream steps.
32
+ - If using ``memory`` mode jobs, temporary views are registered for downstream steps.
33
33
  - Logs:
34
34
  - A completion line indicating job success; warnings/errors surfaced from checks/contracts if configured.
35
35
  - Data quality (if enabled):
36
- - Built-in bound violations or contract `__action = 'fail'` causes a nonzero exit and, for physical tables, an automatic rollback to the last successful version.
36
+ - Built-in bound violations or contract `__action = 'fail'` causes a nonâ€'zero exit and, for physical tables, an automatic rollback to the last successful version.
37
37
  - Contract `__action = 'warning'` logs the message and the run continues.
38
38
 
39
39
  Tip: If your environment uses different storage locations or workspace setup, adjust `path_options` and `spark_options` in the runtime YAML before running.
@@ -99,9 +99,7 @@ gold:
99
99
  path_options:
100
100
  runtime: src/steps/gold
101
101
  storage: abfss://gold@youraccount.blob.core.windows.net
102
- ```
103
-
104
- Key concepts:
102
+ ```Key\nconcepts:
105
103
  - options: global project config (secrets, timeouts, worker count)
106
104
  - path_options: shared storage/config paths
107
105
  - spark_options: default Spark SQL options applied for jobs
@@ -136,9 +134,7 @@ Schedules group jobs and define step order. Place schedules in your runtime (com
136
134
  variables:
137
135
  var1: 1
138
136
  var2: 2
139
- ```
140
-
141
- Pass the schedule name when running the shipped notebooks or the Databricks bundle job.
137
+ ```Pass\nthe schedule name when running the shipped notebooks or the Databricks bundle job.
142
138
 
143
139
  ## Typical runtime structure
144
140
 
@@ -191,9 +187,7 @@ examples/runtime/
191
187
  hello_world.sql
192
188
  semantic/
193
189
  _config.example.yml
194
- ```
195
-
196
- Key files and purpose
190
+ ```Key\nfiles and purpose
197
191
  - `fabricks/conf.fabricks.yml`: project-level configuration (secret scope, timeouts, workers, storage paths, schedules path)
198
192
  - `fabricks/schedules/schedule.yml`: minimal schedule to run the gold step
199
193
  - `gold/gold/_config.example.yml`: defines a simple Gold job
@@ -207,7 +201,8 @@ How to use this sample
207
201
 
208
202
  ## Related topics
209
203
 
210
- - Steps: [Bronze](../steps/bronze.md) [Silver](../steps/silver.md) [Gold](../steps/gold.md)
204
+ - Steps: [Bronze](../steps/bronze.md) | [Silver](../steps/silver.md) | [Gold](../steps/gold.md)
211
205
  - Data quality checks and contracts: [Checks & Data Quality](../reference/checks-data-quality.md)
212
206
  - Table properties and physical layout: [Table Options](../reference/table-options.md)
213
207
  - Custom logic integration: [Extenders, UDFs & Views](../reference/extenders-udfs-parsers.md)
208
+
@@ -1,24 +1,24 @@
1
- # Schedules
1
+ # Schedules
2
2
 
3
3
  Views provide a simple, declarative way to define a set of jobs to run in a schedule. Instead of listing jobs manually, you create a SQL view that filters the canonical `fabricks.jobs` table, and then reference that view by name from a schedule.
4
4
 
5
5
  Typical use cases:
6
6
  - Run all jobs for a given domain/topic (e.g., monarch)
7
7
  - Run only certain steps (e.g., all Gold jobs)
8
- - Run a curated subset of jobs for adhoc backfills or smoke tests
8
+ - Run a curated subset of jobs for adâ€'hoc backfills or smoke tests
9
9
 
10
10
  ---
11
11
 
12
12
  ## Types of views in Fabricks
13
13
 
14
- - Data views (userauthored):
14
+ - Data views (userâ€'authored):
15
15
  - You place `.sql` files under your runtime `views` path (see below).
16
16
  - Each file defines one SQL view created under the `fabricks` schema.
17
17
  - These are typically simple filters over `fabricks.jobs`.
18
18
 
19
- - Schedule views (frameworkgenerated):
19
+ - Schedule views (frameworkâ€'generated):
20
20
  - For each `schedule` defined in your runtime YAML, Fabricks can generate a companion view named `fabricks.<schedule_name>_schedule`.
21
- - A schedule view selects `j.*` from `fabricks.jobs` and applies optional filters from the schedules options (`view`, `steps`, `tag`), excluding manual jobs.
21
+ - A schedule view selects `j.*` from `fabricks.jobs` and applies optional filters from the schedule’s options (`view`, `steps`, `tag`), excluding manual jobs.
22
22
 
23
23
  Both kinds of views are useful: data views define job subsets; schedule views expose the final, resolved set for each schedule.
24
24
 
@@ -30,7 +30,7 @@ Both kinds of views are useful: data views define job subsets; schedule views ex
30
30
  - Data views: Your SQL selects a subset from `fabricks.jobs` (recommended: `select *`).
31
31
  - Schedules:
32
32
  - In `schedule.yml`, you can set `options.view: <data_view_name>`.
33
- - Fabricks resolves the schedules membership via the data view (and optional `steps` / `tag` filters).
33
+ - Fabricks resolves the schedule’s membership via the data view (and optional `steps` / `tag` filters).
34
34
  - Fabricks can also materialize a schedule view `fabricks.<schedule_name>_schedule` for inspection and tooling.
35
35
 
36
36
  ---
@@ -59,9 +59,7 @@ Create a file `monarch.sql` in your runtime `views` directory:
59
59
  select *
60
60
  from fabricks.jobs j
61
61
  where j.topic = 'monarch'
62
- ```
63
-
64
- This will create a view called `fabricks.monarch`. You can then reference this view in a schedule.
62
+ ```This\nwill create a view called `fabricks.monarch`. You can then reference this view in a schedule.
65
63
 
66
64
  ---
67
65
 
@@ -79,7 +77,7 @@ This will create a view called `fabricks.monarch`. You can then reference this v
79
77
 
80
78
  Behavior:
81
79
  - Fabricks loads all jobs returned by `fabricks.monarch` and further filters by `steps` and `tag` if provided.
82
- - Schedulelevel options like `variables`, `timeouts`, etc., still apply to execution.
80
+ - Scheduleâ€'level options like `variables`, `timeouts`, etc., still apply to execution.
83
81
  - In most cases the view alone defines the job set; `steps`/`tag` refine it.
84
82
 
85
83
  ---
@@ -141,7 +139,7 @@ You can (re)create both data views and schedule views programmatically.
141
139
  ```
142
140
 
143
141
  - Initialization path:
144
- - The bootstrap script (armageddon) calls both data view and schedule view builders so your environment is in sync with runtime configs and SQL view files.
142
+ - The bootstrap script (“armageddon”) calls both data view and schedule view builders so your environment is in sync with runtime configs and SQL view files.
145
143
 
146
144
  ---
147
145
 
@@ -152,24 +150,18 @@ Filter by step:
152
150
  select *
153
151
  from fabricks.jobs j
154
152
  where j.step = 'gold'
155
- ```
156
-
157
- Filter by a set of topics:
153
+ ```Filter\nby a set of topics:
158
154
  ```sql title:core_topics.sql
159
155
  select *
160
156
  from fabricks.jobs j
161
157
  where j.topic in ('sales', 'finance', 'marketing')
162
- ```
163
-
164
- Filter by both step and topic pattern:
158
+ ```Filter\nby both step and topic pattern:
165
159
  ```sql title:gold_sales_like.sql
166
160
  select *
167
161
  from fabricks.jobs j
168
162
  where j.step = 'gold'
169
163
  and j.topic like 'sales_%'
170
- ```
171
-
172
- Curate explicit jobs:
164
+ ```Curate\nexplicit jobs:
173
165
  ```sql title:curated_selection.sql
174
166
  select *
175
167
  from fabricks.jobs j
@@ -186,7 +178,7 @@ Tip:
186
178
 
187
179
  - Keep view logic simple: use filters, avoid heavy joins or transformations.
188
180
  - Align views with business domains or execution scopes (by step, topic family, tags).
189
- - Use explicit OR lists for oneoff backfills to keep intent clear and auditable.
181
+ - Use explicit OR lists for oneâ€'off backfills to keep intent clear and auditable.
190
182
  - Favor stable view names; schedules reference the view name.
191
183
 
192
184
  ## Related topics
@@ -196,3 +188,4 @@ Tip:
196
188
  - Steps overview (Bronze/Silver/Gold): ../steps/gold.md and siblings
197
189
  - Data quality checks: ./checks-data-quality.md
198
190
  - Table options and storage layout: ./table-options.md
191
+
@@ -1,4 +1,4 @@
1
- # Step Helper (Databricks Notebook)
1
+ # Step Helper (Databricks Notebook)
2
2
 
3
3
  This helper describes a widget-driven approach in a Databricks notebook to manage a Fabricks step (bronze, silver, gold).
4
4
 
@@ -28,8 +28,7 @@ s.update_dependencies(progress_bar=False)
28
28
 
29
29
  ## Helper Notebook
30
30
 
31
- ``` python
32
- # Databricks notebook source
31
+ ```python\n# Databricks notebook source
33
32
  import os
34
33
  from multiprocessing import Pool
35
34
  from typing import Callable, List
@@ -41,15 +40,15 @@ from databricks.sdk.runtime import dbutils, spark
41
40
  dbutils.widgets.text("steps", "---", label="6 - Step(s)")
42
41
  dbutils.widgets.multiselect(
43
42
  "actions",
44
- "update-configurations",
43
+ "``update``-configurations",
45
44
  [
46
- "update-configurations", -- Update job configurations
45
+ "``update``-configurations", -- Update job configurations
47
46
  "add-missing-jobs", -- Create any missing jobs
48
- "update-dependencies", -- Update job dependencies
49
- "update-lists", -- Update lists of jobs/tables/views
50
- "update-tables-list", -- Update the list of tables
51
- "update-views-list", -- Update the list of views
52
- "update" -- Update the step
47
+ "``update``-dependencies", -- Update job dependencies
48
+ "``update``-lists", -- Update lists of jobs/tables/views
49
+ "``update``-tables-list", -- Update the list of tables
50
+ "``update``-views-list", -- Update the list of views
51
+ "``update``" -- Update the step
53
52
  ],
54
53
  label="5 - Action(s)"
55
54
  )
@@ -103,30 +102,27 @@ from fabricks.api.log import DEFAULT_LOGGER # noqa: E402
103
102
  actions = dbutils.widgets.get("actions").split(",")
104
103
  actions = [a.strip() for a in actions]
105
104
 
106
- # COMMAND ----------
107
-
108
-
109
- def do(step: str) -> None:
105
+ # COMMAND ----------`n`ndef do(step: str) -> None:
110
106
  s = get_step(step=step)
111
107
  todos: dict[str, Callable] = {}
112
108
 
113
- if "update-configurations" in actions:
114
- todos["update-configurations"] = s.update_jobs
109
+ if "``update``-configurations" in actions:
110
+ todos["``update``-configurations"] = s.update_jobs
115
111
 
116
112
  if "add-missing-jobs" in actions:
117
113
  todos["add-missing-jobs"] = s.create_jobs
118
114
 
119
- if "update-views-list" in actions or "update-lists" in actions:
120
- todos["update-views-list"] = s.update_views
115
+ if "``update``-views-list" in actions or "``update``-lists" in actions:
116
+ todos["``update``-views-list"] = s.update_views
121
117
 
122
- if "update-tables-list" in actions or "update-lists" in actions:
123
- todos["update-tables-list"] = s.update_tables
118
+ if "``update``-tables-list" in actions or "``update``-lists" in actions:
119
+ todos["``update``-tables-list"] = s.update_tables
124
120
 
125
- if "update" in actions and len(actions) == 1:
126
- todos["update"] = s.update
121
+ if "``update``" in actions and len(actions) == 1:
122
+ todos["``update``"] = s.``update``
127
123
 
128
- if "update-dependencies" in actions:
129
- todos["update-dependencies"] = s.update_dependencies
124
+ if "``update``-dependencies" in actions:
125
+ todos["``update``-dependencies"] = s.update_dependencies
130
126
 
131
127
  for key, func in todos.items():
132
128
  func()
@@ -138,7 +134,7 @@ steps = [s.strip() for s in dbutils.widgets.get("steps").split(",")]
138
134
  steps = [[j.strip() for j in job.split("//")] if "//" in job else job for job in steps]
139
135
 
140
136
  for step in steps:
141
- DEFAULT_LOGGER.warning(", ".join(actions), extra={"step": step})
137
+ DEFAULT_LOGGER.warning(", ".join(actions), extra={"label": step})
142
138
 
143
139
  # COMMAND ----------
144
140
 
@@ -158,8 +154,9 @@ dbutils.notebook.exit("exit (0)") # type: ignore
158
154
 
159
155
  ## Related topics
160
156
 
161
- - Steps: [Bronze](../steps/bronze.md) [Silver](../steps/silver.md) [Gold](../steps/gold.md)
157
+ - Steps: [Bronze](../steps/bronze.md) | [Silver](../steps/silver.md) | [Gold](../steps/gold.md)
162
158
  - Runtime overview and sample runtime: [Runtime](../helpers/runtime.md)
163
159
  - Checks & Data Quality: [Checks and Data Quality](../reference/checks-data-quality.md)
164
160
  - Table options and storage layout: [Table Options](../reference/table-options.md)
165
161
  - Extenders, UDFs & Views: [Extenders, UDFs & Views](../reference/extenders-udfs-parsers.md)
162
+
@@ -0,0 +1,51 @@
1
+ # Fabricks User Guide
2
+
3
+ Fabricks is a pragmatic framework to build Databricks Lakehouse pipelines using YAML for orchestration and SQL for transformations.
4
+ It standardizes jobs, steps, schedules, CDC, and checks while keeping development SQL-first.
5
+
6
+ ---
7
+
8
+ # Steps Overview
9
+
10
+ Fabricks organizes your Lakehouse into clear layers. Each step has a dedicated reference with modes, options, and examples.
11
+
12
+ ### Bronze
13
+
14
+ Raw ingestion from source systems (files, streams, existing tables). Keep logic light; land data for downstream processing.
15
+
16
+ - Typical modes: ``memory``, ``append``, ``register``
17
+ - Focus: lightweight parsing/landing; no business logic
18
+ - Output: raw tables or temporary views
19
+
20
+ Read the full reference: [Bronze Step](steps/bronze.md)
21
+
22
+ ### Silver
23
+
24
+ Standardize, clean, and enrich data; optionally apply CDC (SCD1/SCD2). Produces conformed datasets and convenience views.
25
+
26
+ - Typical modes: ``memory``, ``append``, ``latest``, ``update``, ``combine``
27
+ - CDC: ``nocdc``, ``scd1``, ``scd2`` with built-in helpers and views
28
+ - Output: conformed tables and curated views
29
+
30
+ Read the full reference: [Silver Step](steps/silver.md)
31
+
32
+ ### Gold
33
+
34
+ Curated business models for analytics and reporting; dimensional or mart-style outputs. Can also `invoke` notebooks when needed.
35
+
36
+ - Typical modes: ``memory``, ``append``, ``complete``, ``update``, ``invoke`` (notebooks)
37
+ - Focus: dimensional models, marts, KPI-ready data
38
+ - Output: business-consumption tables and views
39
+
40
+ Read the full reference: [Gold Step](steps/gold.md)
41
+
42
+ ---
43
+
44
+ ## Where to Configure
45
+
46
+ - Project configuration, schedules, and runtime structure: [Runtime](helpers/runtime.md)
47
+ - Data quality and rollback behavior: [Checks & Data Quality](reference/checks-data-quality.md)
48
+ - Table properties, clustering, and layout: [Table Options](reference/table-options.md)
49
+ - Custom logic and reusable SQL assets: [Extenders, UDFs & Parsers](reference/extenders-udfs-parsers.md)
50
+ - Change Data Capture (CDC): [CDC](reference/cdc.md)
51
+
@@ -1,10 +1,10 @@
1
- # Layers (Bronze Silver Gold)
1
+ # Layers (Bronze â†' Silver â†' Gold)
2
2
 
3
3
  Fabricks organizes pipelines into layered steps to keep responsibilities clear and composable. Use this page to decide where logic belongs and how to structure data flow.
4
4
 
5
5
  Layer summary
6
6
 
7
- - Bronze: Land raw data as-is from files/streams/tables. Keep it light.
7
+ - Bronze: Land raw data “as-is” from files/streams/tables. Keep it light.
8
8
  - Silver: Standardize, clean, enrich; optionally apply CDC (SCD1/SCD2). Provide conformed datasets and convenience views.
9
9
  - Gold: Build consumption-ready models (facts/dims/marts), possibly with CDC merges or full refreshes.
10
10
 
@@ -13,23 +13,23 @@ When to use each layer
13
13
  - Bronze
14
14
  - Ingest from external sources with minimal logic
15
15
  - Keep provenance and raw fidelity
16
- - Typical modes: memory, append, register
16
+ - Typical modes: ``memory``, ``append``, ``register``
17
17
 
18
18
  - Silver
19
19
  - Standardize schemas, apply business keys, deduplicate
20
- - Apply CDC: scd1/scd2 with convenience views (e.g., table__current)
21
- - Typical modes: memory, append, latest, update, combine
20
+ - Apply CDC: ``scd1``/``scd2`` with convenience views (e.g., table__current)
21
+ - Typical modes: ``memory``, ``append``, ``latest``, ``update``, ``combine``
22
22
 
23
23
  - Gold
24
24
  - Aggregate, reshape, and model data for analytics/reporting
25
25
  - Implement SCD patterns at the desired consumption grain
26
- - Typical modes: memory, append, complete, update, invoke (notebook)
26
+ - Typical modes: ``memory``, ``append``, ``complete``, ``update``, ``invoke`` (notebook)
27
27
 
28
28
  Data flow
29
29
 
30
- - Bronze: raw sources (light parsing, optional filters/calculated columns) raw tables/views
31
- - Silver: bronze tables/views (standardize/enrich, optional CDC) conformed tables + {table}__current view
32
- - Gold: silver conformed outputs (marts/dim/fact, SCD merges or complete refresh) business-consumption tables/views
30
+ - Bronze: raw sources â†' (light parsing, optional filters/calculated columns) â†' raw tables/views
31
+ - Silver: bronze tables/views â†' (standardize/enrich, optional CDC) â†' conformed tables + {table}__current view
32
+ - Gold: silver conformed outputs â†' (marts/dim/fact, SCD merges or ``complete`` refresh) â†' business-consumption tables/views
33
33
 
34
34
  Quality and governance
35
35
 
@@ -44,3 +44,4 @@ Related
44
44
  - CDC reference: ../reference/cdc.md
45
45
  - Data quality checks: ../reference/checks-data-quality.md
46
46
  - Table options: ../reference/table-options.md
47
+