databricks-labs-lakebridge 0.10.5__py3-none-any.whl → 0.10.7__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.
Files changed (41) hide show
  1. databricks/labs/lakebridge/__about__.py +1 -1
  2. databricks/labs/lakebridge/analyzer/__init__.py +0 -0
  3. databricks/labs/lakebridge/analyzer/lakebridge_analyzer.py +95 -0
  4. databricks/labs/lakebridge/base_install.py +24 -3
  5. databricks/labs/lakebridge/cli.py +57 -72
  6. databricks/labs/lakebridge/config.py +1 -1
  7. databricks/labs/lakebridge/contexts/application.py +11 -4
  8. databricks/labs/lakebridge/deployment/dashboard.py +2 -1
  9. databricks/labs/lakebridge/deployment/installation.py +11 -11
  10. databricks/labs/lakebridge/deployment/job.py +2 -2
  11. databricks/labs/lakebridge/helpers/file_utils.py +36 -0
  12. databricks/labs/lakebridge/install.py +228 -278
  13. databricks/labs/lakebridge/reconcile/compare.py +70 -33
  14. databricks/labs/lakebridge/reconcile/connectors/data_source.py +19 -0
  15. databricks/labs/lakebridge/reconcile/connectors/databricks.py +11 -1
  16. databricks/labs/lakebridge/reconcile/connectors/dialect_utils.py +126 -0
  17. databricks/labs/lakebridge/reconcile/connectors/models.py +7 -0
  18. databricks/labs/lakebridge/reconcile/connectors/oracle.py +11 -1
  19. databricks/labs/lakebridge/reconcile/connectors/snowflake.py +14 -2
  20. databricks/labs/lakebridge/reconcile/connectors/tsql.py +27 -2
  21. databricks/labs/lakebridge/reconcile/constants.py +4 -3
  22. databricks/labs/lakebridge/reconcile/execute.py +9 -810
  23. databricks/labs/lakebridge/reconcile/normalize_recon_config_service.py +133 -0
  24. databricks/labs/lakebridge/reconcile/query_builder/base.py +3 -7
  25. databricks/labs/lakebridge/reconcile/recon_config.py +3 -0
  26. databricks/labs/lakebridge/reconcile/recon_output_config.py +2 -1
  27. databricks/labs/lakebridge/reconcile/reconciliation.py +508 -0
  28. databricks/labs/lakebridge/reconcile/schema_compare.py +26 -19
  29. databricks/labs/lakebridge/reconcile/trigger_recon_aggregate_service.py +98 -0
  30. databricks/labs/lakebridge/reconcile/trigger_recon_service.py +253 -0
  31. databricks/labs/lakebridge/reconcile/utils.py +38 -0
  32. databricks/labs/lakebridge/transpiler/lsp/lsp_engine.py +48 -63
  33. databricks/labs/lakebridge/transpiler/repository.py +123 -0
  34. databricks/labs/lakebridge/transpiler/sqlglot/dialect_utils.py +2 -0
  35. databricks/labs/lakebridge/transpiler/transpile_engine.py +0 -18
  36. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/METADATA +1 -1
  37. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/RECORD +41 -31
  38. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/WHEEL +0 -0
  39. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/entry_points.txt +0 -0
  40. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/licenses/LICENSE +0 -0
  41. {databricks_labs_lakebridge-0.10.5.dist-info → databricks_labs_lakebridge-0.10.7.dist-info}/licenses/NOTICE +0 -0
@@ -0,0 +1,123 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Iterable
4
+ from json import loads
5
+ import logging
6
+ import os
7
+ from typing import Any
8
+ from pathlib import Path
9
+
10
+ from databricks.labs.lakebridge.config import LSPConfigOptionV1
11
+
12
+ from databricks.labs.lakebridge.transpiler.lsp.lsp_engine import LSPConfig
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class TranspilerRepository:
18
+ """
19
+ Repository for managing the installed transpilers in the user's home directory.
20
+
21
+ The default repository for a user is always located under ~/.databricks/labs, and can be obtained
22
+ via the `TranspilerRepository.user_home()` method.
23
+ """
24
+
25
+ @staticmethod
26
+ def default_labs_path() -> Path:
27
+ """Return the default path where labs applications are installed."""
28
+ return Path.home() / ".databricks" / "labs"
29
+
30
+ _default_repository: TranspilerRepository | None = None
31
+
32
+ @classmethod
33
+ def user_home(cls) -> TranspilerRepository:
34
+ """The default repository for transpilers in the current user's home directory."""
35
+ repository = cls._default_repository
36
+ if repository is None:
37
+ cls._default_repository = repository = cls(cls.default_labs_path())
38
+ return repository
39
+
40
+ def __init__(self, labs_path: Path) -> None:
41
+ """Initialize the repository, based in the given location.
42
+
43
+ This should only be used directly by tests; for the default repository, use `TranspilerRepository.user_home()`.
44
+
45
+ Args:
46
+ labs_path: The path where the labs applications are installed.
47
+ """
48
+ if self._default_repository == self and labs_path == self.default_labs_path():
49
+ raise ValueError("Use TranspilerRepository.user_home() to get the default repository.")
50
+ self._labs_path = labs_path
51
+
52
+ def __repr__(self) -> str:
53
+ return f"TranspilerRepository(labs_path={self._labs_path!r})"
54
+
55
+ def transpilers_path(self) -> Path:
56
+ return self._labs_path / "remorph-transpilers"
57
+
58
+ def get_installed_version(self, product_name: str) -> str | None:
59
+ # Warning: product_name here (eg. 'morpheus') and transpiler_name elsewhere (eg. Morpheus) are not the same!
60
+ product_path = self.transpilers_path() / product_name
61
+ current_version_path = product_path / "state" / "version.json"
62
+ if not current_version_path.exists():
63
+ return None
64
+ text = current_version_path.read_text("utf-8")
65
+ data: dict[str, Any] = loads(text)
66
+ version: str | None = data.get("version", None)
67
+ if not version or not version.startswith("v"):
68
+ return None
69
+ return version[1:]
70
+
71
+ def all_transpiler_configs(self) -> dict[str, LSPConfig]:
72
+ all_configs = self._all_transpiler_configs()
73
+ return {config.name: config for config in all_configs}
74
+
75
+ def all_transpiler_names(self) -> set[str]:
76
+ all_configs = self.all_transpiler_configs()
77
+ return set(all_configs.keys())
78
+
79
+ def all_dialects(self) -> set[str]:
80
+ all_dialects: set[str] = set()
81
+ for config in self._all_transpiler_configs():
82
+ all_dialects = all_dialects.union(config.remorph.dialects)
83
+ return all_dialects
84
+
85
+ def transpilers_with_dialect(self, dialect: str) -> set[str]:
86
+ configs = filter(lambda cfg: dialect in cfg.remorph.dialects, self.all_transpiler_configs().values())
87
+ return set(config.name for config in configs)
88
+
89
+ def transpiler_config_path(self, transpiler_name: str) -> Path:
90
+ # Note: Can't just go straight to the directory: the transpiler names don't exactly match the directory names.
91
+ try:
92
+ config = next(c for c in self._all_transpiler_configs() if c.name == transpiler_name)
93
+ except StopIteration as e:
94
+ raise ValueError(f"No such transpiler: {transpiler_name}") from e
95
+ return config.path
96
+
97
+ def transpiler_config_options(self, transpiler_name: str, source_dialect: str) -> list[LSPConfigOptionV1]:
98
+ config = self.all_transpiler_configs().get(transpiler_name, None)
99
+ if not config:
100
+ return [] # gracefully returns an empty list, since this can only happen during testing
101
+ return config.options_for_dialect(source_dialect)
102
+
103
+ def _all_transpiler_configs(self) -> Iterable[LSPConfig]:
104
+ transpilers_path = self.transpilers_path()
105
+ if transpilers_path.exists():
106
+ all_files = os.listdir(transpilers_path)
107
+ for file in all_files:
108
+ config = self._transpiler_config(transpilers_path / file)
109
+ if config:
110
+ yield config
111
+
112
+ @classmethod
113
+ def _transpiler_config(cls, path: Path) -> LSPConfig | None:
114
+ if not path.is_dir() or not (path / "lib").is_dir():
115
+ return None
116
+ config_path = path / "lib" / "config.yml"
117
+ if not config_path.is_file():
118
+ return None
119
+ try:
120
+ return LSPConfig.load(config_path)
121
+ except ValueError as e:
122
+ logger.error(f"Could not load config: {path!s}", exc_info=e)
123
+ return None
@@ -18,6 +18,8 @@ SQLGLOT_DIALECTS: dict[str, type[Dialect] | str] = {
18
18
  "teradata": Dialects.TERADATA,
19
19
  "trino": Dialects.TRINO,
20
20
  "tsql": Dialects.TSQL,
21
+ "mssql": Dialects.TSQL,
22
+ "synapse": Dialects.TSQL,
21
23
  "vertica": Dialects.POSTGRES,
22
24
  }
23
25
 
@@ -6,24 +6,6 @@ from databricks.labs.lakebridge.config import TranspileResult, TranspileConfig
6
6
 
7
7
 
8
8
  class TranspileEngine(abc.ABC):
9
-
10
- @classmethod
11
- def load_engine(cls, transpiler_config_path: Path) -> TranspileEngine:
12
- # TODO remove this once sqlglot transpiler is pluggable
13
- if str(transpiler_config_path) == "sqlglot":
14
- # pylint: disable=import-outside-toplevel, cyclic-import
15
- from databricks.labs.lakebridge.transpiler.sqlglot.sqlglot_engine import SqlglotEngine
16
-
17
- return SqlglotEngine()
18
- if not transpiler_config_path.exists():
19
- raise ValueError(
20
- f"Error: Invalid value for '--transpiler-config-path': '{str(transpiler_config_path)}', file does not exist."
21
- )
22
- # pylint: disable=import-outside-toplevel, cyclic-import
23
- from databricks.labs.lakebridge.transpiler.lsp.lsp_engine import LSPEngine
24
-
25
- return LSPEngine.from_config_path(transpiler_config_path)
26
-
27
9
  @abc.abstractmethod
28
10
  async def initialize(self, config: TranspileConfig) -> None: ...
29
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-labs-lakebridge
3
- Version: 0.10.5
3
+ Version: 0.10.7
4
4
  Summary: Fast and predictable migrations to Databricks Lakehouse Platform. This tool is designed to help you migrate your data and workloads to the Databricks Lakehouse Platform in a fast, predictable, and reliable way. It provides a set of tools and utilities to help you reconcile your data and workloads, assess your current state, and plan your migration.
5
5
  Project-URL: Documentation, https://databrickslabs.github.io/lakebridge
6
6
  Project-URL: Issues, https://github.com/databrickslabs/lakebridge/issues
@@ -8,15 +8,17 @@ docs/lakebridge/src/theme/Footer/index.tsx,sha256=Jj8zY5WDiTLXwF_mAgld8Dh1A3MY1H
8
8
  docs/lakebridge/src/theme/Layout/index.tsx,sha256=IkdLr13jKmLxT0jWQqrwqrjVXc8Rwd_kWNpTd1t2sc0,592
9
9
  databricks/__init__.py,sha256=YqH8Hy8lHJxd0hLMZF6kWirUDdPiX90LRDX6S6yTMn0,261
10
10
  databricks/labs/__init__.py,sha256=YqH8Hy8lHJxd0hLMZF6kWirUDdPiX90LRDX6S6yTMn0,261
11
- databricks/labs/lakebridge/__about__.py,sha256=I-rxjdEQtJwfk11pg66LiskWUXIpHZGxnU39vNXcHwM,49
11
+ databricks/labs/lakebridge/__about__.py,sha256=7CdIUMG83fSVMGg8l6UUdCANS_DNyAMpGnOarLb7K3w,49
12
12
  databricks/labs/lakebridge/__init__.py,sha256=nUNECqNvyfpT0aeWwlqG0ADT8U8ScCLb8WWpLydppcA,464
13
- databricks/labs/lakebridge/base_install.py,sha256=8NxXsNpgqXnuADKXVFh5oQL3osdvygRMY1amJwKfU08,490
14
- databricks/labs/lakebridge/cli.py,sha256=VJHfy665ln7w-8e4xX18TXemT-XYVVQrXQKA0FkB-VI,31903
15
- databricks/labs/lakebridge/config.py,sha256=IjxvphM9fRQHQ2FAxwZ23deJGgSemJ3rMV0sp1Ob6e8,5833
16
- databricks/labs/lakebridge/install.py,sha256=x8YQwX-EwSKGYKHeotzUwADfzBrvFeplDHbjifLq9mA,39757
13
+ databricks/labs/lakebridge/base_install.py,sha256=dKz8U961cwTAHwMInczcorPL0o1AU9re0KRig2Ibeg8,1267
14
+ databricks/labs/lakebridge/cli.py,sha256=WzajjyWjg3FkPxLifP3zkPbHx0u7jDmjqtx3_q6kqmc,31138
15
+ databricks/labs/lakebridge/config.py,sha256=iu5SHkRO-aIFeZdi5P5UXEgJsjyWY-GKFGO3kR5i4-s,5842
16
+ databricks/labs/lakebridge/install.py,sha256=SFW6q52U6GCdbthCxQIzFMcpEtZo74qg0IdZd8LbhRs,37554
17
17
  databricks/labs/lakebridge/jvmproxy.py,sha256=F9pXpemzdaJXwpshHxVM9PYU_eNn4zTCUFQ5vc9WIhA,1573
18
18
  databricks/labs/lakebridge/lineage.py,sha256=Q2oky4RkODRHWMwIQIwbYXSdZTmRkMWwEh6RssBiQxY,1843
19
19
  databricks/labs/lakebridge/uninstall.py,sha256=hf36YgeW9XO2cRvvn6AXUZdihQ1ZMHnR38OVEF5sfRw,759
20
+ databricks/labs/lakebridge/analyzer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ databricks/labs/lakebridge/analyzer/lakebridge_analyzer.py,sha256=HgAOPe3vAkT__t0WS_XbDtA4hPoEqeMzjw7pT_fBQVk,4190
20
22
  databricks/labs/lakebridge/assessments/configure_assessment.py,sha256=r0VDjh4fAqZAHcLSN1qmyAQaTIwWRoXyitU7JCKsT3w,8412
21
23
  databricks/labs/lakebridge/assessments/pipeline.py,sha256=NlLyqy4ZkYdMX1ng4_5IWkNa5e06w8hzfwKQW3teWLQ,7728
22
24
  databricks/labs/lakebridge/assessments/profiler_config.py,sha256=-ZwOdN-kpX7jmXwPWG_QrTuKipreQa-8Jz7KrlR98Ws,682
@@ -25,7 +27,7 @@ databricks/labs/lakebridge/connections/credential_manager.py,sha256=N8wKec2UO5P1
25
27
  databricks/labs/lakebridge/connections/database_manager.py,sha256=RLu9aUweko_sg11lVBU_PMRjaYBwv9JdDJAV77EuWZU,3073
26
28
  databricks/labs/lakebridge/connections/env_getter.py,sha256=HKczv9Qgyd7Bm3OiKFuE0wqwXNZ-NqkCiVA_k0H_y6s,322
27
29
  databricks/labs/lakebridge/contexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- databricks/labs/lakebridge/contexts/application.py,sha256=APlJ6ZQSLvMe-_G0TYwSBxN45sUXq9h-WyC5HCEX6Ic,4844
30
+ databricks/labs/lakebridge/contexts/application.py,sha256=OVtWbd7277N8t-RKigu19LjXHvoltP65f_zFsKh4yvM,5195
29
31
  databricks/labs/lakebridge/coverage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
32
  databricks/labs/lakebridge/coverage/commons.py,sha256=WskVVa5l7aLVfSJgceCiDnfDsvJXwnb9eg27lMEj-HY,7515
31
33
  databricks/labs/lakebridge/coverage/lakebridge_snow_transpilation_coverage.py,sha256=QL92ei_5QIsuSSDmjpQ2qW5CN_9l08HpufedDjc1D-w,1085
@@ -34,9 +36,9 @@ databricks/labs/lakebridge/coverage/sqlglot_snow_transpilation_coverage.py,sha25
34
36
  databricks/labs/lakebridge/coverage/sqlglot_tsql_transpilation_coverage.py,sha256=9SypNpibaS9VGiTYVwCcMMmVWkBGj094cTBfbhsqZxQ,183
35
37
  databricks/labs/lakebridge/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
38
  databricks/labs/lakebridge/deployment/configurator.py,sha256=uOowc6cJfpZl4LGAs0eSFBBhrhC_t6Zs8Uo17htxXzY,8859
37
- databricks/labs/lakebridge/deployment/dashboard.py,sha256=mFQFuw9YR8vcabYxCoZkgo247gttMaVokN8kYrJwz-Q,6002
38
- databricks/labs/lakebridge/deployment/installation.py,sha256=qGpvceRGi1AVST2NEtLWsneI83mKpXEZfTn812VdMjI,5072
39
- databricks/labs/lakebridge/deployment/job.py,sha256=J0zZao279P0qBH7idaREvcT-SjPsEGOL7mBgQ_ZTaZI,6090
39
+ databricks/labs/lakebridge/deployment/dashboard.py,sha256=6q41Jplt6gh3vtjXCKB7g-RjA9wm0ugeqQVWWN7WEWw,6119
40
+ databricks/labs/lakebridge/deployment/installation.py,sha256=vQ6OjIjFh4ldSjChz93fhrAefQX3_VqyhrRemgBmMM4,5130
41
+ databricks/labs/lakebridge/deployment/job.py,sha256=96bTI7tF_IvPtkm0jBL30NbF9i1UObKVWM4MkNXRGLA,6067
40
42
  databricks/labs/lakebridge/deployment/recon.py,sha256=gRwuYE8GEg69rnYHv5IPOOwqdhZ2UPfwm0fOSFTL7pE,6258
41
43
  databricks/labs/lakebridge/deployment/table.py,sha256=15pKlGRtGDiErq2lY3V-vMbbiKHSF4U-U3S6WvHeOA0,976
42
44
  databricks/labs/lakebridge/deployment/upgrade_common.py,sha256=0WoMk_CUps5WfS_bm_U7zKGN6GMPcRWqdu4mgrPU0vs,4445
@@ -47,7 +49,7 @@ databricks/labs/lakebridge/errors/exceptions.py,sha256=PIj8wRJpxrBXOLMMt9HQhBfhZ
47
49
  databricks/labs/lakebridge/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
50
  databricks/labs/lakebridge/helpers/db_sql.py,sha256=chFHpn6XIuC0GrJ3a30_Y7tcXd4KZ5qO9zCAI4d7TR0,806
49
51
  databricks/labs/lakebridge/helpers/execution_time.py,sha256=8oLEYh0AKz1fuiQMyDTWDymhxh6xUKlcFpINWzKnOy4,533
50
- databricks/labs/lakebridge/helpers/file_utils.py,sha256=1X3ri7_kyZibOFq36mX8fiERhE3tru_7VZIat1jjzOc,1911
52
+ databricks/labs/lakebridge/helpers/file_utils.py,sha256=ahF6mf5His6oSwvFY7-VU8YJfncWK44QKi9cJUvUSOY,3007
51
53
  databricks/labs/lakebridge/helpers/metastore.py,sha256=1SKsIfNtiu3jUFjaXZ5B1fBZigVYqS1Q2OWhdn9qa8U,6425
52
54
  databricks/labs/lakebridge/helpers/recon_config_utils.py,sha256=1Nq_pIonE2tz08kdVpSDS-NVKGZ1p_kGRZBUQFFWZAs,7404
53
55
  databricks/labs/lakebridge/helpers/string_utils.py,sha256=TKW0BHmOZ2G8EebCohQRJLYglqeJajHgQ2BLehf9qsE,1169
@@ -58,28 +60,35 @@ databricks/labs/lakebridge/intermediate/dag.py,sha256=47bgyaYaBK_ELwLE5VGgFUraSx
58
60
  databricks/labs/lakebridge/intermediate/engine_adapter.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
61
  databricks/labs/lakebridge/intermediate/root_tables.py,sha256=G9PFU22qJ0BgV1FGZPK5bWNdEa8Xpo_gyEvMmATHkTw,1524
60
62
  databricks/labs/lakebridge/reconcile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- databricks/labs/lakebridge/reconcile/compare.py,sha256=P9ABIT95TeS7BVRYVbzjpaEsynF2h2m5M8f9-he8A3A,16136
62
- databricks/labs/lakebridge/reconcile/constants.py,sha256=ZXhGp0hxNdCWTN0iOfaIiDvRkxMZm4E7vtL-tVDsImM,816
63
+ databricks/labs/lakebridge/reconcile/compare.py,sha256=OuAsmrJyskMwCQKtJoSynUawKE6ZhhtvWkFok0FpVfo,17386
64
+ databricks/labs/lakebridge/reconcile/constants.py,sha256=foGko9c-H1mDYfvgxMSnk3NV45lHqXUsdbz0_L4vjSI,838
63
65
  databricks/labs/lakebridge/reconcile/exception.py,sha256=kA-1KVAgZfWzxhcUwYha_8OapmFajJG0iY5TxPUPJyQ,1463
64
- databricks/labs/lakebridge/reconcile/execute.py,sha256=13yDonKuOcGytIDEySgAF--8VC_zLR4-hLudD2EkE0g,35111
66
+ databricks/labs/lakebridge/reconcile/execute.py,sha256=NDYBDTM_2spPiEjRX6fLdy0m5WY7zG6732zjsd0hAdc,4415
67
+ databricks/labs/lakebridge/reconcile/normalize_recon_config_service.py,sha256=cCAsr1CmhhLPiX7VjqeZY89PrgqJfK7UyJeqVoYx9lI,5404
65
68
  databricks/labs/lakebridge/reconcile/recon_capture.py,sha256=mlrKSzeTQnq3_ncbTunE1OyIFA2bLKlwiuDMicQRf5c,27317
66
- databricks/labs/lakebridge/reconcile/recon_config.py,sha256=H1A3wdI0pgWfiISgdj-51fQplezG5PJXCIFkuXpS_UM,12090
67
- databricks/labs/lakebridge/reconcile/recon_output_config.py,sha256=yDw8Wd5byugT_0wJKHDPmDdekzhBc-HKbQdfSFf-l1M,1829
69
+ databricks/labs/lakebridge/reconcile/recon_config.py,sha256=Iw8n4_QDgs2wixkbQlYLnlxw01CNqGG8Cs-KmBIiw7g,12276
70
+ databricks/labs/lakebridge/reconcile/recon_output_config.py,sha256=a_nft2xAAlEsVqL3F7TtLcL5KbcV0qT4QBUkLvrbJQg,1879
71
+ databricks/labs/lakebridge/reconcile/reconciliation.py,sha256=LFOnXSrKT1kenJOy5JN7O56_emxB6MUtO87pX3kVljc,19883
68
72
  databricks/labs/lakebridge/reconcile/runner.py,sha256=g9RhTJ5y6lJynDGqzKJXAG3lECmc1ZY2TfbeCuoItvQ,4739
69
73
  databricks/labs/lakebridge/reconcile/sampler.py,sha256=ND_KMiUNu7bMnvFwyr-FHdaGv1w_aNCtu7lcUVRGKrc,10453
70
- databricks/labs/lakebridge/reconcile/schema_compare.py,sha256=aOt5T6Quy-l7ggaRYBVYRNZDDBnUnVe4qekkrL2vC1s,5140
74
+ databricks/labs/lakebridge/reconcile/schema_compare.py,sha256=19QGC9kpgJzZ1vMXm6c-37pU_CpLf0isBrRE3if9nNM,5759
75
+ databricks/labs/lakebridge/reconcile/trigger_recon_aggregate_service.py,sha256=S4dsOxPIY5se1b8XIbqRlj-WDfUaq3wa9DDTzT26ihM,4178
76
+ databricks/labs/lakebridge/reconcile/trigger_recon_service.py,sha256=bVtrkJ7hTn6IXyHpNcCaHoiy-a4sg8Vmfa_ZhPMgUBE,9937
77
+ databricks/labs/lakebridge/reconcile/utils.py,sha256=5TFwSz0ZSL9FlN2n6_JcY8t2nb0wdDW0fzkVdsit8tU,1459
71
78
  databricks/labs/lakebridge/reconcile/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- databricks/labs/lakebridge/reconcile/connectors/data_source.py,sha256=W1LJ0l0mkronQdDgsYz6j2RbHdKkluQUrc_q2OuLIEQ,2410
73
- databricks/labs/lakebridge/reconcile/connectors/databricks.py,sha256=LbewlUmnnazMPEXN2hqoPRMZ34gfLqLAosCyaq9OgRA,3490
79
+ databricks/labs/lakebridge/reconcile/connectors/data_source.py,sha256=-dxJlaj-Ede0Ry7blyBCCBKg0i4ddO6Z9sm_5BD5fQk,3380
80
+ databricks/labs/lakebridge/reconcile/connectors/databricks.py,sha256=iGj9-bfvZiMM6a8uUQlDV-NrRAQQeNWzDjdCkaEvaWk,3988
81
+ databricks/labs/lakebridge/reconcile/connectors/dialect_utils.py,sha256=BGAiZUXk4y8GHFSm5qIt8Pt17NKWbAU9kYu2ta9pPT8,5539
74
82
  databricks/labs/lakebridge/reconcile/connectors/jdbc_reader.py,sha256=SsY1rkeLo4Ie_2ZgxTxXH7s4cn1O2tHP_E93bNRCDRw,1516
75
- databricks/labs/lakebridge/reconcile/connectors/oracle.py,sha256=LBqlK5WbgB4XaQNJ_DomTHXazdHJNu4vkIic_z6UENw,4795
83
+ databricks/labs/lakebridge/reconcile/connectors/models.py,sha256=qfVgbw-SObpnkgqaiqeqPgjkPrkLOx2Ka7F9aRHu0QM,124
84
+ databricks/labs/lakebridge/reconcile/connectors/oracle.py,sha256=csb5Z32G-NjLxI_ir7CReRfMhST_-feoA0jZBUxm3jE,5283
76
85
  databricks/labs/lakebridge/reconcile/connectors/secrets.py,sha256=vue72BaYVaaeUfTOaqIEwP-I3TApgbPiuq69Z6I2u3k,1125
77
- databricks/labs/lakebridge/reconcile/connectors/snowflake.py,sha256=ARooTfPo6Vvrrj1n3KQ6aW-raAkoY_Z_qHB6epa5WVI,8086
86
+ databricks/labs/lakebridge/reconcile/connectors/snowflake.py,sha256=SVRHIuy32aMOVm2-_B0aPVHFF-OqHgtaHgVtUMipqNE,8655
78
87
  databricks/labs/lakebridge/reconcile/connectors/source_adapter.py,sha256=I6LBE0C8e80lMm_lVBVIrW9g9ogIgZ53J_EFRNkcSWY,1445
79
- databricks/labs/lakebridge/reconcile/connectors/tsql.py,sha256=71ChvUvDWSp6qftl4cJ7B_ztnchpU7uXo1_zLl5cDbc,5676
88
+ databricks/labs/lakebridge/reconcile/connectors/tsql.py,sha256=0vZCw1E3rKMzBlLGkdpqr0Y_gK86aJFydQ5yfC7dEzc,6827
80
89
  databricks/labs/lakebridge/reconcile/query_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
90
  databricks/labs/lakebridge/reconcile/query_builder/aggregate_query.py,sha256=zCPmLBLWeKwn0E2QMs0ua2CIJ6cnxmn77mNt4lvauTw,13783
82
- databricks/labs/lakebridge/reconcile/query_builder/base.py,sha256=J1LSemcN6bn-0K5U1PhXaQj22axOmqHUv-s9WwLQZOk,5293
91
+ databricks/labs/lakebridge/reconcile/query_builder/base.py,sha256=iloZdEfhmNowMDMnsaz8bnMyN4RXDW6tbCvCGSIzNQo,5394
83
92
  databricks/labs/lakebridge/reconcile/query_builder/count_query.py,sha256=DsfDbyx2T3_ZUDrpWnelZQjOYmMlMsyuW-FXmt6w0-0,982
84
93
  databricks/labs/lakebridge/reconcile/query_builder/expression_generator.py,sha256=AQFwWa_7ghAcCS5k1muKkdpW4ZZgVH_PmEOVXWSdjN8,10906
85
94
  databricks/labs/lakebridge/reconcile/query_builder/hash_query.py,sha256=nIlyq__cPqEPOGUhQSmwhIn-biUHFP23ArIEY5RLOLk,3375
@@ -148,12 +157,13 @@ databricks/labs/lakebridge/resources/reconcile/queries/installation/main.sql,sha
148
157
  databricks/labs/lakebridge/resources/reconcile/queries/installation/metrics.sql,sha256=FdvjQp7gCwsbcu4UrOuJN-bBLJFpvUIyxH6PQvg04Wo,1006
149
158
  databricks/labs/lakebridge/transpiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
159
  databricks/labs/lakebridge/transpiler/execute.py,sha256=AgsOGQtmPfCoWYP9U1cYezY14UjGx6TPR_PU1NAY6sE,17268
151
- databricks/labs/lakebridge/transpiler/transpile_engine.py,sha256=5zC8fkpBBlt9RjE_BeA_Sd6vaRxA3mBdhTqoRGFTc_Y,1616
160
+ databricks/labs/lakebridge/transpiler/repository.py,sha256=Iqe8Msf5_Boi2usel5NkWdsakk5rOYhIuapFHz--7cI,5066
161
+ databricks/labs/lakebridge/transpiler/transpile_engine.py,sha256=bpzelSMMdQ2j3cSa2eoeuACyM4tSCaGF9h8jFjdr1zw,768
152
162
  databricks/labs/lakebridge/transpiler/transpile_status.py,sha256=MO-Ju-ki3FCY15WxgwfPV9EC7Ma9q8aIfSTgHAmnkGU,1715
153
163
  databricks/labs/lakebridge/transpiler/lsp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- databricks/labs/lakebridge/transpiler/lsp/lsp_engine.py,sha256=osT4RXpYqBNcAQ8mcoFt8m2dygs5TcmYnQq57KN_kw4,22580
164
+ databricks/labs/lakebridge/transpiler/lsp/lsp_engine.py,sha256=VmLKWjkzXAmcfUCLLaD3a7upEWERwBTBfFO8900Y7dc,22378
155
165
  databricks/labs/lakebridge/transpiler/sqlglot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
- databricks/labs/lakebridge/transpiler/sqlglot/dialect_utils.py,sha256=GhXXWGA_2PlmHKjxrjryZpA5xaVZ81Vrw3b7DzjpFFI,1033
166
+ databricks/labs/lakebridge/transpiler/sqlglot/dialect_utils.py,sha256=6gg3g0VOW2cxBYb9Oq4ZcNMsz45zF88WH99QTcDvHKk,1091
157
167
  databricks/labs/lakebridge/transpiler/sqlglot/lca_utils.py,sha256=vpDLGhE-wFMah1VTXkMg6gI_QnzdzpYZf0h9DUd8zcI,5154
158
168
  databricks/labs/lakebridge/transpiler/sqlglot/local_expression.py,sha256=V69eEJHyZKxmyaham6OulYnwQRqkbGUrdiWm1EWP8YE,3825
159
169
  databricks/labs/lakebridge/transpiler/sqlglot/sqlglot_engine.py,sha256=1uqpYIB-6vhuFqco80lXyBqqdkVkZkk9xuqFAvf2kXI,10131
@@ -165,9 +175,9 @@ databricks/labs/lakebridge/transpiler/sqlglot/parsers/presto.py,sha256=bY6Ku8ZPW
165
175
  databricks/labs/lakebridge/transpiler/sqlglot/parsers/snowflake.py,sha256=dZ7BdOlBZlkbiN9G9bu4l2c456265Gx9WoWUPRa7Ffg,23203
166
176
  databricks/labs/lakebridge/upgrades/v0.4.0_add_main_table_operation_name_column.py,sha256=wMTbj1q5td4fa5DCk0tWFJ-OmhhzsExRLYUe4PKmk0s,3527
167
177
  databricks/labs/lakebridge/upgrades/v0.6.0_alter_metrics_datatype.py,sha256=hnTHRtqzwPSF5Judzh6ss-uB5h3IFtm2ylWduwRNq5Y,2424
168
- databricks_labs_lakebridge-0.10.5.dist-info/METADATA,sha256=fY2pyveC_2Z9FjVEFHYNX23xEc8Fl1dbrhfiFcb886o,3078
169
- databricks_labs_lakebridge-0.10.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
170
- databricks_labs_lakebridge-0.10.5.dist-info/entry_points.txt,sha256=Idr1CT73b8wShdr287yu1hheGbDbhBvucVUlZcbpiPo,75
171
- databricks_labs_lakebridge-0.10.5.dist-info/licenses/LICENSE,sha256=1hG0Cvw6mp9nL9qRoHFcCUk9fYqhcnj2vgJ75rt3BxA,3862
172
- databricks_labs_lakebridge-0.10.5.dist-info/licenses/NOTICE,sha256=wtxMsNvTkw1hAEkkWHz8A8JrYySAUSt1tOTcqddkWEg,1797
173
- databricks_labs_lakebridge-0.10.5.dist-info/RECORD,,
178
+ databricks_labs_lakebridge-0.10.7.dist-info/METADATA,sha256=CTfyCIJTi9CKaSN3KAaTA3hv66nZWGzN2WyY0BDDAzQ,3078
179
+ databricks_labs_lakebridge-0.10.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
180
+ databricks_labs_lakebridge-0.10.7.dist-info/entry_points.txt,sha256=Idr1CT73b8wShdr287yu1hheGbDbhBvucVUlZcbpiPo,75
181
+ databricks_labs_lakebridge-0.10.7.dist-info/licenses/LICENSE,sha256=1hG0Cvw6mp9nL9qRoHFcCUk9fYqhcnj2vgJ75rt3BxA,3862
182
+ databricks_labs_lakebridge-0.10.7.dist-info/licenses/NOTICE,sha256=wtxMsNvTkw1hAEkkWHz8A8JrYySAUSt1tOTcqddkWEg,1797
183
+ databricks_labs_lakebridge-0.10.7.dist-info/RECORD,,