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 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.190.1.dev8'
21
- __version_tuple__ = version_tuple = (0, 190, 1, 'dev8')
20
+ __version__ = version = '0.191.1.dev1'
21
+ __version_tuple__ = version_tuple = (0, 191, 1, 'dev1')
@@ -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
- sample_filter_cols = ["s_exists", "t_exists", "row_joined", "row_full_match"]
585
- sample_query = (
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
- joined_sample = sample[sample["row_joined"] == 1][joined_sample_cols]
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[(sample["s_exists"] == 1) & (sample["row_joined"] == 0)][
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[(sample["t_exists"] == 1) & (sample["row_joined"] == 0)][
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=sample_filter_cols
669
- + [f"s__{SQLMESH_JOIN_KEY_COL}", f"t__{SQLMESH_JOIN_KEY_COL}"],
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.190.1.dev8
3
+ Version: 0.191.1.dev1
4
4
  Summary: Next-generation data transformation framework
5
5
  Author-email: "TobikoData Inc." <engineering@tobikodata.com>
6
6
  License: Apache License
@@ -1,5 +1,5 @@
1
1
  sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
2
- sqlmesh/_version.py,sha256=L9Hjq6o7TO4EcAMCq8IEAuJdYn9ib5xMWhJXtVtC1DI,528
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=6J-C3Vr2Aw02t3VXJwFPjazao-yv92jHgYZ31Iok_6A,27133
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.190.1.dev8.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
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.190.1.dev8.dist-info/METADATA,sha256=yqtMm5HDmlJIUXP8u3bdDnVnhOt1aqwAgYWEQqGzLq8,26540
397
- sqlmesh-0.190.1.dev8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
398
- sqlmesh-0.190.1.dev8.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
399
- sqlmesh-0.190.1.dev8.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
400
- sqlmesh-0.190.1.dev8.dist-info/RECORD,,
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,,