fabricks 3.0.16__py3-none-any.whl → 3.0.18__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fabricks/cdc/base/configurator.py +2 -7
- fabricks/cdc/base/processor.py +5 -0
- fabricks/cdc/templates/ctes/base.sql.jinja +6 -2
- fabricks/cdc/templates/queries/context.sql.jinja +3 -0
- fabricks/context/_types.py +4 -0
- fabricks/core/jobs/base/generator.py +41 -31
- fabricks/core/jobs/bronze.py +6 -1
- fabricks/core/jobs/gold.py +3 -3
- fabricks/core/udfs.py +8 -8
- fabricks/metastore/table.py +8 -0
- {fabricks-3.0.16.dist-info → fabricks-3.0.18.dist-info}/METADATA +1 -1
- {fabricks-3.0.16.dist-info → fabricks-3.0.18.dist-info}/RECORD +13 -13
- {fabricks-3.0.16.dist-info → fabricks-3.0.18.dist-info}/WHEEL +0 -0
|
@@ -90,6 +90,7 @@ class Configurator(ABC):
|
|
|
90
90
|
"__identity",
|
|
91
91
|
"__source",
|
|
92
92
|
"__key",
|
|
93
|
+
"__hash",
|
|
93
94
|
"__timestamp",
|
|
94
95
|
"__valid_from",
|
|
95
96
|
"__valid_to",
|
|
@@ -110,7 +111,6 @@ class Configurator(ABC):
|
|
|
110
111
|
cols = [
|
|
111
112
|
"__operation",
|
|
112
113
|
"__metadata",
|
|
113
|
-
"__hash",
|
|
114
114
|
"__rescued_data",
|
|
115
115
|
]
|
|
116
116
|
|
|
@@ -126,6 +126,7 @@ class Configurator(ABC):
|
|
|
126
126
|
"__identity",
|
|
127
127
|
"__source",
|
|
128
128
|
"__key",
|
|
129
|
+
"__hash",
|
|
129
130
|
"__timestamp",
|
|
130
131
|
"__valid_from",
|
|
131
132
|
"__valid_to",
|
|
@@ -134,7 +135,6 @@ class Configurator(ABC):
|
|
|
134
135
|
# Trailing
|
|
135
136
|
"__operation",
|
|
136
137
|
"__metadata",
|
|
137
|
-
"__hash",
|
|
138
138
|
"__rescued_data",
|
|
139
139
|
]
|
|
140
140
|
|
|
@@ -192,11 +192,6 @@ class Configurator(ABC):
|
|
|
192
192
|
leading = self.allowed_ouput_leading__columns
|
|
193
193
|
trailing = self.allowed_output_trailing__columns
|
|
194
194
|
|
|
195
|
-
# move __hash to the front of the table to ensure statistics are present
|
|
196
|
-
if "__key" not in columns and "__hash" in columns:
|
|
197
|
-
leading = ["__hash" if c == "__key" else c for c in leading]
|
|
198
|
-
trailing = [c for c in trailing if c != "__hash"]
|
|
199
|
-
|
|
200
195
|
__leading = [c for c in leading if c in columns]
|
|
201
196
|
__trailing = [c for c in trailing if c in columns]
|
|
202
197
|
|
fabricks/cdc/base/processor.py
CHANGED
|
@@ -51,6 +51,7 @@ class Processor(Generator):
|
|
|
51
51
|
|
|
52
52
|
overwrite = []
|
|
53
53
|
exclude = kwargs.get("exclude", []) # used by silver to exclude __operation from output if not update
|
|
54
|
+
cast = kwargs.get("cast", {}) # used by silver to cast columns to target types
|
|
54
55
|
|
|
55
56
|
order_duplicate_by = kwargs.get("order_duplicate_by", None)
|
|
56
57
|
if order_duplicate_by:
|
|
@@ -140,6 +141,8 @@ class Processor(Generator):
|
|
|
140
141
|
# override timestamp if added and found in df
|
|
141
142
|
if add_timestamp and "__timestamp" in inputs:
|
|
142
143
|
overwrite.append("__timestamp")
|
|
144
|
+
elif "__timestamp" in inputs:
|
|
145
|
+
cast["__timestamp"] = "timestamp"
|
|
143
146
|
|
|
144
147
|
# override key if added and found in df (key needed for merge)
|
|
145
148
|
if add_key and "__key" in inputs:
|
|
@@ -356,6 +359,8 @@ class Processor(Generator):
|
|
|
356
359
|
"correct_valid_from": correct_valid_from,
|
|
357
360
|
# overwrite
|
|
358
361
|
"overwrite": overwrite,
|
|
362
|
+
# cast
|
|
363
|
+
"cast": cast,
|
|
359
364
|
# filter
|
|
360
365
|
"slices": None,
|
|
361
366
|
"sources": None,
|
|
@@ -5,10 +5,14 @@ with
|
|
|
5
5
|
__base as (
|
|
6
6
|
select
|
|
7
7
|
*
|
|
8
|
-
{% if overwrite %}
|
|
8
|
+
{% if overwrite or cast %}
|
|
9
9
|
-- will be overwritten below
|
|
10
|
-
except (
|
|
10
|
+
except (
|
|
11
|
+
{% for o in overwrite %}{{ o }}, {% endfor %}
|
|
12
|
+
{% for key, value in cast.items() %} {{ key }}, {% endfor %}
|
|
13
|
+
)
|
|
11
14
|
{% endif %},
|
|
15
|
+
{% for key, value in cast.items() %} cast({{ key }} as {{ value }}) as {{ key }}, {% endfor %}
|
|
12
16
|
{% if add_calculated_columns %} {% for c in add_calculated_columns %} {{ c }}, {% endfor %} {% endif %}
|
|
13
17
|
{% if add_timestamp %} cast(current_date() as timestamp) as __timestamp, {% endif %}
|
|
14
18
|
{% if add_operation %} cast('{{ add_operation }}' as string) as __operation, {% endif %}
|
|
@@ -141,6 +141,9 @@
|
|
|
141
141
|
{%- if overwrite %}
|
|
142
142
|
☐ overwrite: {{ overwrite | join(", ") | truncate(100, killwords=True) }}
|
|
143
143
|
{%- endif %}
|
|
144
|
+
{%- if cast %}
|
|
145
|
+
☐ cast: {{ cast | join(", ") | truncate(100, killwords=True) }}
|
|
146
|
+
{%- endif %}
|
|
144
147
|
|
|
145
148
|
👨👩👧 PARENTS
|
|
146
149
|
{%- if parent_slice %}
|
fabricks/context/_types.py
CHANGED
|
@@ -16,6 +16,9 @@ class RuntimeTimeoutOptions(TypedDict):
|
|
|
16
16
|
pre_run: int
|
|
17
17
|
post_run: int
|
|
18
18
|
|
|
19
|
+
class UDFOptions(TypedDict):
|
|
20
|
+
prefix: Optional[str]
|
|
21
|
+
schema: Optional[str]
|
|
19
22
|
|
|
20
23
|
class StepTimeoutOptions(TypedDict):
|
|
21
24
|
step: Optional[int]
|
|
@@ -123,6 +126,7 @@ class Conf(TypedDict):
|
|
|
123
126
|
options: RuntimeOptions
|
|
124
127
|
path_options: RuntimePathOptions
|
|
125
128
|
extender_options: Optional[ExtenderOptions]
|
|
129
|
+
udf_options: Optional[UDFOptions]
|
|
126
130
|
spark_options: SparkOptions
|
|
127
131
|
bronze: Optional[List[Bronze]]
|
|
128
132
|
silver: Optional[List[Silver]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
|
-
from typing import Optional, Sequence, Union, cast
|
|
2
|
+
from typing import List, Optional, Sequence, Union, cast
|
|
3
3
|
|
|
4
4
|
from pyspark.sql import DataFrame
|
|
5
5
|
from pyspark.sql.functions import lit
|
|
@@ -166,6 +166,31 @@ class Generator(Configurator):
|
|
|
166
166
|
"""
|
|
167
167
|
...
|
|
168
168
|
|
|
169
|
+
def _get_clustering_columns(self, df: DataFrame) -> Optional[List[str]]:
|
|
170
|
+
columns = self.options.table.get_list("cluster_by")
|
|
171
|
+
if columns:
|
|
172
|
+
return columns
|
|
173
|
+
|
|
174
|
+
columns = []
|
|
175
|
+
|
|
176
|
+
if "__source" in df.columns:
|
|
177
|
+
columns = ["__source"]
|
|
178
|
+
if "__is_current" in df.columns:
|
|
179
|
+
columns.append("__is_current")
|
|
180
|
+
|
|
181
|
+
if "__key" in df.columns:
|
|
182
|
+
columns.append("__key")
|
|
183
|
+
elif "__hash" in df.columns:
|
|
184
|
+
columns.append("__hash")
|
|
185
|
+
|
|
186
|
+
if columns:
|
|
187
|
+
DEFAULT_LOGGER.debug(f"found clustering columns ({', '.join(columns)})", extra={"label": self})
|
|
188
|
+
return columns
|
|
189
|
+
|
|
190
|
+
else:
|
|
191
|
+
DEFAULT_LOGGER.debug("could not determine any clustering column", extra={"label": self})
|
|
192
|
+
return None
|
|
193
|
+
|
|
169
194
|
def create_table(self):
|
|
170
195
|
def _create_table(df: DataFrame, batch: Optional[int] = 0):
|
|
171
196
|
df = self.base_transform(df)
|
|
@@ -242,20 +267,13 @@ class Generator(Configurator):
|
|
|
242
267
|
cluster_by = []
|
|
243
268
|
|
|
244
269
|
else:
|
|
245
|
-
cluster_by = self.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
cluster_by.append("__key")
|
|
253
|
-
elif "__hash" in df.columns:
|
|
254
|
-
cluster_by.append("__hash")
|
|
255
|
-
|
|
256
|
-
if not cluster_by:
|
|
257
|
-
DEFAULT_LOGGER.debug("could not determine clustering column", extra={"label": self})
|
|
258
|
-
liquid_clustering = False
|
|
270
|
+
cluster_by = self._get_clustering_columns(df)
|
|
271
|
+
|
|
272
|
+
if cluster_by:
|
|
273
|
+
liquid_clustering = True
|
|
274
|
+
|
|
275
|
+
else:
|
|
276
|
+
liquid_clustering = None
|
|
259
277
|
cluster_by = None
|
|
260
278
|
|
|
261
279
|
if liquid_clustering is None:
|
|
@@ -446,20 +464,12 @@ class Generator(Configurator):
|
|
|
446
464
|
enable = enable_step
|
|
447
465
|
|
|
448
466
|
if enable:
|
|
449
|
-
cluster_by = self.
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
cluster_by.append("__key")
|
|
457
|
-
elif "__hash" in df.columns:
|
|
458
|
-
cluster_by.append("__hash")
|
|
459
|
-
|
|
460
|
-
if len(cluster_by) > 0:
|
|
461
|
-
self.table.enable_liquid_clustering(cluster_by, auto=False)
|
|
462
|
-
else:
|
|
463
|
-
self.table.enable_liquid_clustering(auto=True)
|
|
467
|
+
cluster_by = self._get_clustering_columns(df)
|
|
468
|
+
|
|
469
|
+
if cluster_by and len(cluster_by) > 0:
|
|
470
|
+
self.table.enable_liquid_clustering(cluster_by, auto=False)
|
|
471
|
+
else:
|
|
472
|
+
self.table.enable_liquid_clustering(auto=True)
|
|
473
|
+
|
|
464
474
|
else:
|
|
465
|
-
DEFAULT_LOGGER.debug("
|
|
475
|
+
DEFAULT_LOGGER.debug("liquid clustering disabled", extra={"label": self})
|
fabricks/core/jobs/bronze.py
CHANGED
|
@@ -2,7 +2,7 @@ from typing import Optional, Sequence, Union, cast
|
|
|
2
2
|
|
|
3
3
|
from pyspark.sql import DataFrame
|
|
4
4
|
from pyspark.sql.functions import expr, lit, md5
|
|
5
|
-
from pyspark.sql.types import Row
|
|
5
|
+
from pyspark.sql.types import Row, TimestampType
|
|
6
6
|
|
|
7
7
|
from fabricks.cdc.nocdc import NoCDC
|
|
8
8
|
from fabricks.context import VARIABLES
|
|
@@ -91,6 +91,11 @@ class Bronze(BaseJob):
|
|
|
91
91
|
try:
|
|
92
92
|
df = self.spark.sql(f"select * from {file_format}.`{self.data_path}`")
|
|
93
93
|
assert len(df.columns) > 1, "external table must have at least one column"
|
|
94
|
+
if "__timestamp" in df.columns:
|
|
95
|
+
assert isinstance(df.schema["__timestamp"].dataType, TimestampType), (
|
|
96
|
+
"__timestamp must be of type timestamp"
|
|
97
|
+
)
|
|
98
|
+
|
|
94
99
|
except Exception as e:
|
|
95
100
|
DEFAULT_LOGGER.exception("read external table failed", extra={"label": self})
|
|
96
101
|
raise e
|
fabricks/core/jobs/gold.py
CHANGED
|
@@ -10,7 +10,7 @@ from fabricks.cdc.nocdc import NoCDC
|
|
|
10
10
|
from fabricks.context.log import DEFAULT_LOGGER
|
|
11
11
|
from fabricks.core.jobs.base._types import JobDependency, TGold
|
|
12
12
|
from fabricks.core.jobs.base.job import BaseJob
|
|
13
|
-
from fabricks.core.udfs import is_registered, register_udf
|
|
13
|
+
from fabricks.core.udfs import is_registered, register_udf, udf_prefix
|
|
14
14
|
from fabricks.metastore.view import create_or_replace_global_temp_view
|
|
15
15
|
from fabricks.utils.path import Path
|
|
16
16
|
from fabricks.utils.sqlglot import fix, get_tables
|
|
@@ -90,8 +90,8 @@ class Gold(BaseJob):
|
|
|
90
90
|
|
|
91
91
|
else:
|
|
92
92
|
matches = []
|
|
93
|
-
if "
|
|
94
|
-
r = re.compile(
|
|
93
|
+
if f"{udf_prefix}" in self.sql:
|
|
94
|
+
r = re.compile(rf"(?<={udf_prefix})\w*(?=\()")
|
|
95
95
|
matches = re.findall(r, self.sql)
|
|
96
96
|
matches = set(matches)
|
|
97
97
|
matches = list(matches)
|
fabricks/core/udfs.py
CHANGED
|
@@ -5,11 +5,13 @@ from typing import Callable, List, Optional
|
|
|
5
5
|
|
|
6
6
|
from pyspark.sql import SparkSession
|
|
7
7
|
|
|
8
|
-
from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK
|
|
8
|
+
from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK, CONF_RUNTIME
|
|
9
9
|
from fabricks.context.log import DEFAULT_LOGGER
|
|
10
10
|
|
|
11
11
|
UDFS: dict[str, Callable] = {}
|
|
12
12
|
|
|
13
|
+
udf_schema = CONF_RUNTIME.get("udf_options", {}).get("schema", "default")
|
|
14
|
+
udf_prefix = CONF_RUNTIME.get("udf_options", {}).get("prefix", "udf_")
|
|
13
15
|
|
|
14
16
|
def register_all_udfs(extension: Optional[str] = None, override: bool = False):
|
|
15
17
|
"""
|
|
@@ -47,12 +49,12 @@ def is_registered(udf: str, spark: Optional[SparkSession] = None) -> bool:
|
|
|
47
49
|
spark = SPARK
|
|
48
50
|
assert spark is not None
|
|
49
51
|
|
|
50
|
-
df = spark.sql("show user functions in
|
|
52
|
+
df = spark.sql(f"show user functions in {udf_schema}")
|
|
51
53
|
|
|
52
54
|
if CATALOG:
|
|
53
|
-
df = df.where(f"function == '{CATALOG}.
|
|
55
|
+
df = df.where(f"function == '{CATALOG}.{udf_schema}.{udf_prefix}{udf}'")
|
|
54
56
|
else:
|
|
55
|
-
df = df.where(f"function == 'spark_catalog.
|
|
57
|
+
df = df.where(f"function == 'spark_catalog.{udf_schema}.{udf_prefix}{udf}'")
|
|
56
58
|
|
|
57
59
|
return not df.isEmpty()
|
|
58
60
|
|
|
@@ -72,9 +74,9 @@ def register_udf(
|
|
|
72
74
|
|
|
73
75
|
if not is_registered(udf, spark) or override:
|
|
74
76
|
if override:
|
|
75
|
-
DEFAULT_LOGGER.debug(f"override udf {udf}")
|
|
77
|
+
DEFAULT_LOGGER.debug(f"override udf {udf}", extra={"label": "fabricks"})
|
|
76
78
|
else:
|
|
77
|
-
DEFAULT_LOGGER.debug(f"register udf {udf}")
|
|
79
|
+
DEFAULT_LOGGER.debug(f"register udf {udf}", extra={"label": "fabricks"})
|
|
78
80
|
|
|
79
81
|
if extension is None:
|
|
80
82
|
extension = get_extension(udf)
|
|
@@ -89,8 +91,6 @@ def register_udf(
|
|
|
89
91
|
elif extension == "py":
|
|
90
92
|
if not IS_UNITY_CATALOG:
|
|
91
93
|
assert path.exists(), f"udf not found ({path.string})"
|
|
92
|
-
else:
|
|
93
|
-
DEFAULT_LOGGER.debug(f"could not check if udf exists ({path.string})")
|
|
94
94
|
|
|
95
95
|
spec = importlib.util.spec_from_file_location(udf, path.string)
|
|
96
96
|
assert spec, f"no valid udf found ({path.string})"
|
fabricks/metastore/table.py
CHANGED
|
@@ -579,6 +579,14 @@ class Table(DbObject):
|
|
|
579
579
|
|
|
580
580
|
return self.spark.sql(f"describe detail {self.qualified_name}")
|
|
581
581
|
|
|
582
|
+
def get_partitions(self) -> List[str]:
|
|
583
|
+
assert self.registered, f"{self} not registered"
|
|
584
|
+
|
|
585
|
+
try:
|
|
586
|
+
return self.spark.sql(f"show partitions {self.qualified_name}").columns
|
|
587
|
+
except AnalysisException:
|
|
588
|
+
return []
|
|
589
|
+
|
|
582
590
|
def get_properties(self) -> DataFrame:
|
|
583
591
|
assert self.registered, f"{self} not registered"
|
|
584
592
|
|
|
@@ -38,15 +38,15 @@ fabricks/cdc/scd2.py,sha256=4vZkhc8pJAUlgiBmIw9j_2RsWuAFMcgCkU3WMVt0A-A,334
|
|
|
38
38
|
fabricks/cdc/base/__init__.py,sha256=kU4LmQ7x1rekCt8T3r83MmAQac6n2ov-Gh8mBbxIC48,157
|
|
39
39
|
fabricks/cdc/base/_types.py,sha256=WloCDC3ATrn0aZJ6E8BRYKZx19N3EE56r6qlBYhcuvQ,257
|
|
40
40
|
fabricks/cdc/base/cdc.py,sha256=9w5BqQxSVbFVEozJWmZQThqdppkE_SYi4fHSzJ7WMvA,78
|
|
41
|
-
fabricks/cdc/base/configurator.py,sha256=
|
|
41
|
+
fabricks/cdc/base/configurator.py,sha256=DzODL0wO0FqfmIMQKEofqQKYeOCR6vaO0Am92ctcAk4,6158
|
|
42
42
|
fabricks/cdc/base/generator.py,sha256=pa_GJn7Pdi5vMnXN8zExmOPMpCqdZ3QoxHEB0wv0lsk,5933
|
|
43
43
|
fabricks/cdc/base/merger.py,sha256=3qUUs0uqmwOMdXc50kV3Zo9omuQuUUFgtMLBrg4E-wk,4159
|
|
44
|
-
fabricks/cdc/base/processor.py,sha256=
|
|
44
|
+
fabricks/cdc/base/processor.py,sha256=hExUGGVOX1Px0IWw65MOaDeeUbSMtjRekLdqEQ0U6Mw,17921
|
|
45
45
|
fabricks/cdc/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
fabricks/cdc/templates/filter.sql.jinja,sha256=AQcOj4KRwKscVG3zepnEAN9Yxb03AM7068hqW7dtVI8,236
|
|
47
47
|
fabricks/cdc/templates/merge.sql.jinja,sha256=YS9wWckCVsUI1pUYiRSFBIuQ16WU3EPWSkhZVy2niBA,221
|
|
48
48
|
fabricks/cdc/templates/query.sql.jinja,sha256=Z0kSm9sRKJTLQ2Lb3NS7yu93GBxNls9HL7uAjTdirjk,868
|
|
49
|
-
fabricks/cdc/templates/ctes/base.sql.jinja,sha256=
|
|
49
|
+
fabricks/cdc/templates/ctes/base.sql.jinja,sha256=rtp5hRMxcoD3NupzlAFvH8BREKHUnLEirHvJCoOmQk8,1871
|
|
50
50
|
fabricks/cdc/templates/ctes/current.sql.jinja,sha256=bb72XdaJVce5k57dx_N6T4OfyQDUrFLulr3VM6irdn0,1278
|
|
51
51
|
fabricks/cdc/templates/ctes/deduplicate_hash.sql.jinja,sha256=DHcSNhAvoFZY0gSv3Zylat9ysGXKR22OGXs49KTNCjA,1095
|
|
52
52
|
fabricks/cdc/templates/ctes/deduplicate_key.sql.jinja,sha256=4-K4nk2Bfr_8c_x3YDYBP7JUx4c-b3Ef-7HFx0s2jrc,1122
|
|
@@ -61,14 +61,14 @@ fabricks/cdc/templates/merges/nocdc.sql.jinja,sha256=lA4-PXogC_u6RqummOQX_WBFCNq
|
|
|
61
61
|
fabricks/cdc/templates/merges/scd1.sql.jinja,sha256=GimfwgEobGgCzPce_FJdvQY9jmRJXFUZ4_CVhRgTTqY,1600
|
|
62
62
|
fabricks/cdc/templates/merges/scd2.sql.jinja,sha256=5qBO_1lr7xa-Ep8RqvJGCRISOv4uo_tiAtVOybp4tUU,1210
|
|
63
63
|
fabricks/cdc/templates/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
-
fabricks/cdc/templates/queries/context.sql.jinja,sha256=
|
|
64
|
+
fabricks/cdc/templates/queries/context.sql.jinja,sha256=x-t3CzdRaSXi8Xi7aYaNdIVyRwVOxmxw8xBZyfnFE40,3977
|
|
65
65
|
fabricks/cdc/templates/queries/final.sql.jinja,sha256=vxH434CO5k8Ia7tugaH8LC1co7Epaj7Z1M7Y9BdqzaI,111
|
|
66
66
|
fabricks/cdc/templates/queries/scd1.sql.jinja,sha256=siHULgKE3uRBGQYZFUR_eHNqFuGgO9xUCRVV2jnAXAI,3019
|
|
67
67
|
fabricks/cdc/templates/queries/scd2.sql.jinja,sha256=Nn0wUs9N-_QviZqUKRWAFdD17RR3EFBTMs9BpBu6z7E,3877
|
|
68
68
|
fabricks/cdc/templates/queries/nocdc/complete.sql.jinja,sha256=cVKKCSbiuuw1K7BOzfusX6KvzQNHU3YNUgoXgsu-c6k,267
|
|
69
69
|
fabricks/cdc/templates/queries/nocdc/update.sql.jinja,sha256=mjNUwGVhZ08yUkdv9sCTkqyW60p0YavtWTqvSUVrwjA,1283
|
|
70
70
|
fabricks/context/__init__.py,sha256=qfntJ9O6omzY_t6AhDP6Ndu9C5LMiVdWbo6ikhtoe7o,1446
|
|
71
|
-
fabricks/context/_types.py,sha256=
|
|
71
|
+
fabricks/context/_types.py,sha256=4eRV6oln6ToqybM2zrjtZNIvGa5TyxmuFYcID2U7XLc,2800
|
|
72
72
|
fabricks/context/config.py,sha256=EmLUnswuWfrncaNJMDjvdMg-1lD8aneKAY8IDna7VPE,4814
|
|
73
73
|
fabricks/context/helpers.py,sha256=igY8LwLIxzfOWKCg23XMsJoY7Bw0welpdNry2mKHjF0,1600
|
|
74
74
|
fabricks/context/log.py,sha256=CadrRf8iL6iXlGIGIhEIswa7wGqC-E-oLwWcGTyJ10s,2074
|
|
@@ -80,7 +80,7 @@ fabricks/core/__init__.py,sha256=LaqDi4xuyHAoLOvS44PQdZdRfq9SmVr7mB6BDHyxYpc,209
|
|
|
80
80
|
fabricks/core/extenders.py,sha256=oJzfv0hWxusnGmrjMwbrGyKfot8xzA4XtNquPWfFgPo,727
|
|
81
81
|
fabricks/core/job_schema.py,sha256=6-70oy0ZJd3V9AiXfc0Q8b8NVEynxQza_h7mB13uB-s,853
|
|
82
82
|
fabricks/core/masks.py,sha256=0ARgXE6stazRlfjE2v2sOdQWjAH2TbCOgtuD33BeZqE,1531
|
|
83
|
-
fabricks/core/udfs.py,sha256=
|
|
83
|
+
fabricks/core/udfs.py,sha256=U31yCnfINu9XVEy0w6R6TeUaSN4HJ_79N3hmMdd8eSk,3307
|
|
84
84
|
fabricks/core/views.py,sha256=52tekqeP0Xk5EPYO220YdfFbzItX6NnObROb-ye9COQ,1181
|
|
85
85
|
fabricks/core/dags/__init__.py,sha256=0DUKzVcXcROvxkN19P_kaOJ7da5BAM7Vt8EGQbp2KSY,240
|
|
86
86
|
fabricks/core/dags/base.py,sha256=tFj27SqeZUZ7pB_LOWkpdowZz5gj30JUANI4gWK3Pl8,3139
|
|
@@ -91,21 +91,21 @@ fabricks/core/dags/run.py,sha256=RIDULb9WakObSyYzmkglh8RwFRwC8-NFC-1yPDMkBC0,107
|
|
|
91
91
|
fabricks/core/dags/terminator.py,sha256=Y6pV2UnSyrCIx2AQWJXoHk5Roq12gZqpennHx_Lbnzs,793
|
|
92
92
|
fabricks/core/dags/utils.py,sha256=4kyobLGl4tO0Flo6LxNzYjCU_G42vns1LrkxTO5_KLY,1585
|
|
93
93
|
fabricks/core/jobs/__init__.py,sha256=W_1m6LoGiXBml_8cucedju_hllSSnZGKsZjyFh-2oJw,531
|
|
94
|
-
fabricks/core/jobs/bronze.py,sha256=
|
|
94
|
+
fabricks/core/jobs/bronze.py,sha256=mz3YDm4ft9sP51k4lUR6gmT1rkQBLvdaePAD3uo3m1c,14040
|
|
95
95
|
fabricks/core/jobs/get_job.py,sha256=35zay3Z_WoJIylzEQlGle6UvrE1EClfRbFEVGvszof0,3675
|
|
96
96
|
fabricks/core/jobs/get_job_conf.py,sha256=3vAj_usCbNqejMUKOF85LPaHBYAwxgrDG7LYgY-vBUw,4812
|
|
97
97
|
fabricks/core/jobs/get_job_id.py,sha256=6dLyzxGHlRvJZVJSwZkCk3iXzWkIhePC_6FhoP0gEN4,607
|
|
98
98
|
fabricks/core/jobs/get_jobs.py,sha256=nJ-8DPFq1GyzWo9Mxlwq2dEeAqwg1jeQg-CHietAb1Q,3341
|
|
99
99
|
fabricks/core/jobs/get_schedule.py,sha256=46pJR5LWZfuxUtLBmtB-RP6ng_W-K-ahJmD29KNmcGw,259
|
|
100
100
|
fabricks/core/jobs/get_schedules.py,sha256=kryDUBrBrtAaMp8Ou5YqMOCOMKvg1GmbbOQBtiiRleM,794
|
|
101
|
-
fabricks/core/jobs/gold.py,sha256=
|
|
101
|
+
fabricks/core/jobs/gold.py,sha256=JHpwyYxLgCngvqqEvuj0Scg8Wb3ciSt9NHE8XEC8wKg,14582
|
|
102
102
|
fabricks/core/jobs/silver.py,sha256=kdrCBfh1jkhWJUFubGUV4kxan5eRUZl-LI-iSJxyJE4,13093
|
|
103
103
|
fabricks/core/jobs/base/__init__.py,sha256=_AdWtyL7yZG2TOZ9e8WyNPrOjmm6EDkI_TNym5cLDws,208
|
|
104
104
|
fabricks/core/jobs/base/_types.py,sha256=y66BtJlJskq7wGzn7te5XYjO-NEqeQGUC11kkbew8AU,8405
|
|
105
105
|
fabricks/core/jobs/base/checker.py,sha256=Cdfh8rQYy4MvMFl0HyC3alGUWm8zrFXk08m2t2JMu6Y,5477
|
|
106
106
|
fabricks/core/jobs/base/configurator.py,sha256=9G5F7Qg5FWHPbHgdh8Qxc85OoSX0rnjD4c9itwU5KKc,10415
|
|
107
107
|
fabricks/core/jobs/base/exception.py,sha256=HrdxEuOfK5rY-ItZvEL3iywLgdpYUpmWFkjjjks7oYc,2318
|
|
108
|
-
fabricks/core/jobs/base/generator.py,sha256=
|
|
108
|
+
fabricks/core/jobs/base/generator.py,sha256=TWiJtQvEH0uH8YMFlOxxi6CpWnrDNua61PCbdamOtHA,17487
|
|
109
109
|
fabricks/core/jobs/base/invoker.py,sha256=FvjfpNqi542slxC2yLu1BIu5EklNUWySxDF8cD_SqKQ,7602
|
|
110
110
|
fabricks/core/jobs/base/job.py,sha256=dWmk2PpQH2NETaaDS6KoiefRnDHfDMdCyhmogkdcSFI,93
|
|
111
111
|
fabricks/core/jobs/base/processor.py,sha256=qkNiJSSLaEnivKGBcd9UZyIVFexnv-n1p_5mCZIy1rA,9076
|
|
@@ -143,7 +143,7 @@ fabricks/metastore/_types.py,sha256=NXYxwQHP0sCllM0N6QBbaK4CdtM_m_rHFDxRNRfBcLU,
|
|
|
143
143
|
fabricks/metastore/database.py,sha256=23VAKKzjrwlEaj28DNNmiOhcfdKRzYk8eEfq-PzINbg,1924
|
|
144
144
|
fabricks/metastore/dbobject.py,sha256=ve8p48OqEpJYsqWNhgesGSE0emM--uY8QrvBRoR3j3g,1881
|
|
145
145
|
fabricks/metastore/pyproject.toml,sha256=6RZM9RMKMDF_EAequhORZ7TD0BQNk7aBCTWAv-sRcp0,519
|
|
146
|
-
fabricks/metastore/table.py,sha256=
|
|
146
|
+
fabricks/metastore/table.py,sha256=lAxOky3BgpPudcIEZl2UbNgFiTHYfdtvcIHy9D5D78s,29368
|
|
147
147
|
fabricks/metastore/utils.py,sha256=8SxhjDkz_aSH4IGUusel7hqOQxP9U8PNBCY0M7GH00Y,1355
|
|
148
148
|
fabricks/metastore/view.py,sha256=f7hKJWtnH1KmZym8dkoucKOTndntzai_f2YqferxHLs,1431
|
|
149
149
|
fabricks/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -171,6 +171,6 @@ fabricks/utils/schema/get_schema_for_type.py,sha256=5k-R6zCgUAtapQgxT4turcx1IQ-b
|
|
|
171
171
|
fabricks/utils/write/__init__.py,sha256=i0UnZenXj9Aq0b0_aU3s6882vg-Vu_AyKfQhl_dTp-g,200
|
|
172
172
|
fabricks/utils/write/delta.py,sha256=lTQ0CfUhcvn3xTCcT_Ns6PMDBsO5UEfa2S9XpJiLJ9c,1250
|
|
173
173
|
fabricks/utils/write/stream.py,sha256=wQBpAnQtYA6nl79sPKhVM6u5m-66suX7B6VQ6tW4TOs,622
|
|
174
|
-
fabricks-3.0.
|
|
175
|
-
fabricks-3.0.
|
|
176
|
-
fabricks-3.0.
|
|
174
|
+
fabricks-3.0.18.dist-info/METADATA,sha256=YarCj7qvRhqy_-T7EKavECYdNYtsUGRqTNXWunrhQXY,798
|
|
175
|
+
fabricks-3.0.18.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
176
|
+
fabricks-3.0.18.dist-info/RECORD,,
|
|
File without changes
|