acryl-datahub 1.3.0.1rc7__py3-none-any.whl → 1.3.0.1rc8__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.
Potentially problematic release.
This version of acryl-datahub might be problematic. Click here for more details.
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/METADATA +2522 -2522
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/RECORD +8 -8
- datahub/_version.py +1 -1
- datahub/ingestion/source/sql/mssql/source.py +41 -9
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/WHEEL +0 -0
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/entry_points.txt +0 -0
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/licenses/LICENSE +0 -0
- {acryl_datahub-1.3.0.1rc7.dist-info → acryl_datahub-1.3.0.1rc8.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
acryl_datahub-1.3.0.
|
|
1
|
+
acryl_datahub-1.3.0.1rc8.dist-info/licenses/LICENSE,sha256=9xNHpsD0uYF5ONzXsKDCuHHB-xbiCrSbueWXqrTNsxk,11365
|
|
2
2
|
datahub/__init__.py,sha256=aq_i5lVREmoLfYIqcx_pEQicO855YlhD19tWc1eZZNI,59
|
|
3
3
|
datahub/__main__.py,sha256=pegIvQ9hzK7IhqVeUi1MeADSZ2QlP-D3K0OQdEg55RU,106
|
|
4
|
-
datahub/_version.py,sha256=
|
|
4
|
+
datahub/_version.py,sha256=3eJGiXMGVkMi1lpj9ZplnwELXbksY0tQWUHU5_VpRwU,323
|
|
5
5
|
datahub/entrypoints.py,sha256=VcbU6Z47b_JKW1zI-WJMYIngm05FSogKLiuvFNtyNcI,9088
|
|
6
6
|
datahub/errors.py,sha256=p5rFAdAGVCk4Lqolol1YvthceadUSwpaCxLXRcyCCFQ,676
|
|
7
7
|
datahub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -545,7 +545,7 @@ datahub/ingestion/source/sql/two_tier_sql_source.py,sha256=xlpQ9thbEn6uta6eVMzsH
|
|
|
545
545
|
datahub/ingestion/source/sql/vertica.py,sha256=LUpIzDpzFRtMcXCSG2EC5CBZbveBOvnB27P_pDrXC9o,33501
|
|
546
546
|
datahub/ingestion/source/sql/mssql/__init__.py,sha256=1agpl8S_uDW40olkhCX_W19dbr5GO9qgjS3R7pLRZSk,87
|
|
547
547
|
datahub/ingestion/source/sql/mssql/job_models.py,sha256=ozEMc86e2oWRRF8Vjasjj32onVaVOQ98f00mbCYKmY8,9401
|
|
548
|
-
datahub/ingestion/source/sql/mssql/source.py,sha256=
|
|
548
|
+
datahub/ingestion/source/sql/mssql/source.py,sha256=6dVWAFaaXDR4z2LJZozusg4lEFjlGLn2ELK0JoJbfYA,46342
|
|
549
549
|
datahub/ingestion/source/sql/stored_procedures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
550
550
|
datahub/ingestion/source/sql/stored_procedures/base.py,sha256=n0l5OaTuW-m3TRvkxs3TqvgMeWF6BagzW3tjyWUcC1A,8631
|
|
551
551
|
datahub/ingestion/source/sql/stored_procedures/lineage.py,sha256=fryLhuAlsjr9SHIjHJ-PmtCMx89bjzWVnJZ3f1bwQVU,1905
|
|
@@ -1133,8 +1133,8 @@ datahub_provider/operators/datahub_assertion_operator.py,sha256=uvTQ-jk2F0sbqqxp
|
|
|
1133
1133
|
datahub_provider/operators/datahub_assertion_sensor.py,sha256=lCBj_3x1cf5GMNpHdfkpHuyHfVxsm6ff5x2Z5iizcAo,140
|
|
1134
1134
|
datahub_provider/operators/datahub_operation_operator.py,sha256=aevDp2FzX7FxGlXrR0khoHNbxbhKR2qPEX5e8O2Jyzw,174
|
|
1135
1135
|
datahub_provider/operators/datahub_operation_sensor.py,sha256=8fcdVBCEPgqy1etTXgLoiHoJrRt_nzFZQMdSzHqSG7M,168
|
|
1136
|
-
acryl_datahub-1.3.0.
|
|
1137
|
-
acryl_datahub-1.3.0.
|
|
1138
|
-
acryl_datahub-1.3.0.
|
|
1139
|
-
acryl_datahub-1.3.0.
|
|
1140
|
-
acryl_datahub-1.3.0.
|
|
1136
|
+
acryl_datahub-1.3.0.1rc8.dist-info/METADATA,sha256=lOSilMTQwZ3rvmq-XCw-gmoitXmWUW_muDrbc-GqlKY,184619
|
|
1137
|
+
acryl_datahub-1.3.0.1rc8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1138
|
+
acryl_datahub-1.3.0.1rc8.dist-info/entry_points.txt,sha256=pzsBoTx-D-iTcmpX8oCGCyzlHP2112EygUMzZWz56M8,10105
|
|
1139
|
+
acryl_datahub-1.3.0.1rc8.dist-info/top_level.txt,sha256=iLjSrLK5ox1YVYcglRUkcvfZPvKlobBWx7CTUXx8_GI,25
|
|
1140
|
+
acryl_datahub-1.3.0.1rc8.dist-info/RECORD,,
|
datahub/_version.py
CHANGED
|
@@ -135,6 +135,10 @@ class SQLServerConfig(BasicSQLAlchemyConfig):
|
|
|
135
135
|
default=False,
|
|
136
136
|
description="Represent a schema identifiers combined with quoting preferences. See [sqlalchemy quoted_name docs](https://docs.sqlalchemy.org/en/20/core/sqlelement.html#sqlalchemy.sql.expression.quoted_name).",
|
|
137
137
|
)
|
|
138
|
+
is_aws_rds: Optional[bool] = Field(
|
|
139
|
+
default=None,
|
|
140
|
+
description="Indicates if the SQL Server instance is running on AWS RDS. When None (default), automatic detection will be attempted using server name analysis.",
|
|
141
|
+
)
|
|
138
142
|
|
|
139
143
|
@pydantic.validator("uri_args")
|
|
140
144
|
def passwords_match(cls, v, values, **kwargs):
|
|
@@ -367,18 +371,42 @@ class SQLServerSource(SQLAlchemySource):
|
|
|
367
371
|
def _detect_rds_environment(self, conn: Connection) -> bool:
|
|
368
372
|
"""
|
|
369
373
|
Detect if we're running in an RDS/managed environment vs on-premises.
|
|
374
|
+
Uses explicit configuration if provided, otherwise attempts automatic detection.
|
|
370
375
|
Returns True if RDS/managed, False if on-premises.
|
|
371
376
|
"""
|
|
377
|
+
if self.config.is_aws_rds is not None:
|
|
378
|
+
logger.info(
|
|
379
|
+
f"Using explicit is_aws_rds configuration: {self.config.is_aws_rds}"
|
|
380
|
+
)
|
|
381
|
+
return self.config.is_aws_rds
|
|
382
|
+
|
|
372
383
|
try:
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
384
|
+
result = conn.execute("SELECT @@servername AS server_name")
|
|
385
|
+
server_name_row = result.fetchone()
|
|
386
|
+
if server_name_row:
|
|
387
|
+
server_name = server_name_row["server_name"].lower()
|
|
388
|
+
|
|
389
|
+
aws_indicators = ["amazon", "amzn", "amaz", "ec2", "rds.amazonaws.com"]
|
|
390
|
+
is_rds = any(indicator in server_name for indicator in aws_indicators)
|
|
391
|
+
if is_rds:
|
|
392
|
+
logger.info(f"AWS RDS detected based on server name: {server_name}")
|
|
393
|
+
else:
|
|
394
|
+
logger.info(
|
|
395
|
+
f"Non-RDS environment detected based on server name: {server_name}"
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
return is_rds
|
|
399
|
+
else:
|
|
400
|
+
logger.warning(
|
|
401
|
+
"Could not retrieve server name, assuming non-RDS environment"
|
|
402
|
+
)
|
|
403
|
+
return False
|
|
404
|
+
|
|
405
|
+
except Exception as e:
|
|
406
|
+
logger.warning(
|
|
407
|
+
f"Failed to detect RDS/managed vs on-prem env, assuming non-RDS environment ({e})"
|
|
377
408
|
)
|
|
378
409
|
return False
|
|
379
|
-
except Exception:
|
|
380
|
-
logger.debug("Direct table access failed - likely RDS/managed environment")
|
|
381
|
-
return True
|
|
382
410
|
|
|
383
411
|
def _get_jobs(self, conn: Connection, db_name: str) -> Dict[str, Dict[str, Any]]:
|
|
384
412
|
"""
|
|
@@ -453,7 +481,10 @@ class SQLServerSource(SQLAlchemySource):
|
|
|
453
481
|
jobs_result = conn.execute("EXEC msdb.dbo.sp_help_job")
|
|
454
482
|
jobs_data = {}
|
|
455
483
|
|
|
456
|
-
|
|
484
|
+
# SQLAlchemy 1.3 support was dropped in Sept 2023 (PR #8810)
|
|
485
|
+
# SQLAlchemy 1.4+ returns LegacyRow objects that don't support dictionary-style .get() method
|
|
486
|
+
# Use .mappings() to get MappingResult with dictionary-like rows that support .get()
|
|
487
|
+
for row in jobs_result.mappings():
|
|
457
488
|
job_id = str(row["job_id"])
|
|
458
489
|
jobs_data[job_id] = {
|
|
459
490
|
"job_id": job_id,
|
|
@@ -473,7 +504,8 @@ class SQLServerSource(SQLAlchemySource):
|
|
|
473
504
|
)
|
|
474
505
|
|
|
475
506
|
job_steps = {}
|
|
476
|
-
for
|
|
507
|
+
# Use .mappings() for dictionary-like access (SQLAlchemy 1.4+ compatibility)
|
|
508
|
+
for step_row in steps_result.mappings():
|
|
477
509
|
# Only include steps that run against our target database
|
|
478
510
|
step_database = step_row.get("database_name", "")
|
|
479
511
|
if step_database.lower() == db_name.lower() or not step_database:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|