sqlmesh 0.190.1.dev8__py3-none-any.whl → 0.191.1.dev1__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.
- sqlmesh/_version.py +2 -2
- sqlmesh/core/table_diff.py +87 -23
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/METADATA +1 -1
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/RECORD +8 -8
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/WHEEL +0 -0
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.190.1.dev8.dist-info → sqlmesh-0.191.1.dev1.dist-info}/top_level.txt +0 -0
sqlmesh/_version.py
CHANGED
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.
|
|
21
|
-
__version_tuple__ = version_tuple = (0,
|
|
20
|
+
__version__ = version = '0.191.1.dev1'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 191, 1, 'dev1')
|
sqlmesh/core/table_diff.py
CHANGED
|
@@ -24,6 +24,7 @@ if t.TYPE_CHECKING:
|
|
|
24
24
|
from sqlmesh.core.engine_adapter import EngineAdapter
|
|
25
25
|
|
|
26
26
|
SQLMESH_JOIN_KEY_COL = "__sqlmesh_join_key"
|
|
27
|
+
SQLMESH_SAMPLE_TYPE_COL = "__sqlmesh_sample_type"
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class SchemaDiff(PydanticModel, frozen=True):
|
|
@@ -389,9 +390,6 @@ class TableDiff:
|
|
|
389
390
|
for c, t in matched_columns.items()
|
|
390
391
|
]
|
|
391
392
|
|
|
392
|
-
def name(e: exp.Expression) -> str:
|
|
393
|
-
return e.args["alias"].sql(identify=True)
|
|
394
|
-
|
|
395
393
|
source_query = (
|
|
396
394
|
exp.select(
|
|
397
395
|
*(exp.column(c) for c in source_schema),
|
|
@@ -581,30 +579,19 @@ class TableDiff:
|
|
|
581
579
|
.drop(index=index_cols, errors="ignore")
|
|
582
580
|
)
|
|
583
581
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
exp.select(
|
|
587
|
-
*(sample_filter_cols),
|
|
588
|
-
*(name(c) for c in s_selects.values()),
|
|
589
|
-
*(name(c) for c in t_selects.values()),
|
|
590
|
-
)
|
|
591
|
-
.from_(table)
|
|
592
|
-
.where(exp.or_(*(exp.column(c.alias).eq(0) for c in comparisons)))
|
|
593
|
-
.order_by(
|
|
594
|
-
*(name(s_selects[c.name]) for c in s_index),
|
|
595
|
-
*(name(t_selects[c.name]) for c in t_index),
|
|
596
|
-
)
|
|
597
|
-
.limit(self.limit)
|
|
582
|
+
sample = self._fetch_sample(
|
|
583
|
+
table, s_selects, s_index, t_selects, t_index, self.limit
|
|
598
584
|
)
|
|
599
|
-
sample = self.adapter.fetchdf(sample_query, quote_identifiers=True)
|
|
600
585
|
|
|
601
586
|
joined_sample_cols = [f"s__{c}" for c in s_index_names]
|
|
602
587
|
comparison_cols = [
|
|
603
588
|
(f"s__{c}", f"t__{c}")
|
|
604
589
|
for c in column_stats[column_stats["pct_match"] < 100].index
|
|
605
590
|
]
|
|
591
|
+
|
|
606
592
|
for cols in comparison_cols:
|
|
607
593
|
joined_sample_cols.extend(cols)
|
|
594
|
+
|
|
608
595
|
joined_renamed_cols = {
|
|
609
596
|
c: c.split("__")[1] if c.split("__")[1] in index_cols else c
|
|
610
597
|
for c in joined_sample_cols
|
|
@@ -638,13 +625,16 @@ class TableDiff:
|
|
|
638
625
|
)
|
|
639
626
|
for c, n in joined_renamed_cols.items()
|
|
640
627
|
}
|
|
641
|
-
|
|
628
|
+
|
|
629
|
+
joined_sample = sample[sample[SQLMESH_SAMPLE_TYPE_COL] == "common_rows"][
|
|
630
|
+
joined_sample_cols
|
|
631
|
+
]
|
|
642
632
|
joined_sample.rename(
|
|
643
633
|
columns=joined_renamed_cols,
|
|
644
634
|
inplace=True,
|
|
645
635
|
)
|
|
646
636
|
|
|
647
|
-
s_sample = sample[
|
|
637
|
+
s_sample = sample[sample[SQLMESH_SAMPLE_TYPE_COL] == "source_only"][
|
|
648
638
|
[
|
|
649
639
|
*[f"s__{c}" for c in s_index_names],
|
|
650
640
|
*[f"s__{c}" for c in source_schema if c not in s_index_names],
|
|
@@ -654,7 +644,7 @@ class TableDiff:
|
|
|
654
644
|
columns={c: c.replace("s__", "") for c in s_sample.columns}, inplace=True
|
|
655
645
|
)
|
|
656
646
|
|
|
657
|
-
t_sample = sample[
|
|
647
|
+
t_sample = sample[sample[SQLMESH_SAMPLE_TYPE_COL] == "target_only"][
|
|
658
648
|
[
|
|
659
649
|
*[f"t__{c}" for c in t_index_names],
|
|
660
650
|
*[f"t__{c}" for c in target_schema if c not in t_index_names],
|
|
@@ -665,8 +655,11 @@ class TableDiff:
|
|
|
665
655
|
)
|
|
666
656
|
|
|
667
657
|
sample.drop(
|
|
668
|
-
columns=
|
|
669
|
-
|
|
658
|
+
columns=[
|
|
659
|
+
f"s__{SQLMESH_JOIN_KEY_COL}",
|
|
660
|
+
f"t__{SQLMESH_JOIN_KEY_COL}",
|
|
661
|
+
SQLMESH_SAMPLE_TYPE_COL,
|
|
662
|
+
],
|
|
670
663
|
inplace=True,
|
|
671
664
|
)
|
|
672
665
|
|
|
@@ -684,4 +677,75 @@ class TableDiff:
|
|
|
684
677
|
model_name=self.model_name,
|
|
685
678
|
decimals=self.decimals,
|
|
686
679
|
)
|
|
680
|
+
|
|
687
681
|
return self._row_diff
|
|
682
|
+
|
|
683
|
+
def _fetch_sample(
|
|
684
|
+
self,
|
|
685
|
+
sample_table: exp.Table,
|
|
686
|
+
s_selects: t.Dict[str, exp.Alias],
|
|
687
|
+
s_index: t.List[exp.Column],
|
|
688
|
+
t_selects: t.Dict[str, exp.Alias],
|
|
689
|
+
t_index: t.List[exp.Column],
|
|
690
|
+
limit: int,
|
|
691
|
+
) -> pd.DataFrame:
|
|
692
|
+
rendered_data_column_names = [
|
|
693
|
+
name(s) for s in list(s_selects.values()) + list(t_selects.values())
|
|
694
|
+
]
|
|
695
|
+
sample_type = exp.to_identifier(SQLMESH_SAMPLE_TYPE_COL)
|
|
696
|
+
|
|
697
|
+
source_only_sample = (
|
|
698
|
+
exp.select(
|
|
699
|
+
exp.Literal.string("source_only").as_(sample_type), *rendered_data_column_names
|
|
700
|
+
)
|
|
701
|
+
.from_(sample_table)
|
|
702
|
+
.where(exp.and_(exp.column("s_exists").eq(1), exp.column("row_joined").eq(0)))
|
|
703
|
+
.order_by(*(name(s_selects[c.name]) for c in s_index))
|
|
704
|
+
.limit(limit)
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
target_only_sample = (
|
|
708
|
+
exp.select(
|
|
709
|
+
exp.Literal.string("target_only").as_(sample_type), *rendered_data_column_names
|
|
710
|
+
)
|
|
711
|
+
.from_(sample_table)
|
|
712
|
+
.where(exp.and_(exp.column("t_exists").eq(1), exp.column("row_joined").eq(0)))
|
|
713
|
+
.order_by(*(name(t_selects[c.name]) for c in t_index))
|
|
714
|
+
.limit(limit)
|
|
715
|
+
)
|
|
716
|
+
|
|
717
|
+
common_rows_sample = (
|
|
718
|
+
exp.select(
|
|
719
|
+
exp.Literal.string("common_rows").as_(sample_type), *rendered_data_column_names
|
|
720
|
+
)
|
|
721
|
+
.from_(sample_table)
|
|
722
|
+
.where(exp.and_(exp.column("row_joined").eq(1), exp.column("row_full_match").eq(0)))
|
|
723
|
+
.order_by(
|
|
724
|
+
*(name(s_selects[c.name]) for c in s_index),
|
|
725
|
+
*(name(t_selects[c.name]) for c in t_index),
|
|
726
|
+
)
|
|
727
|
+
.limit(limit)
|
|
728
|
+
)
|
|
729
|
+
|
|
730
|
+
query = (
|
|
731
|
+
exp.Select()
|
|
732
|
+
.with_("source_only", source_only_sample)
|
|
733
|
+
.with_("target_only", target_only_sample)
|
|
734
|
+
.with_("common_rows", common_rows_sample)
|
|
735
|
+
.select(sample_type, *rendered_data_column_names)
|
|
736
|
+
.from_("source_only")
|
|
737
|
+
.union(
|
|
738
|
+
exp.select(sample_type, *rendered_data_column_names).from_("target_only"),
|
|
739
|
+
distinct=False,
|
|
740
|
+
)
|
|
741
|
+
.union(
|
|
742
|
+
exp.select(sample_type, *rendered_data_column_names).from_("common_rows"),
|
|
743
|
+
distinct=False,
|
|
744
|
+
)
|
|
745
|
+
)
|
|
746
|
+
|
|
747
|
+
return self.adapter.fetchdf(query, quote_identifiers=True)
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
def name(e: exp.Expression) -> str:
|
|
751
|
+
return e.args["alias"].sql(identify=True)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
2
|
+
sqlmesh/_version.py,sha256=7hh-fhvpsFAPwOfArTlM6CZ9gYvfxD3DI1WDSOp7590,528
|
|
3
3
|
sqlmesh/magics.py,sha256=gjzoxREb1XT8Yho_PQMlMqhhkLq_sEfBM8S3PTgxvWE,40337
|
|
4
4
|
sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -29,7 +29,7 @@ sqlmesh/core/schema_diff.py,sha256=Sp2MoqAngp-yTYevkLaf9jb26SuAdGXoZ54g5MjWowU,3
|
|
|
29
29
|
sqlmesh/core/schema_loader.py,sha256=lvrI9k7hr1P4X4E6t3U-KrcuvdQuw0UdNlN90P2s52w,3563
|
|
30
30
|
sqlmesh/core/selector.py,sha256=_hcktUQiKXCPE-mOqXClHUVWBfEZKMPVVNDtpSSRhbI,12660
|
|
31
31
|
sqlmesh/core/signal.py,sha256=yVLXewYP6eH0vt-EwaIaI2WwHz6hWsVr-Kb2m4kP1FU,1353
|
|
32
|
-
sqlmesh/core/table_diff.py,sha256=
|
|
32
|
+
sqlmesh/core/table_diff.py,sha256=_LhSwAhCctkqWini0n-qeIK-cOPeuGnwlLSuUNM8n2k,29062
|
|
33
33
|
sqlmesh/core/user.py,sha256=EJ6R4R1iK67n80vBoCCsidF56IR7xEYqiCEO-nrVMso,1660
|
|
34
34
|
sqlmesh/core/analytics/__init__.py,sha256=ou3ZXAJfQOXEifj-PzaXwMDSvJzsVaqaMkUopiI00kM,3247
|
|
35
35
|
sqlmesh/core/analytics/collector.py,sha256=sggJvER16Jrg5triTC27E2KwaQvfkVDv4D6R1lVPH5I,13058
|
|
@@ -275,7 +275,7 @@ sqlmesh/utils/pydantic.py,sha256=I898jAFqa3qU6lG2uPpRebVFncOUo8ZrLWM_R3K3DHU,116
|
|
|
275
275
|
sqlmesh/utils/rich.py,sha256=xNZyPCqEc4TAlJlsEthg-5eYUWpaizz0QjBzO7a1Yv4,1509
|
|
276
276
|
sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
|
|
277
277
|
sqlmesh/utils/yaml.py,sha256=np-WVcwmwsKghCgAj1OBBMsK1SXSRn4wR-H37cGiFr8,2282
|
|
278
|
-
sqlmesh-0.
|
|
278
|
+
sqlmesh-0.191.1.dev1.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
|
|
279
279
|
web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
280
280
|
web/client/dist/index.html,sha256=k5bAEoPDJ0BhYQ4hBcKWObITCxIgqOUC28nGXvEDrt0,5472
|
|
281
281
|
web/client/dist/assets/Audits-Pgs8N6IE.js,sha256=BQuc9kiznZSqTnzNrJSDNqAAdOTGjNQJt32M1sHZFok,1041
|
|
@@ -393,8 +393,8 @@ web/server/api/endpoints/models.py,sha256=ud-lRwriyI_OYg9tZchrBgeiXELiRTLNEodraf
|
|
|
393
393
|
web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
|
|
394
394
|
web/server/api/endpoints/plan.py,sha256=OYuQ_4dgbhG9ibTcX1a8mvYgH3ANxw9Fhbb4wg6QWqc,9222
|
|
395
395
|
web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
|
|
396
|
-
sqlmesh-0.
|
|
397
|
-
sqlmesh-0.
|
|
398
|
-
sqlmesh-0.
|
|
399
|
-
sqlmesh-0.
|
|
400
|
-
sqlmesh-0.
|
|
396
|
+
sqlmesh-0.191.1.dev1.dist-info/METADATA,sha256=Yc9GVN9IIzZxnLpB6NEFetXNdSHxdfCwK5dzFeQtJV8,26540
|
|
397
|
+
sqlmesh-0.191.1.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
398
|
+
sqlmesh-0.191.1.dev1.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
|
|
399
|
+
sqlmesh-0.191.1.dev1.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
|
|
400
|
+
sqlmesh-0.191.1.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|