acryl-datahub 1.1.0.5rc4__py3-none-any.whl → 1.1.0.5rc5__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.

@@ -1,7 +1,7 @@
1
- acryl_datahub-1.1.0.5rc4.dist-info/licenses/LICENSE,sha256=9xNHpsD0uYF5ONzXsKDCuHHB-xbiCrSbueWXqrTNsxk,11365
1
+ acryl_datahub-1.1.0.5rc5.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=FxmAFDylE_4rYCNPJsg5swySRi1b4oeflnNCP_Du7ks,323
4
+ datahub/_version.py,sha256=asGELDofJg3dNOgo2IEO-VgcFEFlz2Bkyep1JJAZd9U,323
5
5
  datahub/entrypoints.py,sha256=H-YFTvxTJOgpWsFBVlxyb1opjkq-hjTzNmjy5Fq3RHg,8992
6
6
  datahub/errors.py,sha256=p5rFAdAGVCk4Lqolol1YvthceadUSwpaCxLXRcyCCFQ,676
7
7
  datahub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -67,7 +67,7 @@ datahub/api/graphql/assertion.py,sha256=o_q6SV7N1rJTVMNKSUBGJnZPk6TcVYoVShgDmPw6
67
67
  datahub/api/graphql/base.py,sha256=zk724_oYSJ0nK7X7Z80MijnA6ry9JqpxnBsJeYuONKA,1737
68
68
  datahub/api/graphql/operation.py,sha256=7E80HyE-5JLfLbFkQbgJeNwIaKngjBCrWES8eJO4OYc,5112
69
69
  datahub/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- datahub/cli/check_cli.py,sha256=CsOF57GEJAxnRS7a2mrzNkbQSTxcvtr6nBcB9s5MBXA,15197
70
+ datahub/cli/check_cli.py,sha256=1R_OwSx47GPtWMP0e9Ljef7mBr-xxDG1O8ls7YG8khQ,15767
71
71
  datahub/cli/cli_utils.py,sha256=2uvPv6WqxbRdH7UteHwhRash4E0ncU5P6XebrFLeECo,13584
72
72
  datahub/cli/config_utils.py,sha256=EeBGfhmf4AxYoTfnZ4GSiGIgpzJFkduNjN_FwmxZGhA,4889
73
73
  datahub/cli/container_cli.py,sha256=uDOwewGEPYHQt-ppYEb8ESXhZjPNIZG0Rt3cm2FzPqc,1569
@@ -141,7 +141,7 @@ datahub/ingestion/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
141
141
  datahub/ingestion/api/closeable.py,sha256=k12AT--s4GDtZ-po_rVm5QKgvGIDteeRPByZPIOfecA,599
142
142
  datahub/ingestion/api/committable.py,sha256=4S6GuBzvX2vb1A8P506NbspOKfZ1621sBG8t0lvRb8o,886
143
143
  datahub/ingestion/api/common.py,sha256=26lXJiM4YfdnVH1xfe2bpZNp2VKCdJcJ8ynK7rhh0FY,3029
144
- datahub/ingestion/api/decorators.py,sha256=qsI2HkyruhVR7VU-K0sCZmpAR9kg49CDdL9Tu24QpsA,4016
144
+ datahub/ingestion/api/decorators.py,sha256=okTDYtOQygyC9-Mu3jiTHuW0Wwt9Td25utxc5yMMSDY,4420
145
145
  datahub/ingestion/api/global_context.py,sha256=OdSJg4a_RKE52nu8MSiEkK2UqRRDhDTyOleHEAzPKho,575
146
146
  datahub/ingestion/api/incremental_lineage_helper.py,sha256=7a6FTJ_uz4EEJS1vPtbYB2KvNlcZB3py28_FKxmRiSk,5993
147
147
  datahub/ingestion/api/incremental_properties_helper.py,sha256=KzdxdrQtaMV2XMHfPsCtRa7ffDGPA1w1hgPUjeenZBU,2514
@@ -179,7 +179,7 @@ datahub/ingestion/glossary/classifier.py,sha256=daLxnVv_JlfB_jBOxH5LrU_xQRndrsGo
179
179
  datahub/ingestion/glossary/classifier_registry.py,sha256=yFOYLQhDgCLqXYMG3L1BquXafeLcZDcmp8meyw6k9ts,307
180
180
  datahub/ingestion/glossary/datahub_classifier.py,sha256=O7wm6gQT1Jf2QSKdWjJQbS5oSzJwplXzfza26Gdq5Mg,7555
181
181
  datahub/ingestion/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
- datahub/ingestion/graph/client.py,sha256=VnrUsC2jGN5W3nkurAxIR887J4O9mP_S0VjdheekNQA,72412
182
+ datahub/ingestion/graph/client.py,sha256=kuxNcwW6O3o9i_AHoRLabeMSrYBMOSCExiZYnzOBYV0,74221
183
183
  datahub/ingestion/graph/config.py,sha256=rmkcqAL8fJoY9QyAeS0Xm8HvwHzV3pCjY-Om-50JJTI,1015
184
184
  datahub/ingestion/graph/connections.py,sha256=9462L0ZWGKURyypAln25eMPhK3pcufBar9tNDoqspXs,741
185
185
  datahub/ingestion/graph/entity_versioning.py,sha256=nrcNz0Qm6kpE6oTu_mrYUQDx14KPspBTc6R9SyFUY6c,6901
@@ -223,7 +223,7 @@ datahub/ingestion/source/openapi_parser.py,sha256=T87e2r-oPGgQl_FDMHnSGFZzApvWDC
223
223
  datahub/ingestion/source/preset.py,sha256=fncn-fgYcITsYEHVsvV6cGTQ9_xc_R06ejrw6ZbY3QA,3966
224
224
  datahub/ingestion/source/pulsar.py,sha256=u5F8QnCLJsht5-7XCiUTsnfhCPIpKVB_l32CgMCU-As,20187
225
225
  datahub/ingestion/source/redash.py,sha256=YxjSad-X_wPmxYH8dJmFz_VCFhiLTCTSlK99WdvcYiA,30653
226
- datahub/ingestion/source/salesforce.py,sha256=CQtDFv1OsbC1vyzNbKOc6GxhFQ5GdYj45hgAF0-oIcw,40487
226
+ datahub/ingestion/source/salesforce.py,sha256=Pa_w1XszxFd8fyhpSWOfc2nOnevHwwstIvnRrQT4R9M,40584
227
227
  datahub/ingestion/source/source_registry.py,sha256=a2mLjJPLkSI-gYCTb_7U7Jo4D8jGknNQ_yScPIihXFk,1208
228
228
  datahub/ingestion/source/sql_queries.py,sha256=Ip7UZub7fgMh7P5jL_zJPY7lSkc9GGTy8GJ8lqZrcsE,9502
229
229
  datahub/ingestion/source/superset.py,sha256=4wEjhBj_Zf__1EhXDE9ltbaR9NTMZVdXFviHLf5VFL4,48387
@@ -237,7 +237,7 @@ datahub/ingestion/source/apply/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
237
237
  datahub/ingestion/source/apply/datahub_apply.py,sha256=xTD-Iq3UHhxcz61RwNuI2kJjRrnQEfZFSgvS1X6loV4,7703
238
238
  datahub/ingestion/source/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
239
  datahub/ingestion/source/aws/aws_common.py,sha256=DN49pHY-AOVHqI3smF9cVPwvPmh5UqOF4ga-wga_gPc,17928
240
- datahub/ingestion/source/aws/glue.py,sha256=E_oCgf-taI2ZVXSn9LA9MoDk6JJBFEDBUbNIFkqUUSA,66547
240
+ datahub/ingestion/source/aws/glue.py,sha256=Pa5QmQf8ZTQ9KAA6frp5LGrls3gFhRATEvhjaGTJnB8,66533
241
241
  datahub/ingestion/source/aws/s3_boto_utils.py,sha256=Y54jlLV5gLcuZ4Zs57kIW5dYHD89RSFfsVNlFbRnSkQ,3901
242
242
  datahub/ingestion/source/aws/s3_util.py,sha256=OFypcgmVC6jnZM90-gjcPpAMtTV1lbnreCaMhCzNlzs,2149
243
243
  datahub/ingestion/source/aws/sagemaker.py,sha256=Bl2tkBYnrindgx61VHYgNovUF_Kp_fXNcivQn28vC2w,5254
@@ -283,7 +283,7 @@ datahub/ingestion/source/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
283
283
  datahub/ingestion/source/common/data_platforms.py,sha256=HhuP3YIEi2WpyKDjUU8RiM0a2qjHWQcvc8kcqub0cVo,548
284
284
  datahub/ingestion/source/common/data_reader.py,sha256=XbSxiRTYrk6seOz0ZjVjzSpGvP8lEjmqXrNI4cdYYmQ,1819
285
285
  datahub/ingestion/source/common/gcp_credentials_config.py,sha256=_NapGkAqZMbXNClLlmOfANS7U6rChhdthRX9s9iUv9k,2411
286
- datahub/ingestion/source/common/subtypes.py,sha256=wkFfCwfjkvllpEYWjC6Bsv3htVYBGVCAkZPs3oFXhII,3306
286
+ datahub/ingestion/source/common/subtypes.py,sha256=SvsaT2PM5VG7iH3c0iyvAK3oyWS_EpB3LhFOoX-e5Ws,4493
287
287
  datahub/ingestion/source/data_lake_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
288
  datahub/ingestion/source/data_lake_common/config.py,sha256=qUk83B01hjuBKHvVz8SmXnVCy5eFj-2-2QLEOrAdbgk,359
289
289
  datahub/ingestion/source/data_lake_common/data_lake_utils.py,sha256=55mK0nsehqGDTUOol9Oi3jZs8Pb04PIsHdC2WPP0dkg,6576
@@ -299,7 +299,7 @@ datahub/ingestion/source/datahub/report.py,sha256=VHBfCbwFRzdLdB7hQG9ST4EiZxl_vB
299
299
  datahub/ingestion/source/datahub/state.py,sha256=PZoT7sSK1wadVf5vN6phrgr7I6LL7ePP-EJjP1OO0bQ,3507
300
300
  datahub/ingestion/source/dbt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
301
301
  datahub/ingestion/source/dbt/dbt_cloud.py,sha256=435blM28-RIE7ZfQReh69zBXppv8tjbku10oFcyJY8Q,17891
302
- datahub/ingestion/source/dbt/dbt_common.py,sha256=kcpIKAhrJHja8wabqtpzLY7JsRGDJUddoH4TWOqszq8,82062
302
+ datahub/ingestion/source/dbt/dbt_common.py,sha256=5iqlHbH1eaRcysxvFmDfgNrfVpygnmmeHbLq_sLg2P4,82190
303
303
  datahub/ingestion/source/dbt/dbt_core.py,sha256=WVI2ZYXOMxgFzJnJqsqmEGS-5xdfiVIDsCb78lvSeQ0,24930
304
304
  datahub/ingestion/source/dbt/dbt_tests.py,sha256=pOZJaP4VsbaE5j4qVlE_E3ifno_KQpidfGTvOi5fr6I,9839
305
305
  datahub/ingestion/source/debug/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -487,7 +487,7 @@ datahub/ingestion/source/snowflake/snowflake_usage_v2.py,sha256=ySFm7WDk8FW9KjCn
487
487
  datahub/ingestion/source/snowflake/snowflake_utils.py,sha256=w-SftpjHSOf_6S2T2srHJyJta3MHS0usmn4Z9jgx4QE,13858
488
488
  datahub/ingestion/source/snowflake/snowflake_v2.py,sha256=eqOVRYmFiWQPAIDWUcOo5QZkG05xanlEbxz4aDTvSNM,34706
489
489
  datahub/ingestion/source/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
490
- datahub/ingestion/source/sql/athena.py,sha256=U-btrqnbOgrBptl6b--QJrio_AN-c6pF0yL-wbUt4P0,23986
490
+ datahub/ingestion/source/sql/athena.py,sha256=gF32rRkQ4TXQUKkyH3HPLINEuMDO0Tc1awGW8qEIUKw,24212
491
491
  datahub/ingestion/source/sql/clickhouse.py,sha256=_uf-6fQYxI1-kMw0dNUvJf1f75XX0Qps4HMVlgzdpmo,25670
492
492
  datahub/ingestion/source/sql/cockroachdb.py,sha256=WoOKCq7YjsuzSPm1SmKIYZ9CrvlSF8zWmP1fNHn4G3Q,1360
493
493
  datahub/ingestion/source/sql/druid.py,sha256=_tzgTa5jhPUXk6WCmS7p10feCwJm6yUFcOgMZA-OcE8,2922
@@ -499,7 +499,7 @@ datahub/ingestion/source/sql/mysql.py,sha256=34Vu3otULxUY0-JUEYdZw2aoyuTlc9KLcoJ
499
499
  datahub/ingestion/source/sql/oracle.py,sha256=ftnrk3iiEelyv9PBHPYbairuP1WgxZbi1gu6YdqY69E,29965
500
500
  datahub/ingestion/source/sql/postgres.py,sha256=t-28dTWLa3c_NgWlGS9ZVNFlZLxd6xTSguIKP4S4NHs,11887
501
501
  datahub/ingestion/source/sql/presto.py,sha256=tATa0M2q0PjUC_E9W_jSUsmKTP7cVJayLgrFMzG_eao,4223
502
- datahub/ingestion/source/sql/sql_common.py,sha256=ktCDlJeT1l_ZgwFwmq9SpssotKfyJ8xc4RFK6nmWb74,51648
502
+ datahub/ingestion/source/sql/sql_common.py,sha256=wSCfcqEONichvl4D9_tQ1HQa8puYF-5BpNnES93f7-Y,51786
503
503
  datahub/ingestion/source/sql/sql_config.py,sha256=u3nGZYYl1WtaxfNsDU5bglgZ5Jq3Fxk9xei_CUIAXB0,8222
504
504
  datahub/ingestion/source/sql/sql_generic.py,sha256=9AERvkK8kdJUeDOzCYJDb93xdv6Z4DGho0NfeHj5Uyg,2740
505
505
  datahub/ingestion/source/sql/sql_generic_profiler.py,sha256=Zr39j4SI1fPTx1JdopVJyBslFnyp3lZCeb1th9eEB5c,11723
@@ -509,13 +509,13 @@ datahub/ingestion/source/sql/sql_utils.py,sha256=q-Bsk6WxlsRtrw9RXBxvqI3zuaMTC_F
509
509
  datahub/ingestion/source/sql/sqlalchemy_data_reader.py,sha256=FvHZ4JEK3aR2DYOBZiT_ZsAy12RjTu4t_KIR_92B11k,2644
510
510
  datahub/ingestion/source/sql/sqlalchemy_uri.py,sha256=u0ZvgdJjXZdo_vl7YIQfYuuWbGwpnH6OSozI2e8ZV4I,858
511
511
  datahub/ingestion/source/sql/sqlalchemy_uri_mapper.py,sha256=KOpbmDIE2h1hyYEsbVHJi2B7FlsyUMTXZx4diyzltQg,1826
512
- datahub/ingestion/source/sql/teradata.py,sha256=9WdrxDy02lRJi9IZgsAATFsmxcQnIw5Gr6yCqHJQy5k,33507
512
+ datahub/ingestion/source/sql/teradata.py,sha256=yRU_F3dp2rH0nMC0iiL4X2DWXLyNn7kSWZ_ewSIgYEA,33537
513
513
  datahub/ingestion/source/sql/trino.py,sha256=zIfQ6GvW8Sbw4sxqsTcnibT51STka_nzNYvmld6HfHw,18947
514
514
  datahub/ingestion/source/sql/two_tier_sql_source.py,sha256=AB3Gtx4omAy_08zadHQpmUGmIGufkZ6o_ihWNnfvzYc,5783
515
- datahub/ingestion/source/sql/vertica.py,sha256=4keUJd6BMxaZZVYT13lT_8BWpUnZZeBn8Da46EltHy0,33441
515
+ datahub/ingestion/source/sql/vertica.py,sha256=i1HLBW_cjAYbSCxB5MI-_7ZWD7Wmn4m6kRc_IZMD__o,33595
516
516
  datahub/ingestion/source/sql/mssql/__init__.py,sha256=1agpl8S_uDW40olkhCX_W19dbr5GO9qgjS3R7pLRZSk,87
517
517
  datahub/ingestion/source/sql/mssql/job_models.py,sha256=nAo3rciu-w2-dXCz6_ekDEbGMEjCMEfh8WvSfXoF2l0,9359
518
- datahub/ingestion/source/sql/mssql/source.py,sha256=krV80XcNFu-N73xoUA-W2zLiop3pJP7zkb3Dvj4PDKU,42783
518
+ datahub/ingestion/source/sql/mssql/source.py,sha256=Uise_u6yXKU__9B_U3D3yObWNIVDzrz2AgEDZOlk6bQ,43101
519
519
  datahub/ingestion/source/sql/stored_procedures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
520
520
  datahub/ingestion/source/sql/stored_procedures/base.py,sha256=n0l5OaTuW-m3TRvkxs3TqvgMeWF6BagzW3tjyWUcC1A,8631
521
521
  datahub/ingestion/source/sql/stored_procedures/lineage.py,sha256=fryLhuAlsjr9SHIjHJ-PmtCMx89bjzWVnJZ3f1bwQVU,1905
@@ -535,7 +535,7 @@ datahub/ingestion/source/state_provider/datahub_ingestion_checkpointing_provider
535
535
  datahub/ingestion/source/state_provider/file_ingestion_checkpointing_provider.py,sha256=DziD57PbHn2Tcy51tYXCG-GQgyTGMUxnkuzVS_xihFY,4079
536
536
  datahub/ingestion/source/state_provider/state_provider_registry.py,sha256=SVq4mIyGNmLXE9OZx1taOiNPqDoQp03-Ot9rYnB5F3k,401
537
537
  datahub/ingestion/source/tableau/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
538
- datahub/ingestion/source/tableau/tableau.py,sha256=HhVcMBEWsPVWBVOwpSY4ShrwGnHL-O7qyYxl0U9tlgo,155161
538
+ datahub/ingestion/source/tableau/tableau.py,sha256=ryLxfWwCRXhz7-PhPl1y3OwX08KOFT5agBc9XWZRrGQ,155291
539
539
  datahub/ingestion/source/tableau/tableau_common.py,sha256=MIkHKZg_v2IVCRk-YdPlLZl3m0LcWZm5Indwb3IV2ZQ,26931
540
540
  datahub/ingestion/source/tableau/tableau_constant.py,sha256=ZcAeHsQUXVVL26ORly0ByZk_GJAFbxaKuJAlX_sYMac,2686
541
541
  datahub/ingestion/source/tableau/tableau_server_wrapper.py,sha256=nSyx9RzC6TCQDm-cTVJ657qT8iDwzk_8JMKpohhmOc4,1046
@@ -1087,8 +1087,8 @@ datahub_provider/operators/datahub_assertion_operator.py,sha256=uvTQ-jk2F0sbqqxp
1087
1087
  datahub_provider/operators/datahub_assertion_sensor.py,sha256=lCBj_3x1cf5GMNpHdfkpHuyHfVxsm6ff5x2Z5iizcAo,140
1088
1088
  datahub_provider/operators/datahub_operation_operator.py,sha256=aevDp2FzX7FxGlXrR0khoHNbxbhKR2qPEX5e8O2Jyzw,174
1089
1089
  datahub_provider/operators/datahub_operation_sensor.py,sha256=8fcdVBCEPgqy1etTXgLoiHoJrRt_nzFZQMdSzHqSG7M,168
1090
- acryl_datahub-1.1.0.5rc4.dist-info/METADATA,sha256=VA5JlGUBQDVDE7ZFv2nz76rrLvUFYpTcyKfcjjiidRk,182347
1091
- acryl_datahub-1.1.0.5rc4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1092
- acryl_datahub-1.1.0.5rc4.dist-info/entry_points.txt,sha256=bnGf6eX9UhiW8yVHtt6MJCVcmLErvrVQxTJAayA-PKc,9885
1093
- acryl_datahub-1.1.0.5rc4.dist-info/top_level.txt,sha256=iLjSrLK5ox1YVYcglRUkcvfZPvKlobBWx7CTUXx8_GI,25
1094
- acryl_datahub-1.1.0.5rc4.dist-info/RECORD,,
1090
+ acryl_datahub-1.1.0.5rc5.dist-info/METADATA,sha256=TVQ5LvGn85Nq01WoQbqeuRmjSXRjZZhtQiWGSpBgM8w,182347
1091
+ acryl_datahub-1.1.0.5rc5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1092
+ acryl_datahub-1.1.0.5rc5.dist-info/entry_points.txt,sha256=bnGf6eX9UhiW8yVHtt6MJCVcmLErvrVQxTJAayA-PKc,9885
1093
+ acryl_datahub-1.1.0.5rc5.dist-info/top_level.txt,sha256=iLjSrLK5ox1YVYcglRUkcvfZPvKlobBWx7CTUXx8_GI,25
1094
+ acryl_datahub-1.1.0.5rc5.dist-info/RECORD,,
datahub/_version.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Published at https://pypi.org/project/acryl-datahub/.
2
2
  __package_name__ = "acryl-datahub"
3
- __version__ = "1.1.0.5rc4"
3
+ __version__ = "1.1.0.5rc5"
4
4
 
5
5
 
6
6
  def is_dev_mode() -> bool:
datahub/cli/check_cli.py CHANGED
@@ -482,26 +482,43 @@ def server_config() -> None:
482
482
 
483
483
  @check.command()
484
484
  @click.option(
485
- "--urn", required=True, help="The urn or urn pattern (supports % for wildcard)"
485
+ "--urn", required=False, help="The urn or urn pattern (supports % for wildcard)"
486
486
  )
487
487
  @click.option("--aspect", default=None, help="Filter to a specific aspect name.")
488
488
  @click.option(
489
489
  "--start", type=int, default=None, help="Row number of sql store to restore from."
490
490
  )
491
491
  @click.option("--batch-size", type=int, default=None, help="How many rows to restore.")
492
+ @click.option(
493
+ "--file",
494
+ required=False,
495
+ type=click.Path(exists=True, dir_okay=True, readable=True),
496
+ help="File absolute path containing URNs (one per line) to restore indices",
497
+ )
492
498
  def restore_indices(
493
- urn: str,
499
+ urn: Optional[str],
494
500
  aspect: Optional[str],
495
501
  start: Optional[int],
496
502
  batch_size: Optional[int],
503
+ file: Optional[str],
497
504
  ) -> None:
498
505
  """Resync metadata changes into the search and graph indices."""
506
+ if urn is None and file is None:
507
+ raise click.UsageError("Either --urn or --file must be provided")
499
508
  graph = get_default_graph(ClientMode.CLI)
500
509
 
501
- result = graph.restore_indices(
510
+ graph.restore_indices(
502
511
  urn_pattern=urn,
503
512
  aspect=aspect,
504
513
  start=start,
505
514
  batch_size=batch_size,
515
+ file=file,
506
516
  )
507
- click.echo(result)
517
+
518
+
519
+ @check.command()
520
+ def get_kafka_consumer_offsets() -> None:
521
+ """Get Kafka consumer offsets from the DataHub API."""
522
+ graph = get_default_graph(ClientMode.CLI)
523
+ result = graph.get_kafka_consumer_offsets()
524
+ pprint.pprint(result)
@@ -1,12 +1,16 @@
1
+ # So that SourceCapabilityModifier can be resolved at runtime
2
+ from __future__ import annotations
3
+
1
4
  from dataclasses import dataclass
2
5
  from enum import Enum, auto
3
- from typing import Callable, Dict, Optional, Type
6
+ from typing import Callable, Dict, List, Optional, Type
4
7
 
5
8
  from datahub.ingestion.api.common import PipelineContext
6
9
  from datahub.ingestion.api.source import (
7
10
  Source,
8
11
  SourceCapability as SourceCapability,
9
12
  )
13
+ from datahub.ingestion.source.common.subtypes import SourceCapabilityModifier
10
14
 
11
15
 
12
16
  def config_class(config_cls: Type) -> Callable[[Type], Type]:
@@ -88,10 +92,14 @@ class CapabilitySetting:
88
92
  capability: SourceCapability
89
93
  description: str
90
94
  supported: bool
95
+ subtype_modifier: Optional[List[SourceCapabilityModifier]] = None
91
96
 
92
97
 
93
98
  def capability(
94
- capability_name: SourceCapability, description: str, supported: bool = True
99
+ capability_name: SourceCapability,
100
+ description: str,
101
+ supported: bool = True,
102
+ subtype_modifier: Optional[List[SourceCapabilityModifier]] = None,
95
103
  ) -> Callable[[Type], Type]:
96
104
  """
97
105
  A decorator to mark a source as having a certain capability
@@ -114,7 +122,10 @@ def capability(
114
122
  cls.__capabilities.update(base_caps)
115
123
 
116
124
  cls.__capabilities[capability_name] = CapabilitySetting(
117
- capability=capability_name, description=description, supported=supported
125
+ capability=capability_name,
126
+ description=description,
127
+ supported=supported,
128
+ subtype_modifier=subtype_modifier,
118
129
  )
119
130
  return cls
120
131
 
@@ -22,6 +22,7 @@ from typing import (
22
22
  Union,
23
23
  )
24
24
 
25
+ import progressbar
25
26
  from avro.schema import RecordSchema
26
27
  from pydantic import BaseModel
27
28
  from requests.models import HTTPError
@@ -504,7 +505,7 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
504
505
  "limit": limit,
505
506
  "filter": filter,
506
507
  }
507
- end_point = f"{self.config.server}/aspects?action=getTimeseriesAspectValues"
508
+ end_point = f"{self._gms_server}/aspects?action=getTimeseriesAspectValues"
508
509
  resp: Dict = self._post_generic(end_point, query_body)
509
510
 
510
511
  values: Optional[List] = resp.get("value", {}).get("values")
@@ -524,7 +525,7 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
524
525
  def get_entity_raw(
525
526
  self, entity_urn: str, aspects: Optional[List[str]] = None
526
527
  ) -> Dict:
527
- endpoint: str = f"{self.config.server}/entitiesV2/{Urn.url_encode(entity_urn)}"
528
+ endpoint: str = f"{self._gms_server}/entitiesV2/{Urn.url_encode(entity_urn)}"
528
529
  if aspects is not None:
529
530
  assert aspects, "if provided, aspects must be a non-empty list"
530
531
  endpoint = f"{endpoint}?aspects=List(" + ",".join(aspects) + ")"
@@ -654,15 +655,15 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
654
655
 
655
656
  @property
656
657
  def _search_endpoint(self):
657
- return f"{self.config.server}/entities?action=search"
658
+ return f"{self._gms_server}/entities?action=search"
658
659
 
659
660
  @property
660
661
  def _relationships_endpoint(self):
661
- return f"{self.config.server}/openapi/relationships/v1/"
662
+ return f"{self._gms_server}/openapi/relationships/v1/"
662
663
 
663
664
  @property
664
665
  def _aspect_count_endpoint(self):
665
- return f"{self.config.server}/aspects?action=getCount"
666
+ return f"{self._gms_server}/aspects?action=getCount"
666
667
 
667
668
  def get_domain_urn_by_name(self, domain_name: str) -> Optional[str]:
668
669
  """Retrieve a domain urn based on its name. Returns None if there is no match found"""
@@ -1209,7 +1210,7 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
1209
1210
  operation_name: Optional[str] = None,
1210
1211
  format_exception: bool = True,
1211
1212
  ) -> Dict:
1212
- url = f"{self.config.server}/api/graphql"
1213
+ url = f"{self._gms_server}/api/graphql"
1213
1214
 
1214
1215
  body: Dict = {
1215
1216
  "query": query,
@@ -1434,40 +1435,82 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
1434
1435
  related_aspects = response.get("relatedAspects", [])
1435
1436
  return reference_count, related_aspects
1436
1437
 
1438
+ def get_kafka_consumer_offsets(
1439
+ self,
1440
+ ) -> dict:
1441
+ """
1442
+ Get Kafka consumer offsets from the DataHub API.
1443
+
1444
+ Args:
1445
+ graph (DataHubGraph): The DataHub graph client
1446
+
1447
+ """
1448
+ urls = {
1449
+ "mcp": f"{self.config.server}/openapi/operations/kafka/mcp/consumer/offsets",
1450
+ "mcl": f"{self.config.server}/openapi/operations/kafka/mcl/consumer/offsets",
1451
+ "mcl-timeseries": f"{self.config.server}/openapi/operations/kafka/mcl-timeseries/consumer/offsets",
1452
+ }
1453
+
1454
+ params = {"skipCache": "true", "detailed": "true"}
1455
+ results = {}
1456
+ for key, url in urls.items():
1457
+ response = self._get_generic(url=url, params=params)
1458
+ results[key] = response
1459
+ if "errors" in response:
1460
+ logger.error(f"Error: {response['errors']}")
1461
+ return results
1462
+
1463
+ def _restore_index_call(self, payload_obj: dict) -> None:
1464
+ result = self._post_generic(
1465
+ f"{self._gms_server}/operations?action=restoreIndices", payload_obj
1466
+ )
1467
+ logger.debug(f"Restore indices result: {result}")
1468
+
1437
1469
  def restore_indices(
1438
1470
  self,
1439
- urn_pattern: str,
1471
+ urn_pattern: Optional[str] = None,
1440
1472
  aspect: Optional[str] = None,
1441
1473
  start: Optional[int] = None,
1442
1474
  batch_size: Optional[int] = None,
1443
- ) -> str:
1475
+ file: Optional[str] = None,
1476
+ ) -> None:
1444
1477
  """Restore the indices for a given urn or urn-like pattern.
1445
1478
 
1446
1479
  Args:
1447
- urn_pattern: The exact URN or a pattern (with % for wildcard) to match URNs.
1480
+ urn_pattern: The exact URN or a pattern (with % for wildcard) to match URNs. If not provided, will restore indices from the file.
1448
1481
  aspect: Optional aspect string to restore indices for a specific aspect.
1449
- start: Optional integer to decide which row number of sql store to restore from. Default: 0.
1450
- batch_size: Optional integer to decide how many rows to restore. Default: 10.
1482
+ start: Optional integer to decide which row number of sql store to restore from. Default: 0. Ignored in case file is provided.
1483
+ batch_size: Optional integer to decide how many rows to restore. Default: 10. Ignored in case file is provided.
1484
+ file: Optional file path to a file containing URNs to restore indices for.
1451
1485
 
1452
1486
  Returns:
1453
1487
  A string containing the result of the restore indices operation. This format is subject to change.
1454
1488
  """
1455
- if "%" in urn_pattern:
1456
- payload_obj: dict = {"urnLike": urn_pattern}
1489
+ payload_obj = {}
1490
+ if file is not None:
1491
+ with open(file) as f:
1492
+ for urn in progressbar.progressbar(f.readlines()):
1493
+ urn = urn.strip()
1494
+ if "%" in urn:
1495
+ payload_obj["urnLike"] = urn
1496
+ else:
1497
+ payload_obj["urn"] = urn
1498
+ if aspect is not None:
1499
+ payload_obj["aspect"] = aspect
1500
+ self._restore_index_call(payload_obj)
1457
1501
  else:
1458
- payload_obj = {"urn": urn_pattern}
1459
- if aspect is not None:
1460
- payload_obj["aspect"] = aspect
1461
- if start is not None:
1462
- payload_obj["start"] = start
1463
- if batch_size is not None:
1464
- payload_obj["batchSize"] = batch_size
1465
- raw_result = self._post_generic(
1466
- f"{self._gms_server}/operations?action=restoreIndices", payload_obj
1467
- )
1468
- result = raw_result["value"]
1469
- logger.debug(f"Restore indices result: {result}")
1470
- return result
1502
+ if urn_pattern is not None:
1503
+ if "%" in urn_pattern:
1504
+ payload_obj["urnLike"] = urn_pattern
1505
+ else:
1506
+ payload_obj["urn"] = urn_pattern
1507
+ if aspect is not None:
1508
+ payload_obj["aspect"] = aspect
1509
+ if start is not None:
1510
+ payload_obj["start"] = start
1511
+ if batch_size is not None:
1512
+ payload_obj["batchSize"] = batch_size
1513
+ self._restore_index_call(payload_obj)
1471
1514
 
1472
1515
  @functools.lru_cache
1473
1516
  def _make_schema_resolver(
@@ -1774,7 +1817,7 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
1774
1817
  "Accept": "application/json",
1775
1818
  "Content-Type": "application/json",
1776
1819
  }
1777
- url = f"{self.config.server}/openapi/v2/entity/batch/{entity_name}"
1820
+ url = f"{self._gms_server}/openapi/v2/entity/batch/{entity_name}"
1778
1821
  response = self._session.post(url, data=json.dumps(payload), headers=headers)
1779
1822
  response.raise_for_status()
1780
1823
 
@@ -1831,7 +1874,7 @@ class DataHubGraph(DatahubRestEmitter, EntityVersioningAPI):
1831
1874
  "Content-Type": "application/json",
1832
1875
  }
1833
1876
 
1834
- url = f"{self.config.server}/openapi/v3/entity/{entity_name}/batchGet"
1877
+ url = f"{self._gms_server}/openapi/v3/entity/{entity_name}/batchGet"
1835
1878
  if with_system_metadata:
1836
1879
  url += "?systemMetadata=true"
1837
1880
 
@@ -269,7 +269,7 @@ class GlueSourceReport(StaleEntityRemovalSourceReport):
269
269
  @capability(SourceCapability.DOMAINS, "Supported via the `domain` config field")
270
270
  @capability(
271
271
  SourceCapability.DELETION_DETECTION,
272
- "Enabled by default when stateful ingestion is turned on.",
272
+ "Enabled by default via stateful ingestion.",
273
273
  )
274
274
  @capability(SourceCapability.LINEAGE_COARSE, "Enabled by default")
275
275
  @capability(
@@ -1,5 +1,10 @@
1
+ import logging
2
+ from typing import Any, Dict
3
+
1
4
  from datahub.utilities.str_enum import StrEnum
2
5
 
6
+ logger = logging.getLogger(__name__)
7
+
3
8
 
4
9
  class DatasetSubTypes(StrEnum):
5
10
  # Generic SubTypes
@@ -76,6 +81,9 @@ class JobContainerSubTypes(StrEnum):
76
81
 
77
82
 
78
83
  class BIAssetSubTypes(StrEnum):
84
+ DASHBOARD = "Dashboard"
85
+ CHART = "Chart"
86
+
79
87
  # Generic SubTypes
80
88
  REPORT = "Report"
81
89
 
@@ -118,3 +126,36 @@ class MLAssetSubTypes(StrEnum):
118
126
  VERTEX_PIPELINE = "Pipeline Job"
119
127
  VERTEX_PIPELINE_TASK = "Pipeline Task"
120
128
  VERTEX_PIPELINE_TASK_RUN = "Pipeline Task Run"
129
+
130
+
131
+ def create_source_capability_modifier_enum():
132
+ all_values: Dict[str, Any] = {}
133
+ source_enums = [
134
+ DatasetSubTypes,
135
+ DatasetContainerSubTypes,
136
+ BIContainerSubTypes,
137
+ FlowContainerSubTypes,
138
+ JobContainerSubTypes,
139
+ BIAssetSubTypes,
140
+ MLAssetSubTypes,
141
+ ]
142
+
143
+ for enum_class in source_enums:
144
+ for member in enum_class: # type: ignore[var-annotated]
145
+ if member.name in all_values:
146
+ logger.error(
147
+ f"Warning: {member.name} already exists with value {all_values[member.name]}, skipping {member.value}"
148
+ )
149
+ continue
150
+ all_values[member.name] = member.value
151
+
152
+ enum_code = "class SourceCapabilityModifier(StrEnum):\n"
153
+ for name, value in all_values.items():
154
+ enum_code += f' {name} = "{value}"\n'
155
+
156
+ exec(enum_code, globals())
157
+ return globals()["SourceCapabilityModifier"]
158
+
159
+
160
+ # This will have all values from the enums above
161
+ SourceCapabilityModifier = create_source_capability_modifier_enum()
@@ -355,7 +355,7 @@ class DBTCommonConfig(
355
355
  # override default value to True.
356
356
  incremental_lineage: bool = Field(
357
357
  default=True,
358
- description="When enabled, emits incremental/patch lineage for non-dbt entities. When disabled, re-states lineage on each run.",
358
+ description="When enabled, emits incremental/patch lineage for non-dbt entities. When disabled, re-states lineage on each run. This would also require enabling 'incremental_lineage' in the counterpart warehouse ingestion (_e.g._ BigQuery, Redshift, etc).",
359
359
  )
360
360
 
361
361
  _remove_use_compiled_code = pydantic_removed_field("use_compiled_code")
@@ -33,7 +33,10 @@ from datahub.ingestion.api.decorators import (
33
33
  )
34
34
  from datahub.ingestion.api.source import MetadataWorkUnitProcessor, SourceReport
35
35
  from datahub.ingestion.api.workunit import MetadataWorkUnit
36
- from datahub.ingestion.source.common.subtypes import DatasetSubTypes
36
+ from datahub.ingestion.source.common.subtypes import (
37
+ DatasetSubTypes,
38
+ SourceCapabilityModifier,
39
+ )
37
40
  from datahub.ingestion.source.state.stale_entity_removal_handler import (
38
41
  StaleEntityRemovalHandler,
39
42
  StaleEntityRemovalSourceReport,
@@ -532,11 +535,11 @@ class SalesforceApi:
532
535
  @capability(
533
536
  capability_name=SourceCapability.DATA_PROFILING,
534
537
  description="Only table level profiling is supported via `profiling.enabled` config field",
538
+ subtype_modifier=[SourceCapabilityModifier.TABLE],
535
539
  )
536
540
  @capability(
537
541
  capability_name=SourceCapability.DELETION_DETECTION,
538
- description="Not supported yet",
539
- supported=False,
542
+ description="Enabled by default via stateful ingestion",
540
543
  )
541
544
  @capability(
542
545
  capability_name=SourceCapability.SCHEMA_METADATA,
@@ -29,7 +29,10 @@ from datahub.ingestion.api.decorators import (
29
29
  from datahub.ingestion.api.source import StructuredLogLevel
30
30
  from datahub.ingestion.api.workunit import MetadataWorkUnit
31
31
  from datahub.ingestion.source.aws.s3_util import make_s3_urn
32
- from datahub.ingestion.source.common.subtypes import DatasetContainerSubTypes
32
+ from datahub.ingestion.source.common.subtypes import (
33
+ DatasetContainerSubTypes,
34
+ SourceCapabilityModifier,
35
+ )
33
36
  from datahub.ingestion.source.ge_profiling_config import GEProfilingConfig
34
37
  from datahub.ingestion.source.sql.sql_common import (
35
38
  SQLAlchemySource,
@@ -321,9 +324,18 @@ class Partitionitem:
321
324
  @capability(
322
325
  SourceCapability.DATA_PROFILING,
323
326
  "Optionally enabled via configuration. Profiling uses sql queries on whole table which can be expensive operation.",
327
+ subtype_modifier=[SourceCapabilityModifier.TABLE],
328
+ )
329
+ @capability(
330
+ SourceCapability.LINEAGE_COARSE,
331
+ "Supported for S3 tables",
332
+ subtype_modifier=[SourceCapabilityModifier.TABLE],
333
+ )
334
+ @capability(
335
+ SourceCapability.LINEAGE_FINE,
336
+ "Supported for S3 tables",
337
+ subtype_modifier=[SourceCapabilityModifier.TABLE],
324
338
  )
325
- @capability(SourceCapability.LINEAGE_COARSE, "Supported for S3 tables")
326
- @capability(SourceCapability.LINEAGE_FINE, "Supported for S3 tables")
327
339
  @capability(SourceCapability.DESCRIPTIONS, "Enabled by default")
328
340
  class AthenaSource(SQLAlchemySource):
329
341
  """
@@ -27,6 +27,7 @@ from datahub.ingestion.api.decorators import (
27
27
  from datahub.ingestion.api.source import StructuredLogLevel
28
28
  from datahub.ingestion.api.source_helpers import auto_workunit
29
29
  from datahub.ingestion.api.workunit import MetadataWorkUnit
30
+ from datahub.ingestion.source.common.subtypes import SourceCapabilityModifier
30
31
  from datahub.ingestion.source.sql.mssql.job_models import (
31
32
  JobStep,
32
33
  MSSQLDataFlow,
@@ -177,10 +178,18 @@ class SQLServerConfig(BasicSQLAlchemyConfig):
177
178
  @capability(
178
179
  SourceCapability.LINEAGE_COARSE,
179
180
  "Enabled by default to get lineage for stored procedures via `include_lineage` and for views via `include_view_lineage`",
181
+ subtype_modifier=[
182
+ SourceCapabilityModifier.STORED_PROCEDURE,
183
+ SourceCapabilityModifier.VIEW,
184
+ ],
180
185
  )
181
186
  @capability(
182
187
  SourceCapability.LINEAGE_FINE,
183
188
  "Enabled by default to get lineage for stored procedures via `include_lineage` and for views via `include_view_column_lineage`",
189
+ subtype_modifier=[
190
+ SourceCapabilityModifier.STORED_PROCEDURE,
191
+ SourceCapabilityModifier.VIEW,
192
+ ],
184
193
  )
185
194
  class SQLServerSource(SQLAlchemySource):
186
195
  """
@@ -54,6 +54,7 @@ from datahub.ingestion.source.common.data_reader import DataReader
54
54
  from datahub.ingestion.source.common.subtypes import (
55
55
  DatasetContainerSubTypes,
56
56
  DatasetSubTypes,
57
+ SourceCapabilityModifier,
57
58
  )
58
59
  from datahub.ingestion.source.sql.sql_config import SQLCommonConfig
59
60
  from datahub.ingestion.source.sql.sql_report import SQLSourceReport
@@ -305,10 +306,12 @@ class ProfileMetadata:
305
306
  @capability(
306
307
  SourceCapability.LINEAGE_COARSE,
307
308
  "Enabled by default to get lineage for views via `include_view_lineage`",
309
+ subtype_modifier=[SourceCapabilityModifier.VIEW],
308
310
  )
309
311
  @capability(
310
312
  SourceCapability.LINEAGE_FINE,
311
313
  "Enabled by default to get lineage for views via `include_view_column_lineage`",
314
+ subtype_modifier=[SourceCapabilityModifier.VIEW],
312
315
  )
313
316
  @capability(SourceCapability.TEST_CONNECTION, "Enabled by default")
314
317
  @capability(
@@ -445,7 +445,10 @@ class TeradataConfig(BaseTeradataConfig, BaseTimeWindowConfig):
445
445
  @capability(SourceCapability.DOMAINS, "Enabled by default")
446
446
  @capability(SourceCapability.CONTAINERS, "Enabled by default")
447
447
  @capability(SourceCapability.PLATFORM_INSTANCE, "Enabled by default")
448
- @capability(SourceCapability.DELETION_DETECTION, "Optionally enabled via configuration")
448
+ @capability(
449
+ SourceCapability.DELETION_DETECTION,
450
+ "Enabled by default when stateful ingestion is turned on",
451
+ )
449
452
  @capability(SourceCapability.DATA_PROFILING, "Optionally enabled via configuration")
450
453
  @capability(SourceCapability.LINEAGE_COARSE, "Optionally enabled via configuration")
451
454
  @capability(SourceCapability.LINEAGE_FINE, "Optionally enabled via configuration")
@@ -25,7 +25,10 @@ from datahub.ingestion.api.decorators import (
25
25
  )
26
26
  from datahub.ingestion.api.workunit import MetadataWorkUnit
27
27
  from datahub.ingestion.source.common.data_reader import DataReader
28
- from datahub.ingestion.source.common.subtypes import DatasetSubTypes
28
+ from datahub.ingestion.source.common.subtypes import (
29
+ DatasetSubTypes,
30
+ SourceCapabilityModifier,
31
+ )
29
32
  from datahub.ingestion.source.sql.sql_common import (
30
33
  SQLAlchemySource,
31
34
  SqlWorkUnit,
@@ -114,6 +117,10 @@ class VerticaConfig(BasicSQLAlchemyConfig):
114
117
  @capability(
115
118
  SourceCapability.LINEAGE_COARSE,
116
119
  "Enabled by default, can be disabled via configuration `include_view_lineage` and `include_projection_lineage`",
120
+ subtype_modifier=[
121
+ SourceCapabilityModifier.VIEW,
122
+ SourceCapabilityModifier.PROJECTIONS,
123
+ ],
117
124
  )
118
125
  @capability(
119
126
  SourceCapability.DELETION_DETECTION,