fabricks 3.0.11__tar.gz → 3.0.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. {fabricks-3.0.11 → fabricks-3.0.12}/PKG-INFO +1 -1
  2. {fabricks-3.0.11 → fabricks-3.0.12}/README.md +0 -4
  3. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/merger.py +1 -0
  4. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/processor.py +4 -3
  5. fabricks-3.0.12/fabricks/context/config.py +127 -0
  6. fabricks-3.0.11/fabricks/context/config/utils.py → fabricks-3.0.12/fabricks/context/helpers.py +31 -3
  7. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/runtime.py +18 -42
  8. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/processor.py +3 -1
  9. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/generator.py +19 -1
  10. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/views.py +8 -3
  11. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/table.py +39 -1
  12. {fabricks-3.0.11 → fabricks-3.0.12}/pyproject.toml +1 -1
  13. {fabricks-3.0.11 → fabricks-3.0.12}/uv.lock +1 -1
  14. fabricks-3.0.11/fabricks/context/config/__init__.py +0 -92
  15. {fabricks-3.0.11 → fabricks-3.0.12}/.gitignore +0 -0
  16. {fabricks-3.0.11 → fabricks-3.0.12}/.gitkeep +0 -0
  17. {fabricks-3.0.11 → fabricks-3.0.12}/.python-version +0 -0
  18. {fabricks-3.0.11 → fabricks-3.0.12}/databricks.yml +0 -0
  19. {fabricks-3.0.11 → fabricks-3.0.12}/docs/helpers/init.md +0 -0
  20. {fabricks-3.0.11 → fabricks-3.0.12}/docs/helpers/job.md +0 -0
  21. {fabricks-3.0.11 → fabricks-3.0.12}/docs/helpers/runtime.md +0 -0
  22. {fabricks-3.0.11 → fabricks-3.0.12}/docs/helpers/schedule.md +0 -0
  23. {fabricks-3.0.11 → fabricks-3.0.12}/docs/helpers/step.md +0 -0
  24. {fabricks-3.0.11 → fabricks-3.0.12}/docs/index.md +0 -0
  25. {fabricks-3.0.11 → fabricks-3.0.12}/docs/introduction/layers.md +0 -0
  26. {fabricks-3.0.11 → fabricks-3.0.12}/docs/introduction/overview.md +0 -0
  27. {fabricks-3.0.11 → fabricks-3.0.12}/docs/reference/cdc.md +0 -0
  28. {fabricks-3.0.11 → fabricks-3.0.12}/docs/reference/checks-data-quality.md +0 -0
  29. {fabricks-3.0.11 → fabricks-3.0.12}/docs/reference/extenders-udfs-parsers.md +0 -0
  30. {fabricks-3.0.11 → fabricks-3.0.12}/docs/reference/table-options.md +0 -0
  31. {fabricks-3.0.11 → fabricks-3.0.12}/docs/steps/BRONZE.md +0 -0
  32. {fabricks-3.0.11 → fabricks-3.0.12}/docs/steps/GOLD.md +0 -0
  33. {fabricks-3.0.11 → fabricks-3.0.12}/docs/steps/SILVER.md +0 -0
  34. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/__init__.py +0 -0
  35. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/__init__.py +0 -0
  36. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/cdc/__init__.py +0 -0
  37. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/cdc/nocdc.py +0 -0
  38. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/cdc/scd1.py +0 -0
  39. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/cdc/scd2.py +0 -0
  40. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/context.py +0 -0
  41. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/core.py +0 -0
  42. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/deploy.py +0 -0
  43. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/exceptions.py +0 -0
  44. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/extenders.py +0 -0
  45. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/job_schema.py +0 -0
  46. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/log.py +0 -0
  47. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/masks.py +0 -0
  48. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/metastore/__init__.py +0 -0
  49. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/metastore/database.py +0 -0
  50. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/metastore/table.py +0 -0
  51. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/metastore/view.py +0 -0
  52. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/__init__.py +0 -0
  53. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/cluster.py +0 -0
  54. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/initialize.py +0 -0
  55. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/process.py +0 -0
  56. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/run.py +0 -0
  57. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/schedule.py +0 -0
  58. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/notebooks/terminate.py +0 -0
  59. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/parsers.py +0 -0
  60. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/schedules.py +0 -0
  61. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/udfs.py +0 -0
  62. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/utils.py +0 -0
  63. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/version.py +0 -0
  64. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/api/views.py +0 -0
  65. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/__init__.py +0 -0
  66. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/__init__.py +0 -0
  67. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/_types.py +0 -0
  68. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/cdc.py +0 -0
  69. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/configurator.py +0 -0
  70. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/base/generator.py +0 -0
  71. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/cdc.py +0 -0
  72. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/nocdc.py +0 -0
  73. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/scd.py +0 -0
  74. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/scd1.py +0 -0
  75. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/scd2.py +0 -0
  76. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/__init__.py +0 -0
  77. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/base.sql.jinja +0 -0
  78. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/current.sql.jinja +0 -0
  79. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja +0 -0
  80. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja +0 -0
  81. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/rectify.sql.jinja +0 -0
  82. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/ctes/slice.sql.jinja +0 -0
  83. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/filter.sql.jinja +0 -0
  84. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/filters/final.sql.jinja +0 -0
  85. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/filters/latest.sql.jinja +0 -0
  86. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/filters/update.sql.jinja +0 -0
  87. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/macros/bactick.sql.jinja +0 -0
  88. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/macros/hash.sql.jinja +0 -0
  89. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/merge.sql.jinja +0 -0
  90. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/merges/nocdc.sql.jinja +0 -0
  91. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/merges/scd1.sql.jinja +0 -0
  92. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/merges/scd2.sql.jinja +0 -0
  93. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/__init__.py +0 -0
  94. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/context.sql.jinja +0 -0
  95. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/final.sql.jinja +0 -0
  96. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/nocdc/complete.sql.jinja +0 -0
  97. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/nocdc/update.sql.jinja +0 -0
  98. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/scd1.sql.jinja +0 -0
  99. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/queries/scd2.sql.jinja +0 -0
  100. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/cdc/templates/query.sql.jinja +0 -0
  101. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/__init__.py +0 -0
  102. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/_types.py +0 -0
  103. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/log.py +0 -0
  104. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/secret.py +0 -0
  105. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/spark_session.py +0 -0
  106. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/context/utils.py +0 -0
  107. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/__init__.py +0 -0
  108. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/__init__.py +0 -0
  109. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/base.py +0 -0
  110. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/generator.py +0 -0
  111. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/log.py +0 -0
  112. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/run.py +0 -0
  113. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/terminator.py +0 -0
  114. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/dags/utils.py +0 -0
  115. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/extenders.py +0 -0
  116. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/job_schema.py +0 -0
  117. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/__init__.py +0 -0
  118. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/__init__.py +0 -0
  119. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/_types.py +0 -0
  120. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/checker.py +0 -0
  121. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/configurator.py +0 -0
  122. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/exception.py +0 -0
  123. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/invoker.py +0 -0
  124. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/job.py +0 -0
  125. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/base/processor.py +0 -0
  126. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/bronze.py +0 -0
  127. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_job.py +0 -0
  128. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_job_conf.py +0 -0
  129. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_job_id.py +0 -0
  130. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_jobs.py +0 -0
  131. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_schedule.py +0 -0
  132. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/get_schedules.py +0 -0
  133. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/gold.py +0 -0
  134. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/jobs/silver.py +0 -0
  135. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/masks.py +0 -0
  136. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/__init__.py +0 -0
  137. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/_types.py +0 -0
  138. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/base.py +0 -0
  139. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/decorator.py +0 -0
  140. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/get_parser.py +0 -0
  141. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/parsers/utils.py +0 -0
  142. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/__init__.py +0 -0
  143. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/diagrams.py +0 -0
  144. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/generate.py +0 -0
  145. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/get_schedule.py +0 -0
  146. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/get_schedules.py +0 -0
  147. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/process.py +0 -0
  148. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/run.py +0 -0
  149. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/terminate.py +0 -0
  150. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/schedules/views.py +0 -0
  151. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/steps/__init__.py +0 -0
  152. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/steps/_types.py +0 -0
  153. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/steps/base.py +0 -0
  154. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/steps/get_step.py +0 -0
  155. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/steps/get_step_conf.py +0 -0
  156. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/udfs.py +0 -0
  157. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/core/views.py +0 -0
  158. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/__init__.py +0 -0
  159. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/masks.py +0 -0
  160. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/notebooks.py +0 -0
  161. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/schedules.py +0 -0
  162. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/tables.py +0 -0
  163. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/udfs.py +0 -0
  164. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/deploy/utils.py +0 -0
  165. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/README.md +0 -0
  166. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/__init__.py +0 -0
  167. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/_types.py +0 -0
  168. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/database.py +0 -0
  169. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/dbobject.py +0 -0
  170. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/pyproject.toml +0 -0
  171. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/utils.py +0 -0
  172. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/metastore/view.py +0 -0
  173. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/__init__.py +0 -0
  174. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/_types.py +0 -0
  175. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/azure_queue.py +0 -0
  176. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/azure_table.py +0 -0
  177. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/console.py +0 -0
  178. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/fdict.py +0 -0
  179. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/helpers.py +0 -0
  180. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/log.py +0 -0
  181. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/mermaid.py +0 -0
  182. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/path.py +0 -0
  183. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/pip.py +0 -0
  184. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/pydantic.py +0 -0
  185. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/read/__init__.py +0 -0
  186. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/read/_types.py +0 -0
  187. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/read/read.py +0 -0
  188. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/read/read_excel.py +0 -0
  189. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/read/read_yaml.py +0 -0
  190. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/schema/__init__.py +0 -0
  191. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/schema/get_json_schema_for_type.py +0 -0
  192. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/schema/get_schema_for_type.py +0 -0
  193. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/spark.py +0 -0
  194. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/sqlglot.py +0 -0
  195. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/write/__init__.py +0 -0
  196. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/write/delta.py +0 -0
  197. {fabricks-3.0.11 → fabricks-3.0.12}/fabricks/utils/write/stream.py +0 -0
  198. {fabricks-3.0.11 → fabricks-3.0.12}/format.sh +0 -0
  199. {fabricks-3.0.11 → fabricks-3.0.12}/mkdocs.sh +0 -0
  200. {fabricks-3.0.11 → fabricks-3.0.12}/mkdocs.yml +0 -0
  201. {fabricks-3.0.11 → fabricks-3.0.12}/tests/__init__.py +0 -0
  202. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/__init__.py +0 -0
  203. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/_types.py +0 -0
  204. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/add_missing_modules.py +0 -0
  205. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/armageddon.py +0 -0
  206. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/compare.py +0 -0
  207. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/king/2022/01/01/0001/king_202201010001.json +0 -0
  208. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/king/2022/01/02/0001/king_202201020001.json +0 -0
  209. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/king__deletelog/2022/02/01/0001/king_202201010001.json +0 -0
  210. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/prince/2022/01/01/0001/prince_202201010001.json +0 -0
  211. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/princess/2022/01/01/0001/princess_202201010001.json +0 -0
  212. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/01/0001/queen_202201010001.json +0 -0
  213. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/02/0001/queen_202201020001.json +0 -0
  214. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/queen/2022/01/04/0001/queen_202201040001.json +0 -0
  215. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/queen__deletelog/2022/01/03/0001/queen_202201030001.json +0 -0
  216. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/queen__deletelog/2022/01/04/0001/queen_202201040001.json +0 -0
  217. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job1/too_many_columns/2022/01/01/0001/sample_202201010001.json +0 -0
  218. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/01/0001/king_202210010001.json +0 -0
  219. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/02/0001/king_202210020001.json +0 -0
  220. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/02/0002/king_202210020002.json +0 -0
  221. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job10/king/2022/10/03/0001/king_202210030001.json +0 -0
  222. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job10/queen__deletelog/2022/10/01/0001/queen_202210010001.json +0 -0
  223. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job11/king/2022/11/01/0001/king_202210010001.json +0 -0
  224. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job11/king__deletelog/2022/11/01/0001/king_202211010001.json +0 -0
  225. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job2/king/2022/02/05/0001/king_202202050001.json +0 -0
  226. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job2/prince__deletelog/2022/02/01/0001/prince_202202010001.json +0 -0
  227. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job2/princess/2022/02/05/0001/princess_202202050001.json +0 -0
  228. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job2/queen/2022/02/05/0001/queen_202202050001.json +0 -0
  229. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job3/king/2022/03/01/001234/king_20220301001234.json +0 -0
  230. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job3/king__deletelog/2022/03/01/001234/king_20220301001234.json +0 -0
  231. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job3/queen/2022/03/05/001234/queen_20220305001234.json +0 -0
  232. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job3/queen/2022/03/06/0001/queen_202203060001.json +0 -0
  233. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job4/king/2022/04/01/0001/king_202204010001.json +0 -0
  234. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job4/monarch/2022/04/01/0001/monarch_202204010001.json +0 -0
  235. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job4/queen/2022/04/01/0001/queen_202204010001.json +0 -0
  236. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job4/regent/2022/04/01/0001/regent_202204010001.json +0 -0
  237. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job5/king/2022/05/01/0001/king_202205010001.json +0 -0
  238. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job5/queen/2022/05/01/0001/queen_202205010001.json +0 -0
  239. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job6/king/2022/06/01/0001/king_202206010001.json +0 -0
  240. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job6/queen/2022/06/01/0001/queen_202206010001.json +0 -0
  241. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job7/king/2022/07/01/0001/king_202207010001.json +0 -0
  242. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job7/queen/2022/07/01/0001/queen_202207010001.json +0 -0
  243. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job8/king/2022/08/01/0001/king_202208010001.json +0 -0
  244. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job8/queen/2022/08/01/0001/queen_202208010001.json +0 -0
  245. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/01/0001/king_202209010001.json +0 -0
  246. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/03/0001/king_202209030001.json +0 -0
  247. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/03/0002/king_202209030002.json +0 -0
  248. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king/2022/09/08/0001/king_202209080001.json +0 -0
  249. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/02/0001/king_202209020001.json +0 -0
  250. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0001/king_202209040001.json +0 -0
  251. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0005/king_202209040005.json +0 -0
  252. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/king__deletelog/2022/09/04/0009/king_202209040009.json +0 -0
  253. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/queen/2022/09/08/0001/queen_202209080001.json +0 -0
  254. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/data/job9/queen__deletelog/2022/09/01/0001/queen_202209030001.json +0 -0
  255. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job01.sql +0 -0
  256. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job02.sql +0 -0
  257. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job03.sql +0 -0
  258. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job04.sql +0 -0
  259. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job05.sql +0 -0
  260. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job06.sql +0 -0
  261. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job07.sql +0 -0
  262. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job08.sql +0 -0
  263. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job09.sql +0 -0
  264. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job10.sql +0 -0
  265. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd1/job11.sql +0 -0
  266. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job01.sql +0 -0
  267. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job02.sql +0 -0
  268. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job03.sql +0 -0
  269. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job04.sql +0 -0
  270. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job05.sql +0 -0
  271. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job06.sql +0 -0
  272. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job07.sql +0 -0
  273. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job08.sql +0 -0
  274. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job09.sql +0 -0
  275. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job10.sql +0 -0
  276. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/gold/scd2/job11.sql +0 -0
  277. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job01.sql +0 -0
  278. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job02.sql +0 -0
  279. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job03.sql +0 -0
  280. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job04.sql +0 -0
  281. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job05.sql +0 -0
  282. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job06.sql +0 -0
  283. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job07.sql +0 -0
  284. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job08.sql +0 -0
  285. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job09.sql +0 -0
  286. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job10.sql +0 -0
  287. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd1/job11.sql +0 -0
  288. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job01.sql +0 -0
  289. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job02.sql +0 -0
  290. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job03.sql +0 -0
  291. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job04.sql +0 -0
  292. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job05.sql +0 -0
  293. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job06.sql +0 -0
  294. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job07.sql +0 -0
  295. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job08.sql +0 -0
  296. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job09.sql +0 -0
  297. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job10.sql +0 -0
  298. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/expected/silver/scd2/job11.sql +0 -0
  299. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/fabricksconfig.json +0 -0
  300. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/init.sh +0 -0
  301. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/initialize.py +0 -0
  302. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/__init__.py +0 -0
  303. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/__init__.py +0 -0
  304. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_cdc.py +0 -0
  305. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_check.py +0 -0
  306. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_dependency.py +0 -0
  307. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_gold.py +0 -0
  308. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_invoke.py +0 -0
  309. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_overwrite.py +0 -0
  310. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_schedule.py +0 -0
  311. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_semantic.py +0 -0
  312. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job1/test_silver.py +0 -0
  313. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job2/__init__.py +0 -0
  314. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job2/test_gold.py +0 -0
  315. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job2/test_run.py +0 -0
  316. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job2/test_semantic.py +0 -0
  317. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job2/test_silver.py +0 -0
  318. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job3/__init__.py +0 -0
  319. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job3/test_gold.py +0 -0
  320. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job3/test_run.py +0 -0
  321. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job3/test_silver.py +0 -0
  322. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job4/__init__.py +0 -0
  323. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job4/test_gold.py +0 -0
  324. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job4/test_run.py +0 -0
  325. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job5/__init__.py +0 -0
  326. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/jobs/job5/test_step.py +0 -0
  327. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/reset.py +0 -0
  328. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/run.py +0 -0
  329. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runjobs.py +0 -0
  330. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtests.py +0 -0
  331. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/.gitignore +0 -0
  332. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/__init__.py +0 -0
  333. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.kings.yml +0 -0
  334. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.memory.yml +0 -0
  335. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.monarchs.yml +0 -0
  336. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.princes.yml +0 -0
  337. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.princesses.yml +0 -0
  338. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.queens.yml +0 -0
  339. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/bronze/_config.regents.yml +0 -0
  340. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/conf.fabricks.yml +0 -0
  341. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/conf.uc.fabricks.yml +0 -0
  342. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/__init__.py +0 -0
  343. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/add_country.py +0 -0
  344. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/drop__cols.py +0 -0
  345. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/force_reload.py +0 -0
  346. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/extenders/monarch.py +0 -0
  347. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/masks/dummy.sql +0 -0
  348. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/add_missing_modules.py +0 -0
  349. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/cluster.py +0 -0
  350. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/initialize.py +0 -0
  351. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/process.py +0 -0
  352. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/run.py +0 -0
  353. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/schedule.py +0 -0
  354. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/notebooks/terminate.py +0 -0
  355. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/__init__.py +0 -0
  356. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/delete_log.py +0 -0
  357. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/parsers/monarch.py +0 -0
  358. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/requirements.txt +0 -0
  359. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/schedules/schedule.yml +0 -0
  360. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/__init__.py +0 -0
  361. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/addition.py +0 -0
  362. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/identity.py +0 -0
  363. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/key.sql +0 -0
  364. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/udfs/parse_phone_number.py +0 -0
  365. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/fabricks/views/monarch.sql +0 -0
  366. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/_config.check.yml +0 -0
  367. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/count_must_equal.sql +0 -0
  368. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/duplicate_identity.sql +0 -0
  369. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/duplicate_key.sql +0 -0
  370. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/fail.pre_run.sql +0 -0
  371. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/fail.sql +0 -0
  372. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/max_rows.sql +0 -0
  373. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/min_rows.sql +0 -0
  374. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/skip.skip.sql +0 -0
  375. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/skip.sql +0 -0
  376. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/warning.post_run.sql +0 -0
  377. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/check/warning.sql +0 -0
  378. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/_config.dim.yml +0 -0
  379. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/date.sql +0 -0
  380. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/identity.sql +0 -0
  381. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/overwrite.sql +0 -0
  382. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/dim/time.sql +0 -0
  383. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/_config.fact.yml +0 -0
  384. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/add_missing_modules.py +0 -0
  385. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/append.sql +0 -0
  386. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/deduplicate.sql +0 -0
  387. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/dependency_notebook.ipynb +0 -0
  388. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/dependency_sql.sql +0 -0
  389. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/foreign_keys.sql +0 -0
  390. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/manual.sql +0 -0
  391. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/masker_and_commenter.sql +0 -0
  392. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/memory.sql +0 -0
  393. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/no_drop.sql +0 -0
  394. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/notebook.ipynb +0 -0
  395. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/optimize_vacuum.sql +0 -0
  396. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/option.sql +0 -0
  397. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/order_duplicate.sql +0 -0
  398. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/overwrite.sql +0 -0
  399. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/primary_key.sql +0 -0
  400. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/fact/udf.sql +0 -0
  401. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/_config.invoke.yml +0 -0
  402. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/failed_pre_run.sql +0 -0
  403. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebook.py +0 -0
  404. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebook_without_argument.ipynb +0 -0
  405. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebooks.py +0 -0
  406. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/notebooks_failed_pre_run.sql +0 -0
  407. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/post_run/exe.py +0 -0
  408. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/post_run.sql +0 -0
  409. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/pre_run/exe.py +0 -0
  410. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/pre_run/exe_2.py +0 -0
  411. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/timedout.py +0 -0
  412. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/invoke/timedout_pre_run.sql +0 -0
  413. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/_config.nocdc.yml +0 -0
  414. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/deduplicate.sql +0 -0
  415. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/nocdc/update.sql +0 -0
  416. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/_config.scd1.yml +0 -0
  417. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/complete.sql +0 -0
  418. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/identity.sql +0 -0
  419. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/last_timestamp.sql +0 -0
  420. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/memory.sql +0 -0
  421. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/special_char.sql +0 -0
  422. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd1/update.sql +0 -0
  423. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/_config.scd2.yml +0 -0
  424. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/complete.sql +0 -0
  425. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/correct_valid_from.sql +0 -0
  426. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/last_timestamp.sql +0 -0
  427. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/memory.sql +0 -0
  428. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/scd2/update.sql +0 -0
  429. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/_config.type_widening.yml +0 -0
  430. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/merge.sql +0 -0
  431. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/gold/type_widening/overwrite.sql +0 -0
  432. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/fact/_config.transf.yml +0 -0
  433. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/fact/memory.sql +0 -0
  434. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/gold/transf/post_run.py +0 -0
  435. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/job-schema.json +0 -0
  436. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/dim/_config.semantic.yml +0 -0
  437. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/dim/complex_query.sql +0 -0
  438. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/_config.semantic.yml +0 -0
  439. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/job_option.sql +0 -0
  440. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/powerbi.sql +0 -0
  441. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/schema_drift.sql +0 -0
  442. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/step_option.sql +0 -0
  443. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/semantic/fact/zstd.sql +0 -0
  444. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.kings_and_queens.yml +0 -0
  445. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.memory.yml +0 -0
  446. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.monarchs.yml +0 -0
  447. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.princes.yml +0 -0
  448. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.princesses.yml +0 -0
  449. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/silver/_config.regents.yml +0 -0
  450. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.kings.yml +0 -0
  451. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.memory.yml +0 -0
  452. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.monarchs.yml +0 -0
  453. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.princes.yml +0 -0
  454. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.princesses.yml +0 -0
  455. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.queens.yml +0 -0
  456. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/runtime/uc/bronze/_config.regents.yml +0 -0
  457. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/schedule.py +0 -0
  458. {fabricks-3.0.11 → fabricks-3.0.12}/tests/integration/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricks
3
- Version: 3.0.11
3
+ Version: 3.0.12
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
@@ -271,12 +271,8 @@ with
271
271
  from dates d
272
272
  left join newkey r on d.__timestamp between r.__valid_from and r.__valid_to and d.only_offer_id = r.only_offer_id
273
273
  group by d.only_offer_id, __timestamp, __operation
274
-
275
274
  ```
276
275
 
277
-
278
-
279
-
280
276
  ## 🧾 Conclusion
281
277
 
282
278
  Fabricks helps you define pipelines declaratively in YAML and implement logic in SQL, while handling CDC, dependencies, logging, and table lifecycle. Start from the examples near each step, then evolve to advanced features like checks, UDFs, extenders, and semantic properties.
@@ -89,6 +89,7 @@ class Merger(Processor):
89
89
  sql = sql.replace("{src}", "src")
90
90
  sql = fix_sql(sql)
91
91
  sql = sql.replace("`src`", "{src}")
92
+
92
93
  DEFAULT_LOGGER.debug("merge", extra={"label": self, "sql": sql})
93
94
 
94
95
  except Exception as e:
@@ -390,11 +390,12 @@ class Processor(Generator):
390
390
  try:
391
391
  sql = template.render(**context)
392
392
  if fix:
393
- DEFAULT_LOGGER.debug("fix context", extra={"label": self, "sql": sql})
394
393
  sql = self.fix_sql(sql)
394
+ else:
395
+ DEFAULT_LOGGER.debug("print query", extra={"label": self, "sql": sql})
395
396
 
396
397
  except (Exception, TypeError) as e:
397
- DEFAULT_LOGGER.exception("fail to execute sql query", extra={"label": self, "context": context})
398
+ DEFAULT_LOGGER.exception("fail to render sql query", extra={"label": self, "context": context})
398
399
  raise e
399
400
 
400
401
  row = self.spark.sql(sql).collect()[0]
@@ -425,7 +426,7 @@ class Processor(Generator):
425
426
 
426
427
  except (Exception, TypeError) as e:
427
428
  DEFAULT_LOGGER.debug("context", extra={"label": self, "context": context})
428
- DEFAULT_LOGGER.exception("fail to generate sql query", extra={"label": self, "context": context})
429
+ DEFAULT_LOGGER.exception("fail to render sql query", extra={"label": self, "context": context})
429
430
  raise e
430
431
 
431
432
  return sql
@@ -0,0 +1,127 @@
1
+ import logging
2
+ import os
3
+ from typing import Final
4
+
5
+ from fabricks.context.helpers import get_config_from_file
6
+ from fabricks.utils.log import get_logger
7
+ from fabricks.utils.path import Path
8
+ from fabricks.utils.spark import spark
9
+
10
+ logger, _ = get_logger("logs", level=logging.DEBUG)
11
+ file_path, file_config, origin = get_config_from_file()
12
+
13
+ if file_path:
14
+ logger.debug(f"found {origin} config ({file_path})", extra={"label": "config"})
15
+
16
+ # path to runtime
17
+ runtime = os.environ.get("FABRICKS_RUNTIME", "none")
18
+ runtime = None if runtime.lower() == "none" else runtime
19
+ if runtime is None:
20
+ if runtime := file_config.get("runtime"):
21
+ assert file_path is not None
22
+ runtime = file_path.joinpath(runtime)
23
+ logger.debug(f"resolve runtime from {origin} file", extra={"label": "config"})
24
+ else:
25
+ logger.debug("resolve runtime from env", extra={"label": "config"})
26
+
27
+ if runtime is None:
28
+ if file_path is not None:
29
+ runtime = file_path
30
+ logger.debug(f"resolve runtime from {origin} file", extra={"label": "config"})
31
+ else:
32
+ raise ValueError(
33
+ "could not resolve runtime (could not find pyproject.toml nor fabricksconfig.json nor FABRICKS_RUNTIME)"
34
+ )
35
+
36
+ path_runtime = Path(runtime, assume_git=True)
37
+
38
+ # path to config
39
+ config = os.environ.get("FABRICKS_CONFIG")
40
+ if config is None:
41
+ if config := file_config.get("config"):
42
+ assert file_path is not None
43
+ config = file_path.joinpath(config)
44
+ logger.debug(f"resolve config from {origin} file", extra={"label": "config"})
45
+ else:
46
+ logger.debug("resolve config from env", extra={"label": "config"})
47
+
48
+ if config is None:
49
+ logger.debug("resolve config from default path", extra={"label": "config"})
50
+ config = path_runtime.joinpath(
51
+ "fabricks",
52
+ f"conf.{spark.conf.get('spark.databricks.clusterUsageTags.clusterOwnerOrgId')}.yml",
53
+ ).string
54
+
55
+ path_config = Path(config, assume_git=True)
56
+
57
+ # path to notebooks
58
+ notebooks = os.environ.get("FABRICKS_NOTEBOOKS", "none")
59
+ notebooks = None if notebooks.lower() == "none" else notebooks
60
+ if notebooks is None:
61
+ if notebooks := file_config.get("notebooks"):
62
+ assert file_path is not None
63
+ notebooks = file_path.joinpath(notebooks)
64
+ logger.debug(f"resolve notebooks from {origin} file", extra={"label": "config"})
65
+ else:
66
+ logger.debug("resolve notebooks from env", extra={"label": "config"})
67
+
68
+ if notebooks is None:
69
+ logger.debug("resolve notebooks from default path", extra={"label": "config"})
70
+ notebooks = path_runtime.joinpath("notebooks")
71
+
72
+ path_notebooks = Path(str(notebooks), assume_git=True)
73
+
74
+ # job config from yaml
75
+ is_job_config_from_yaml = os.environ.get("FABRICKS_IS_JOB_CONFIG_FROM_YAML", None)
76
+ if is_job_config_from_yaml is None:
77
+ if is_job_config_from_yaml := file_config.get("job_config_from_yaml"):
78
+ logger.debug(f"resolve job_config_from_yaml from {origin} file", extra={"label": "config"})
79
+ else:
80
+ logger.debug("resolve job_config_from_yaml from env", extra={"label": "config"})
81
+
82
+ # debug mode
83
+ is_debugmode = os.environ.get("FABRICKS_IS_DEBUGMODE", None)
84
+ if is_debugmode is None:
85
+ if is_debugmode := file_config.get("debugmode"):
86
+ logger.debug(f"resolve debugmode from {origin} file", extra={"label": "config"})
87
+ else:
88
+ logger.debug("resolve debugmode from env", extra={"label": "config"})
89
+
90
+ # dev mode
91
+ is_devmode = os.environ.get("FABRICKS_IS_DEVMODE", None)
92
+ if is_devmode is None:
93
+ if is_devmode := file_config.get("devmode"):
94
+ logger.debug(f"resolve devmode from {origin} file", extra={"label": "config"})
95
+ else:
96
+ logger.debug("resolve devmode from env", extra={"label": "config"})
97
+
98
+ # log level
99
+ loglevel = os.environ.get("FABRICKS_LOGLEVEL", None)
100
+ if loglevel is None:
101
+ if loglevel := file_config.get("loglevel"):
102
+ logger.debug(f"resolve loglevel from {origin} file", extra={"label": "config"})
103
+ else:
104
+ logger.debug("resolve loglevel from env", extra={"label": "config"})
105
+
106
+ loglevel = loglevel.upper() if loglevel else "INFO"
107
+ if loglevel == "DEBUG":
108
+ _loglevel = logging.DEBUG
109
+ elif loglevel == "INFO":
110
+ _loglevel = logging.INFO
111
+ elif loglevel == "WARNING":
112
+ _loglevel = logging.WARNING
113
+ elif loglevel == "ERROR":
114
+ _loglevel = logging.ERROR
115
+ elif loglevel == "CRITICAL":
116
+ _loglevel = logging.CRITICAL
117
+ else:
118
+ raise ValueError(f"could not resolve {loglevel} (DEBUG, INFO, WARNING, ERROR or CRITICAL)")
119
+
120
+ # Constants
121
+ PATH_CONFIG: Final[Path] = path_config
122
+ PATH_RUNTIME: Final[Path] = path_runtime
123
+ PATH_NOTEBOOKS: Final[Path] = path_notebooks
124
+ IS_JOB_CONFIG_FROM_YAML: Final[bool] = str(is_job_config_from_yaml).lower() in ("true", "1", "yes")
125
+ IS_DEBUGMODE: Final[bool] = str(is_debugmode).lower() in ("true", "1", "yes")
126
+ IS_DEVMODE: Final[bool] = str(is_devmode).lower() in ("true", "1", "yes")
127
+ LOGLEVEL: Final[int] = _loglevel
@@ -1,3 +1,8 @@
1
+ from typing import List
2
+
3
+ from fabricks.utils.path import Path
4
+
5
+
1
6
  def get_config_from_toml():
2
7
  import os
3
8
  import pathlib
@@ -44,10 +49,33 @@ def get_config_from_json():
44
49
  def get_config_from_file():
45
50
  json_path, json_config = get_config_from_json()
46
51
  if json_config:
47
- return json_path, json_config
52
+ return json_path, json_config, "json"
48
53
 
49
54
  pyproject_path, pyproject_config = get_config_from_toml()
50
55
  if pyproject_config:
51
- return pyproject_path, pyproject_config
56
+ return pyproject_path, pyproject_config, "pyproject"
52
57
 
53
- return None, {}
58
+ return None, {}, None
59
+
60
+
61
+ def get_storage_paths(objects: List[dict], variables: dict) -> dict:
62
+ d = {}
63
+ for o in objects:
64
+ if o:
65
+ name = o.get("name")
66
+ assert name
67
+ uri = o.get("path_options", {}).get("storage")
68
+ assert uri
69
+ d[name] = Path.from_uri(uri, regex=variables)
70
+ return d
71
+
72
+
73
+ def get_runtime_path(objects: List[dict], root: Path) -> dict:
74
+ d = {}
75
+ for o in objects:
76
+ name = o.get("name")
77
+ assert name
78
+ uri = o.get("path_options", {}).get("runtime")
79
+ assert uri
80
+ d[name] = root.joinpath(uri)
81
+ return d
@@ -1,11 +1,12 @@
1
- from typing import Final, List, Optional
1
+ from typing import Final, Optional
2
2
 
3
3
  import yaml
4
4
 
5
- from fabricks.context.config import path_config, path_runtime
5
+ from fabricks.context.config import PATH_CONFIG, PATH_RUNTIME
6
+ from fabricks.context.helpers import get_runtime_path, get_storage_paths
6
7
  from fabricks.utils.path import Path
7
8
 
8
- with open(str(path_config)) as f:
9
+ with open(str(PATH_CONFIG)) as f:
9
10
  data = yaml.safe_load(f)
10
11
 
11
12
  conf: dict = [d["conf"] for d in data][0]
@@ -51,67 +52,42 @@ FABRICKS_STORAGE_CREDENTIAL: Final[Optional[str]] = path_options.get("storage_cr
51
52
 
52
53
  path_udfs = path_options.get("udfs", "fabricks/udfs")
53
54
  assert path_udfs, "path to udfs mandatory"
54
- PATH_UDFS: Final[Path] = path_runtime.joinpath(path_udfs)
55
+ PATH_UDFS: Final[Path] = PATH_RUNTIME.joinpath(path_udfs)
55
56
 
56
57
  path_parsers = path_options.get("parsers", "fabricks/parsers")
57
58
  assert path_parsers, "path to parsers mandatory"
58
- PATH_PARSERS: Final[Path] = path_runtime.joinpath(path_parsers)
59
+ PATH_PARSERS: Final[Path] = PATH_RUNTIME.joinpath(path_parsers)
59
60
 
60
61
  path_extenders = path_options.get("extenders", "fabricks/extenders")
61
62
  assert path_extenders, "path to extenders mandatory"
62
- PATH_EXTENDERS: Final[Path] = path_runtime.joinpath(path_extenders)
63
+ PATH_EXTENDERS: Final[Path] = PATH_RUNTIME.joinpath(path_extenders)
63
64
 
64
65
  path_views = path_options.get("views", "fabricks/views")
65
66
  assert path_views, "path to views mandatory"
66
- PATH_VIEWS: Final[Path] = path_runtime.joinpath(path_views)
67
+ PATH_VIEWS: Final[Path] = PATH_RUNTIME.joinpath(path_views)
67
68
 
68
69
  path_schedules = path_options.get("schedules", "fabricks/schedules")
69
70
  assert path_schedules, "path to schedules mandatory"
70
- PATH_SCHEDULES: Final[Path] = path_runtime.joinpath(path_schedules)
71
+ PATH_SCHEDULES: Final[Path] = PATH_RUNTIME.joinpath(path_schedules)
71
72
 
72
73
  path_requirements = path_options.get("requirements", "fabricks/requirements")
73
74
  assert path_requirements, "path to requirements mandatory"
74
- PATH_REQUIREMENTS: Final[Path] = path_runtime.joinpath(path_requirements)
75
+ PATH_REQUIREMENTS: Final[Path] = PATH_RUNTIME.joinpath(path_requirements)
75
76
 
76
77
  path_masks = path_options.get("masks", "fabricks/masks")
77
78
  assert path_masks, "path to masks mandatory"
78
- PATH_MASKS: Final[Path] = path_runtime.joinpath(path_masks)
79
-
80
-
81
- def _get_storage_paths(objects: List[dict]) -> dict:
82
- d = {}
83
- for o in objects:
84
- if o:
85
- name = o.get("name")
86
- assert name
87
- uri = o.get("path_options", {}).get("storage")
88
- assert uri
89
- d[name] = Path.from_uri(uri, regex=variables)
90
- return d
91
-
79
+ PATH_MASKS: Final[Path] = PATH_RUNTIME.joinpath(path_masks)
92
80
 
93
81
  PATHS_STORAGE: Final[dict[str, Path]] = {
94
82
  "fabricks": FABRICKS_STORAGE,
95
- **_get_storage_paths(BRONZE),
96
- **_get_storage_paths(SILVER),
97
- **_get_storage_paths(GOLD),
98
- **_get_storage_paths(databases),
83
+ **get_storage_paths(BRONZE, variables),
84
+ **get_storage_paths(SILVER, variables),
85
+ **get_storage_paths(GOLD, variables),
86
+ **get_storage_paths(databases, variables),
99
87
  }
100
88
 
101
-
102
- def _get_runtime_path(objects: List[dict]) -> dict:
103
- d = {}
104
- for o in objects:
105
- name = o.get("name")
106
- assert name
107
- uri = o.get("path_options", {}).get("runtime")
108
- assert uri
109
- d[name] = path_runtime.joinpath(uri)
110
- return d
111
-
112
-
113
89
  PATHS_RUNTIME: Final[dict[str, Path]] = {
114
- **_get_runtime_path(BRONZE),
115
- **_get_runtime_path(SILVER),
116
- **_get_runtime_path(GOLD),
90
+ **get_runtime_path(BRONZE, PATH_RUNTIME),
91
+ **get_runtime_path(SILVER, PATH_RUNTIME),
92
+ **get_runtime_path(GOLD, PATH_RUNTIME),
117
93
  }
@@ -10,7 +10,7 @@ from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_ex
10
10
 
11
11
  from fabricks.context import PATH_NOTEBOOKS
12
12
  from fabricks.core.dags.base import BaseDags
13
- from fabricks.core.dags.log import LOGGER
13
+ from fabricks.core.dags.log import LOGGER, TABLE_LOG_HANDLER
14
14
  from fabricks.core.dags.run import run
15
15
  from fabricks.core.jobs.base._types import TStep
16
16
  from fabricks.core.steps.get_step import get_step
@@ -148,7 +148,9 @@ class DagProcessor(BaseDags):
148
148
  finally:
149
149
  j["Status"] = "ok"
150
150
  self.table.upsert(j)
151
+
151
152
  LOGGER.info("end", extra=self.extra(j))
153
+ TABLE_LOG_HANDLER.flush()
152
154
 
153
155
  dependencies = self.table.query(f"PartitionKey eq 'dependencies' and ParentId eq '{j.get('JobId')}'")
154
156
  self.table.delete(dependencies)
@@ -336,7 +336,7 @@ class Generator(Configurator):
336
336
 
337
337
  comment = self.options.table.get("comment")
338
338
  if comment:
339
- self.table.add_comment(comment=comment)
339
+ self.table.add_table_comment(comment=comment)
340
340
 
341
341
  else:
342
342
  DEFAULT_LOGGER.debug("table exists, skip creation", extra={"label": self})
@@ -389,6 +389,24 @@ class Generator(Configurator):
389
389
  def overwrite_schema(self, df: Optional[DataFrame] = None):
390
390
  self._update_schema(df=df, overwrite=True)
391
391
 
392
+ def update_comments(self, table: Optional[bool] = True, columns: Optional[bool] = True):
393
+ if self.virtual:
394
+ return
395
+
396
+ if self.persist:
397
+ self.table.drop_comments()
398
+
399
+ if table:
400
+ comment = self.options.table.get("comment")
401
+ if comment:
402
+ self.table.add_table_comment(comment=comment)
403
+
404
+ if columns:
405
+ comments = self.options.table.get_dict("comments")
406
+ if comments:
407
+ for col, comment in comments.items():
408
+ self.table.add_column_comment(column=col, comment=comment)
409
+
392
410
  def get_differences_with_deltatable(self, df: Optional[DataFrame] = None):
393
411
  if df is None:
394
412
  df = self.get_data(stream=self.stream)
@@ -276,6 +276,7 @@ def create_or_replace_logs_pivot_view():
276
276
  l.step,
277
277
  l.job,
278
278
  l.job_id,
279
+ -- flags
279
280
  collect_set(l.status) as statuses,
280
281
  array_contains(statuses, 'skipped') as skipped,
281
282
  array_contains(statuses, 'warned') as warned,
@@ -283,15 +284,19 @@ def create_or_replace_logs_pivot_view():
283
284
  array_contains(statuses, 'failed') or (not done and not skipped) as failed,
284
285
  not done and not failed and not skipped and array_contains(statuses, 'running') as timed_out,
285
286
  not array_contains(statuses, 'running') as cancelled,
287
+ --
286
288
  max(l.notebook_id) as notebook_id,
289
+ --
290
+ max(l.timestamp) filter (where l.status = 'running') as start_time,
291
+ max(l.timestamp) filter (where l.status in ('done', 'ok')) as end_time,
292
+ --
287
293
  max(l.timestamp) filter (where l.status = 'scheduled' ) as scheduled_time,
288
294
  max(l.timestamp) filter (where l.status = 'waiting' ) as waiting_time,
289
- max(l.timestamp) filter (where l.status = 'running') as start_time,
290
295
  max(l.timestamp) filter (where l.status = 'running' ) as running_time,
291
296
  max(l.timestamp) filter (where l.status = 'done' ) as done_time,
292
297
  max(l.timestamp) filter (where l.status = 'failed' ) as failed_time,
293
- max(l.timestamp) filter(where l.status = 'ok') as end_time,
294
- max(l.timestamp) filter(where l.status = 'ok') as ok_time,
298
+ max(l.timestamp) filter (where l.status = 'ok') as ok_time,
299
+ --
295
300
  max(l.exception) as exception
296
301
  from
297
302
  fabricks.logs l
@@ -666,7 +666,45 @@ class Table(DbObject):
666
666
  """
667
667
  )
668
668
 
669
- def add_comment(self, comment: str):
669
+ def drop_comments(self):
670
+ self.drop_table_comment()
671
+ for col in self.columns:
672
+ self.drop_column_comment(col)
673
+
674
+ def drop_table_comment(self):
675
+ assert self.registered, f"{self} not registered"
676
+
677
+ DEFAULT_LOGGER.debug("drop table comment", extra={"label": self})
678
+ self.spark.sql(
679
+ f"""
680
+ comment on table {self.qualified_name}
681
+ is null;
682
+ """
683
+ )
684
+
685
+ def drop_column_comment(self, column: str):
686
+ assert self.registered, f"{self} not registered"
687
+
688
+ DEFAULT_LOGGER.debug(f"drop comment from column {column}", extra={"label": self})
689
+ self.spark.sql(
690
+ f"""
691
+ comment on column {self.qualified_name}.`{column}`
692
+ is null;
693
+ """
694
+ )
695
+
696
+ def add_column_comment(self, column: str, comment: str):
697
+ assert self.registered, f"{self} not registered"
698
+
699
+ DEFAULT_LOGGER.debug(f"add comment '{comment}' to column {column}", extra={"label": self})
700
+ self.spark.sql(
701
+ f"""
702
+ comment on column {self.qualified_name}.`{column}`
703
+ is '{comment}';
704
+ """
705
+ )
706
+
707
+ def add_table_comment(self, comment: str):
670
708
  assert self.registered, f"{self} not registered"
671
709
 
672
710
  DEFAULT_LOGGER.debug(f"add comment '{comment}'", extra={"label": self})
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fabricks"
3
- version = "3.0.11"
3
+ version = "3.0.12"
4
4
  description = ""
5
5
  authors = [
6
6
  { name = "BMS DWH Team", email = "bi_support@bmsuisse.ch" },
@@ -645,7 +645,7 @@ wheels = [
645
645
 
646
646
  [[package]]
647
647
  name = "fabricks"
648
- version = "3.0.11"
648
+ version = "3.0.12"
649
649
  source = { editable = "." }
650
650
  dependencies = [
651
651
  { name = "azure-data-tables" },
@@ -1,92 +0,0 @@
1
- import logging
2
- import os
3
- from typing import Final
4
-
5
- from fabricks.context.config.utils import get_config_from_file
6
- from fabricks.utils.path import Path
7
- from fabricks.utils.spark import spark
8
-
9
- file_path, file_config = get_config_from_file()
10
-
11
- runtime = os.environ.get("FABRICKS_RUNTIME", "none")
12
- runtime = None if runtime.lower() == "none" else runtime
13
- if runtime is None:
14
- if runtime := file_config.get("runtime"):
15
- assert file_path is not None
16
- runtime = file_path.joinpath(runtime)
17
-
18
- if runtime is None:
19
- if file_path is not None:
20
- runtime = file_path
21
- else:
22
- raise ValueError(
23
- "could not resolve runtime (could not find pyproject.toml nor fabricksconfig.json nor FABRICKS_RUNTIME)"
24
- )
25
-
26
- path_runtime = Path(runtime, assume_git=True)
27
- PATH_RUNTIME: Final[Path] = path_runtime
28
-
29
- notebooks = os.environ.get("FABRICKS_NOTEBOOKS", "none")
30
- notebooks = None if notebooks.lower() == "none" else notebooks
31
- if notebooks is None:
32
- if notebooks := file_config.get("notebooks"):
33
- assert file_path is not None
34
- notebooks = file_path.joinpath(notebooks)
35
-
36
- notebooks = notebooks if notebooks else path_runtime.joinpath("notebooks")
37
- PATH_NOTEBOOKS: Final[Path] = Path(str(notebooks), assume_git=True)
38
-
39
- is_job_config_from_yaml = os.environ.get("FABRICKS_IS_JOB_CONFIG_FROM_YAML", None)
40
- if is_job_config_from_yaml is None:
41
- assert file_path is not None
42
- is_job_config_from_yaml = file_config.get("job_config_from_yaml")
43
-
44
- IS_JOB_CONFIG_FROM_YAML: Final[bool] = str(is_job_config_from_yaml).lower() in ("true", "1", "yes")
45
-
46
- is_debugmode = os.environ.get("FABRICKS_IS_DEBUGMODE", None)
47
- if is_debugmode is None:
48
- is_debugmode = file_config.get("debugmode")
49
-
50
- IS_DEBUGMODE: Final[bool] = str(is_debugmode).lower() in ("true", "1", "yes")
51
-
52
- is_devmode = os.environ.get("FABRICKS_IS_DEVMODE", None)
53
- if is_devmode is None:
54
- is_devmode = file_config.get("devmode")
55
-
56
- IS_DEVMODE: Final[bool] = str(is_devmode).lower() in ("true", "1", "yes")
57
-
58
- loglevel = os.environ.get("FABRICKS_LOGLEVEL", None)
59
- if loglevel is None:
60
- loglevel = file_config.get("loglevel")
61
-
62
- loglevel = loglevel.upper() if loglevel else "INFO"
63
- if loglevel == "DEBUG":
64
- _loglevel = logging.DEBUG
65
- elif loglevel == "INFO":
66
- _loglevel = logging.INFO
67
- elif loglevel == "WARNING":
68
- _loglevel = logging.WARNING
69
- elif loglevel == "ERROR":
70
- _loglevel = logging.ERROR
71
- elif loglevel == "CRITICAL":
72
- _loglevel = logging.CRITICAL
73
- else:
74
- raise ValueError(f"could not resolve {loglevel} (DEBUG, INFO, WARNING, ERROR or CRITICAL)")
75
-
76
- LOGLEVEL = _loglevel
77
-
78
- path_config = os.environ.get("FABRICKS_CONFIG")
79
- if path_config is None:
80
- if path_config := file_config.get("config"):
81
- assert file_path is not None
82
- path_config = file_path.joinpath(path_config)
83
- else:
84
- path_config = PATH_RUNTIME.joinpath(path_config).string if path_config else None
85
-
86
- if not path_config:
87
- path_config = PATH_RUNTIME.joinpath(
88
- "fabricks",
89
- f"conf.{spark.conf.get('spark.databricks.clusterUsageTags.clusterOwnerOrgId')}.yml",
90
- ).string
91
-
92
- PATH_CONFIG: Final[Path] = Path(path_config, assume_git=True)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes