quollio-core 0.5.0__py3-none-any.whl → 0.5.3__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.
quollio_core/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  """Quollio Core"""
2
2
 
3
- __version__ = "0.5.0"
3
+ __version__ = "0.5.3"
4
4
  __author__ = "Quollio Technologies, Inc"
@@ -95,6 +95,23 @@ UNION
95
95
  {{ source('account_usage', 'TABLES') }}
96
96
  WHERE
97
97
  DELETED IS NULL
98
+ AND (
99
+ {% if var('target_databases_method') == 'ALLOWLIST' %}
100
+ {% if var('target_databases') %}
101
+ TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }})
102
+ {% else %}
103
+ 1=0 -- If no databases specified in allowlist, deny all
104
+ {% endif %}
105
+ {% elif var('target_databases_method') == 'DENYLIST' %}
106
+ {% if var('target_databases') %}
107
+ NOT (TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }}))
108
+ {% else %}
109
+ 1=1 -- If no databases specified in denylist, include all
110
+ {% endif %}
111
+ {% else %}
112
+ 1=1 -- Default case: allow all databases
113
+ {% endif %}
114
+ )
98
115
  ), exists_upstream_column_lineage AS (
99
116
  SELECT
100
117
  downstream_table_name
@@ -49,6 +49,23 @@ WITH table_lineage_history AS (
49
49
  {{ source('account_usage', 'TABLES') }}
50
50
  WHERE
51
51
  DELETED IS NULL
52
+ AND (
53
+ {% if var('target_databases_method') == 'ALLOWLIST' %}
54
+ {% if var('target_databases') %}
55
+ TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }})
56
+ {% else %}
57
+ 1=0 -- If no databases specified in allowlist, deny all
58
+ {% endif %}
59
+ {% elif var('target_databases_method') == 'DENYLIST' %}
60
+ {% if var('target_databases') %}
61
+ NOT (TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }}))
62
+ {% else %}
63
+ 1=1 -- If no databases specified in denylist, include all
64
+ {% endif %}
65
+ {% else %}
66
+ 1=1 -- Default case: allow all databases
67
+ {% endif %}
68
+ )
52
69
  ), upstream_exists_table AS (
53
70
  SELECT
54
71
  downstream_table_name AS "DOWNSTREAM_TABLE_NAME"
@@ -48,3 +48,21 @@ on
48
48
  lst.query_id = qt.query_id
49
49
  where
50
50
  qt.query_id is not null
51
+ AND (
52
+ {% if var('target_databases_method') == 'ALLOWLIST' %}
53
+ {% if var('target_databases') %}
54
+ database_name LIKE ANY ({{ var('target_databases')|join(",") }})
55
+ {% else %}
56
+ 1=0 -- If no databases specified in allowlist, deny all
57
+ {% endif %}
58
+ {% elif var('target_databases_method') == 'DENYLIST' %}
59
+ {% if var('target_databases') %}
60
+ NOT (database_name LIKE ANY ({{ var('target_databases')|join(",") }}))
61
+ {% else %}
62
+ 1=1 -- If no databases specified in denylist, include all
63
+ {% endif %}
64
+ {% else %}
65
+ 1=1 -- Default case: allow all databases
66
+ {% endif %}
67
+ )
68
+
@@ -28,7 +28,7 @@ WITH columns AS (
28
28
  FROM
29
29
  {{ source('account_usage', 'GRANTS_TO_ROLES') }}
30
30
  WHERE
31
- granted_on in ('TABLE', 'MATERIALIZED VIEW')
31
+ granted_on in ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
32
32
  AND grantee_name = '{{ var("query_role") }}'
33
33
  AND privilege in ('SELECT', 'OWNERSHIP')
34
34
  AND deleted_on IS NULL
@@ -92,5 +92,21 @@ WITH columns AS (
92
92
  else false END AS is_calculable
93
93
  FROM
94
94
  implicit_columns_removed
95
- )
95
+ WHERE
96
+ {% if var('target_databases_method') == 'ALLOWLIST' %}
97
+ {% if var('target_databases') %}
98
+ TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }})
99
+ {% else %}
100
+ 1=0 -- If no databases specified in allowlist, deny all
101
+ {% endif %}
102
+ {% elif var('target_databases_method') == 'DENYLIST' %}
103
+ {% if var('target_databases') %}
104
+ NOT (TABLE_CATALOG LIKE ANY ({{ var('target_databases')|join(",") }}))
105
+ {% else %}
106
+ 1=1 -- If no databases specified in denylist, include all
107
+ {% endif %}
108
+ {% else %}
109
+ 1=1 -- Default case: allow all databases
110
+ {% endif %}
111
+ )
96
112
  select * from final
@@ -17,11 +17,15 @@ def load_lineage(
17
17
  tenant_id: str = None,
18
18
  qdc_client: qdc.QDCExternalAPIClient = None,
19
19
  page_size: int = None,
20
+ system_database: str = None,
20
21
  ) -> None:
21
22
  page_size = page_size or int(os.environ.get("TERADATA_PAGE_SIZE", 1000))
22
23
  offset = 0
23
24
  all_lineage_results = []
24
25
 
26
+ # Use system_database from config if not provided
27
+ system_database = system_database or conn_config.system_database
28
+
25
29
  with teradata_repo.new_teradata_client(conn_config) as conn:
26
30
  while True:
27
31
  query = f"""
@@ -30,10 +34,10 @@ def load_lineage(
30
34
  TRIM(a.SqlTextInfo) AS SqlTextInfo,
31
35
  a.SqlRowNo,
32
36
  TRIM(d.DatabaseName) AS DefaultDatabase
33
- FROM DBC.QryLogSQLV a
34
- JOIN DBC.QryLogV b
37
+ FROM {system_database}.QryLogSQLV a
38
+ JOIN {system_database}.QryLogV b
35
39
  ON a.QueryID = b.QueryID
36
- JOIN DBC.DatabasesV d
40
+ JOIN {system_database}.DatabasesV d
37
41
  ON b.DefaultDatabase = d.DatabaseName
38
42
  WHERE
39
43
  UPPER(TRIM(SqlTextInfo)) LIKE 'CREATE TABLE%'
@@ -27,6 +27,7 @@ def load_stats(
27
27
  target_databases: Optional[List[str]] = None,
28
28
  target_databases_method: str = "DENYLIST",
29
29
  stats_items: Optional[List[str]] = None,
30
+ system_database: Optional[str] = None,
30
31
  ) -> None:
31
32
  stats_list = []
32
33
  numerical_columns = 0
@@ -35,16 +36,21 @@ def load_stats(
35
36
  f"Starting statistics collection. " f"Sample percent: {sample_percent if sample_percent is not None else 'N/A'}"
36
37
  )
37
38
 
39
+ # Use system_database from config if not provided
40
+ system_database = system_database or conn_config.system_database
41
+
38
42
  with teradata_repo.new_teradata_client(conn_config) as conn:
39
43
  try:
40
- tables = teradata_repo.get_table_list(conn, target_databases, target_databases_method)
44
+ tables = teradata_repo.get_table_list(conn, target_databases, target_databases_method, system_database)
41
45
  for table in tables:
42
46
  logger.debug(f"Processing table: {table}")
43
- database_name = table["DataBaseName"]
47
+ database_name = table["DatabaseName"]
44
48
  table_name = table["TableName"]
45
49
 
46
50
  logger.info(f"Processing table {database_name}.{table_name}")
47
- columns = teradata_repo.get_column_list(conn, database_name=database_name, table_name=table_name)
51
+ columns = teradata_repo.get_column_list(
52
+ conn, database_name=database_name, table_name=table_name, system_database=system_database
53
+ )
48
54
  logger.debug(f"Columns: {columns}")
49
55
 
50
56
  for column in columns:
@@ -13,18 +13,25 @@ class TeradataConfig:
13
13
  username: str
14
14
  password: str
15
15
  database: str = "DBC"
16
+ system_database: str = "DBC"
16
17
  encrypt_data: bool = True
17
18
  additional_params: Dict[str, Any] = field(default_factory=dict)
18
19
 
19
20
  @classmethod
20
21
  def from_dict(
21
- cls, credentials: Dict[str, str], host: str, port: str, additional_params: Dict[str, Any] = None
22
+ cls,
23
+ credentials: Dict[str, str],
24
+ host: str,
25
+ port: str,
26
+ additional_params: Dict[str, Any] = None,
27
+ system_database: str = "DBC",
22
28
  ) -> "TeradataConfig":
23
29
  return cls(
24
30
  host=host,
25
31
  port=int(port),
26
32
  username=credentials["username"],
27
33
  password=credentials["password"],
34
+ system_database=system_database,
28
35
  additional_params=additional_params or {},
29
36
  )
30
37
 
@@ -49,7 +56,10 @@ def new_teradata_client(config: TeradataConfig) -> teradatasql.connect:
49
56
 
50
57
  @error_handling_decorator
51
58
  def get_table_list(
52
- conn: teradatasql.connect, target_databases: Optional[List[str]] = None, target_databases_method: str = "DENYLIST"
59
+ conn: teradatasql.connect,
60
+ target_databases: Optional[List[str]] = None,
61
+ target_databases_method: str = "DENYLIST",
62
+ system_database: str = "DBC",
53
63
  ) -> List[Dict[str, str]]:
54
64
  if target_databases_method == "DENYLIST":
55
65
  operator = "NOT"
@@ -58,24 +68,28 @@ def get_table_list(
58
68
 
59
69
  query_tables = f"""
60
70
  SELECT DatabaseName, TableName
61
- FROM DBC.TablesV
71
+ FROM {system_database}.TablesV
62
72
  WHERE TableKind IN ('T', 'O', 'Q')
63
73
  AND DatabaseName {operator} IN ({','.join("'" + db + "'" for db in target_databases)})
64
74
  """
65
75
  logger.debug("Executing query to retrieve table names.")
76
+ logger.debug(f"Query: {query_tables}")
66
77
  tables = execute_query(query_tables, conn)
67
78
  return tables
68
79
 
69
80
 
70
81
  @error_handling_decorator
71
- def get_column_list(conn: teradatasql.connect, database_name: str, table_name: str) -> List[Dict[str, str]]:
82
+ def get_column_list(
83
+ conn: teradatasql.connect, database_name: str, table_name: str, system_database: str = "DBC"
84
+ ) -> List[Dict[str, str]]:
72
85
  query_columns = f"""
73
86
  SELECT ColumnName, ColumnType
74
- FROM DBC.ColumnsV
87
+ FROM {system_database}.ColumnsV
75
88
  WHERE DatabaseName = '{database_name}'
76
89
  AND TableName = '{table_name}'
77
90
  """
78
91
  logger.debug(f"Executing query to retrieve columns for {database_name}.{table_name}.")
92
+ logger.debug(f"Query: {query_columns}")
79
93
  columns = execute_query(query_columns, conn)
80
94
  logger.debug(f"Retrieved columns: {columns}")
81
95
  return columns
quollio_core/snowflake.py CHANGED
@@ -24,6 +24,8 @@ def build_view(
24
24
  target_tables: str = "",
25
25
  log_level: str = "info",
26
26
  dbt_macro_source: str = "hub",
27
+ target_databases_method: str = "DENYLIST",
28
+ target_databases: list[str] = [],
27
29
  ) -> None:
28
30
  logger.info("Build profiler views using dbt")
29
31
  # set parameters
@@ -32,10 +34,16 @@ def build_view(
32
34
  project_path = f"{current_dir}/dbt_projects/snowflake"
33
35
  template_path = f"{current_dir}/dbt_projects/snowflake/profiles"
34
36
  template_name = "profiles_template.yml"
35
- options = '{{"query_role": {query_role}, "sample_method": {sample_method}}}'.format(
37
+
38
+ options = '{{"query_role": "{query_role}", "sample_method": "{sample_method}",\
39
+ "target_databases_method": "{target_databases_method}",\
40
+ "target_databases": {target_databases}}}'.format(
36
41
  query_role=conn.account_query_role,
37
42
  sample_method=stats_sample_method,
43
+ target_databases_method=target_databases_method,
44
+ target_databases=target_databases,
38
45
  )
46
+
39
47
  new_package_file = f"{project_path}/packages.yml"
40
48
  if dbt_macro_source == "local":
41
49
  shutil.copyfile(f"{project_path}/packages_local.yml", new_package_file)
@@ -237,6 +245,25 @@ if __name__ == "__main__":
237
245
  Please specify table name with blank delimiter like tableA tableB \
238
246
  if you want to create two or more tables.",
239
247
  )
248
+ parser.add_argument(
249
+ "--target_databases_method",
250
+ type=str,
251
+ choices=["ALLOWLIST", "DENYLIST"],
252
+ action=env_default("SNOWFLAKE_TARGET_DATABASE_METHOD"),
253
+ required=False,
254
+ help="Method to filter databases. 'ALLOWLIST' to only include listed databases,\
255
+ 'DENNYLIST' to exclude listed databases",
256
+ )
257
+ parser.add_argument(
258
+ "--target_databases",
259
+ type=str,
260
+ nargs="*",
261
+ action=env_default("SNOWFLAKE_TARGET_DATABASES"),
262
+ required=False,
263
+ help='List of databases to allow or deny based on target_database_method\
264
+ please specify database names with blank space as delimiter\
265
+ wildcards (%) are supported "DATABASE%" ',
266
+ )
240
267
  parser.add_argument(
241
268
  "--sample_method",
242
269
  type=str,
@@ -339,12 +366,20 @@ if __name__ == "__main__":
339
366
  raise ValueError("No command is provided")
340
367
 
341
368
  if "build_view" in args.commands:
369
+
370
+ if args.target_databases:
371
+ target_databases = ["'" + db + "'" for db in args.target_databases[0].split(",")]
372
+ else:
373
+ target_databases = []
374
+
342
375
  build_view(
343
376
  conn=conn,
344
377
  stats_sample_method=args.sample_method,
345
378
  target_tables=args.target_tables,
346
379
  log_level=args.log_level,
347
380
  dbt_macro_source=args.dbt_macro_source,
381
+ target_databases_method=args.target_databases_method,
382
+ target_databases=target_databases,
348
383
  )
349
384
  api_url = args.api_url
350
385
  if args.external_api_access == "VPC_ENDPOINT":
quollio_core/teradata.py CHANGED
@@ -189,6 +189,14 @@ def main() -> None:
189
189
  You can choose the items to be aggregated for stats.\
190
190
  Default is full stats.",
191
191
  )
192
+ parser.add_argument(
193
+ "--teradata_system_database",
194
+ type=str,
195
+ action=env_default("TERADATA_SYSTEM_DATABASE"),
196
+ default="DBC",
197
+ help="Name of the Teradata system database.\
198
+ Default is DBC",
199
+ )
192
200
 
193
201
  args = parser.parse_args()
194
202
 
@@ -213,7 +221,11 @@ def main() -> None:
213
221
 
214
222
  logger.info("Initializing Teradata client")
215
223
  config = teradata_repo.TeradataConfig.from_dict(
216
- credentials, args.teradata_host, args.teradata_port, additional_params
224
+ credentials=credentials,
225
+ host=args.teradata_host,
226
+ port=args.teradata_port,
227
+ additional_params=additional_params,
228
+ system_database=args.teradata_system_database,
217
229
  )
218
230
 
219
231
  if "load_lineage" in args.commands:
@@ -224,6 +236,7 @@ def main() -> None:
224
236
  endpoint=args.teradata_host,
225
237
  qdc_client=qdc_client,
226
238
  page_size=args.teradata_page_size,
239
+ system_database=args.teradata_system_database,
227
240
  )
228
241
  logger.info("Lineage loading process completed")
229
242
 
@@ -244,6 +257,7 @@ def main() -> None:
244
257
  target_databases=target_databases,
245
258
  target_databases_method=args.teradata_target_databases_method.upper(),
246
259
  stats_items=args.target_stats_items,
260
+ system_database=args.teradata_system_database,
247
261
  )
248
262
  logger.info("Statistics loading process completed")
249
263
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: quollio-core
3
- Version: 0.5.0
3
+ Version: 0.5.3
4
4
  Summary: Quollio Core
5
5
  Author-email: quollio-dev <qt.dev@quollio.com>
6
6
  Maintainer-email: RyoAriyama <ryo.arym@gmail.com>, tharuta <35373297+TakumiHaruta@users.noreply.github.com>
@@ -1,9 +1,9 @@
1
- quollio_core/__init__.py,sha256=JDD0AXVIwawcOMm_hOs62bzrTO4xouhl7kPLgO7yn_c,83
1
+ quollio_core/__init__.py,sha256=YrefYO__k4ewIsYGUmshPK7ySvzQxHKIdRv7kTYGaVk,83
2
2
  quollio_core/bigquery.py,sha256=6Oq4DVGpa3X21Es_nbrsb8pK3vaxwb9Egnvq3huo95k,5894
3
3
  quollio_core/bricks.py,sha256=8h3kbI2b6lGH2s-56jE_Q5-R5-nIsQYMfvtRrkFOzoU,10784
4
4
  quollio_core/redshift.py,sha256=KcdljY95xYf9JYrsaMOBoP_XxQQ8wFVE5ue_XEMVSFc,11504
5
- quollio_core/snowflake.py,sha256=3dHVys5c94s2pkEXkb2cWBpkxwkLQ23QENCoU-pfhuo,13202
6
- quollio_core/teradata.py,sha256=muOCg40SPMs9Ro6f1h8AjzLhGPNXfX1n8IvTtqnQDg0,7739
5
+ quollio_core/snowflake.py,sha256=wKBfyoqdoLN-kYsceT0ctqWeay_Sn8OpKMSYedlBjD4,14558
6
+ quollio_core/teradata.py,sha256=H2VUcJvr8W-M2wvm3710Gf1ENb-BSscrDRKNm8gdHJE,8227
7
7
  quollio_core/dbt_projects/databricks/.gitignore,sha256=1jJAyXSzJ3YUm0nx3i7wUSE4RjQMX3ad6F8O88UbtzI,29
8
8
  quollio_core/dbt_projects/databricks/README.md,sha256=ZpRQyhFAODAiS8dc1Kb_ndkul4cu4o4udN_EMa49CU4,440
9
9
  quollio_core/dbt_projects/databricks/dbt_project.yml,sha256=3sH98RNk7TnphvI3yEdXDstb92kW5BNxr-cT0tXhwzk,480
@@ -48,15 +48,15 @@ quollio_core/dbt_projects/snowflake/packages_local.yml,sha256=ryyJSXv83gYFu48xmz
48
48
  quollio_core/dbt_projects/snowflake/analyses/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  quollio_core/dbt_projects/snowflake/macros/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  quollio_core/dbt_projects/snowflake/macros/materialization/divided_view.sql,sha256=6CM9L_SkTkfUVWOYj0APHqmS_uBOdsL8RdN4fwUXz1I,3822
51
- quollio_core/dbt_projects/snowflake/models/quollio_lineage_column_level.sql,sha256=Cxt2U2aXNG_LUm63jwTyxUkapkrB7_uHmesx1PTcMJM,4721
51
+ quollio_core/dbt_projects/snowflake/models/quollio_lineage_column_level.sql,sha256=Zhj0EXF1K8S-OkFxz3IBHe2olXktYrvly0LwZBOAUXw,5333
52
52
  quollio_core/dbt_projects/snowflake/models/quollio_lineage_column_level.yml,sha256=a2uNIAh-xw51eu-GmHVuAnGnTbwK7h8-DjDeQtK3KaQ,711
53
- quollio_core/dbt_projects/snowflake/models/quollio_lineage_table_level.sql,sha256=Q_7vY1N1Hi1LFv5CxkkdR3gQw8fTDnoKECTLSK4gd3o,5112
53
+ quollio_core/dbt_projects/snowflake/models/quollio_lineage_table_level.sql,sha256=lZ28A4E6s37-oBx8JbtT3ItXK6musdqr25eyaGn7kDk,5916
54
54
  quollio_core/dbt_projects/snowflake/models/quollio_lineage_table_level.yml,sha256=QXlMBIkHo1Y-ANveKVx1FwyoYTMRXKgE2Z-PNouhQTw,325
55
- quollio_core/dbt_projects/snowflake/models/quollio_sqllineage_sources.sql,sha256=gd6JhQO13xBIvOoeXcce1I7amNGytwE8pwUApXehwqM,1520
55
+ quollio_core/dbt_projects/snowflake/models/quollio_sqllineage_sources.sql,sha256=pSmx3DJDx39AzAIzil9ophcgnIVxK_o1b7HSgajMUPc,2257
56
56
  quollio_core/dbt_projects/snowflake/models/quollio_sqllineage_sources.yml,sha256=qgazupx3ca4P8R0loY5F9hyCz2fmAcWqZ6iOySo_NoY,377
57
57
  quollio_core/dbt_projects/snowflake/models/quollio_stats_columns.sql,sha256=BzvP9gKMFItmwqEQ4bDgtS-Invxhhe6L73Qe1ucxfHo,284
58
58
  quollio_core/dbt_projects/snowflake/models/quollio_stats_columns.yml,sha256=V_BESPk6IqE52ExT26-78As9l9AlWW86-Geb5PIhThU,67
59
- quollio_core/dbt_projects/snowflake/models/quollio_stats_profiling_columns.sql,sha256=1RFE5VP1XbLMBlQAShJSeqMNDg5GFmwLXab-q2mnGcQ,2260
59
+ quollio_core/dbt_projects/snowflake/models/quollio_stats_profiling_columns.sql,sha256=ubMEzZNHq55zCncg7HbzdMKMSdqHnwbJmVKYpet8Otc,2968
60
60
  quollio_core/dbt_projects/snowflake/models/quollio_stats_profiling_columns.yml,sha256=W39VAmFnnX6RBoW7B_4CConC1lm0Jm9o50Jsz9bYZzY,538
61
61
  quollio_core/dbt_projects/snowflake/models/sources.yml,sha256=vGSV33cNj4UUyPUcYS-JFgc3r8KvSLfiA7qhbDCUU9s,10975
62
62
  quollio_core/dbt_projects/snowflake/profiles/profiles_template.yml,sha256=gcZsgdGP461QuUM9jLbBKdadT8cHTXgNarq_azOOMhk,379
@@ -75,8 +75,8 @@ quollio_core/profilers/redshift.py,sha256=p6ONDCkhndZAOcKAwEyQ5fsi-jsQrlwHHb7LTI
75
75
  quollio_core/profilers/snowflake.py,sha256=m9Ivv2LRwnrmgKS36a039AhrO27sR1EaOOdqNF26PhI,11156
76
76
  quollio_core/profilers/sqllineage.py,sha256=h0FT6CYb0A20zSc68GELZ7Q8bDbaHLQnZQHsXBEXBug,5261
77
77
  quollio_core/profilers/stats.py,sha256=OLQrdrh0y64jo9rmzvGlDdxy_c7gMz_GnlXPJzWkBjM,7343
78
- quollio_core/profilers/teradata/lineage.py,sha256=M1FOrFLZrgJwIp-qEeARugoP3W6YxuXkRHoDTPcj-wA,7169
79
- quollio_core/profilers/teradata/stats.py,sha256=oIC0pp0vJeAx5VWzgVYPrI7sCbCka86ctF2ksczCOuU,9022
78
+ quollio_core/profilers/teradata/lineage.py,sha256=2wNksBQD8vC6UTQwCglPsF53YMEVIkAb2CWTmpiTHDU,7368
79
+ quollio_core/profilers/teradata/stats.py,sha256=OagvkTRFiWVbiLABwZwR3wQ7y36edwOViDetHsYiyxI,9277
80
80
  quollio_core/repository/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  quollio_core/repository/bigquery.py,sha256=3AyGcJNYGnUyMweyc6lGm4quwrOzd-ZBS2zNnFwafII,3990
82
82
  quollio_core/repository/databricks.py,sha256=9Cgdv8qBnVaHqu3RA-IUBieAqb69moQ-KAAMVSf5Ds4,1877
@@ -85,8 +85,8 @@ quollio_core/repository/qdc.py,sha256=IPGiYafnJYkuD7_kLapVM98-9ZhEwq5S-dGY2bO8fV
85
85
  quollio_core/repository/redshift.py,sha256=p2ouEuYcDCjx1oBhc6H1ekQsvEqHGd3bFu3PW0ngYBc,2880
86
86
  quollio_core/repository/snowflake.py,sha256=zL9-xi98AIftdW9MuKI-M3pZ1kQuuH-UiZH8HcJvmk4,1769
87
87
  quollio_core/repository/ssm.py,sha256=xpm1FzbBnIsBptuYPUNnPgkKU2AH3XxI-ZL0bEetvW0,2182
88
- quollio_core/repository/teradata.py,sha256=DkoutYaRspPdwCvDGKxpWX0dU0d12S2sUrzvZJpY-3Q,3420
89
- quollio_core-0.5.0.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
90
- quollio_core-0.5.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
91
- quollio_core-0.5.0.dist-info/METADATA,sha256=erQi_pK7TboXRC-qBE59sqsrqAINKOlFEGDx0SF1JjA,6924
92
- quollio_core-0.5.0.dist-info/RECORD,,
88
+ quollio_core/repository/teradata.py,sha256=1AExxRBTswpSyF4OVyAUkoiZ0yVRfqt4T99FdllkTEI,3763
89
+ quollio_core-0.5.3.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
90
+ quollio_core-0.5.3.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
91
+ quollio_core-0.5.3.dist-info/METADATA,sha256=aQkusHnQ6mw4E6KUM5Yo4LrzFFFHqDbIgIyzjHZFJc4,6924
92
+ quollio_core-0.5.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.9.0
2
+ Generator: flit 3.10.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any