openmetadata-ingestion 1.3.0.0.dev0__py3-none-any.whl → 1.3.1.0__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 openmetadata-ingestion might be problematic. Click here for more details.

Files changed (631) hide show
  1. metadata/applications/auto_tagger.py +8 -3
  2. metadata/cli/db_dump.py +1 -0
  3. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +39 -47
  4. metadata/data_insight/processor/reports/data_processor.py +1 -0
  5. metadata/data_insight/producer/cost_analysis_producer.py +78 -14
  6. metadata/data_insight/producer/entity_producer.py +1 -1
  7. metadata/data_insight/producer/producer_interface.py +1 -1
  8. metadata/data_insight/producer/web_analytics_producer.py +1 -1
  9. metadata/data_insight/source/metadata.py +10 -1
  10. metadata/data_quality/processor/test_case_runner.py +7 -5
  11. metadata/data_quality/source/test_suite.py +0 -1
  12. metadata/data_quality/validations/mixins/pandas_validator_mixin.py +4 -2
  13. metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
  14. metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
  15. metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
  16. metadata/examples/workflows/bigtable.yaml +32 -0
  17. metadata/generated/antlr/EntityLinkLexer.py +124 -58
  18. metadata/generated/schema/analytics/__init__.py +1 -1
  19. metadata/generated/schema/analytics/basic.py +1 -1
  20. metadata/generated/schema/analytics/reportData.py +1 -1
  21. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  22. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  23. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  24. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  25. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  26. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  27. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  28. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  29. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  30. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  31. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  32. metadata/generated/schema/api/__init__.py +1 -1
  33. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  34. metadata/generated/schema/api/analytics/__init__.py +1 -1
  35. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  36. metadata/generated/schema/api/automations/__init__.py +1 -1
  37. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  38. metadata/generated/schema/api/bulkAssets.py +1 -1
  39. metadata/generated/schema/api/classification/__init__.py +1 -1
  40. metadata/generated/schema/api/classification/createClassification.py +1 -1
  41. metadata/generated/schema/api/classification/createTag.py +1 -1
  42. metadata/generated/schema/api/classification/loadTags.py +1 -1
  43. metadata/generated/schema/api/createBot.py +1 -1
  44. metadata/generated/schema/api/createEventPublisherJob.py +2 -2
  45. metadata/generated/schema/api/createType.py +1 -1
  46. metadata/generated/schema/api/data/__init__.py +1 -1
  47. metadata/generated/schema/api/data/createChart.py +1 -1
  48. metadata/generated/schema/api/data/createContainer.py +1 -1
  49. metadata/generated/schema/api/data/createCustomProperty.py +6 -10
  50. metadata/generated/schema/api/data/createDashboard.py +1 -1
  51. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  52. metadata/generated/schema/api/data/createDatabase.py +1 -1
  53. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  54. metadata/generated/schema/api/data/createGlossary.py +1 -1
  55. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  56. metadata/generated/schema/api/data/createMlModel.py +1 -1
  57. metadata/generated/schema/api/data/createPipeline.py +1 -1
  58. metadata/generated/schema/api/data/createQuery.py +1 -1
  59. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  60. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  61. metadata/generated/schema/api/data/createTable.py +1 -1
  62. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  63. metadata/generated/schema/api/data/createTopic.py +1 -1
  64. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  65. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  66. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  67. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  68. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  69. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  70. metadata/generated/schema/api/docStore/__init__.py +1 -1
  71. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  72. metadata/generated/schema/api/domains/__init__.py +1 -1
  73. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  74. metadata/generated/schema/api/domains/createDomain.py +1 -1
  75. metadata/generated/schema/api/feed/__init__.py +1 -1
  76. metadata/generated/schema/api/feed/closeTask.py +1 -1
  77. metadata/generated/schema/api/feed/createPost.py +1 -1
  78. metadata/generated/schema/api/feed/createSuggestion.py +30 -0
  79. metadata/generated/schema/api/feed/createThread.py +1 -1
  80. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  81. metadata/generated/schema/api/feed/threadCount.py +1 -1
  82. metadata/generated/schema/api/lineage/__init__.py +1 -1
  83. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  84. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  85. metadata/generated/schema/api/policies/__init__.py +1 -1
  86. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  87. metadata/generated/schema/api/services/__init__.py +1 -1
  88. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  89. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  90. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  91. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  92. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  93. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  94. metadata/generated/schema/api/services/createSearchService.py +1 -1
  95. metadata/generated/schema/api/services/createStorageService.py +1 -1
  96. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  97. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  98. metadata/generated/schema/api/setOwner.py +1 -1
  99. metadata/generated/schema/api/teams/__init__.py +1 -1
  100. metadata/generated/schema/api/teams/createPersona.py +1 -1
  101. metadata/generated/schema/api/teams/createRole.py +1 -1
  102. metadata/generated/schema/api/teams/createTeam.py +1 -1
  103. metadata/generated/schema/api/teams/createUser.py +1 -1
  104. metadata/generated/schema/api/tests/__init__.py +1 -1
  105. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  106. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  107. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  108. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  109. metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
  110. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  111. metadata/generated/schema/api/voteRequest.py +1 -1
  112. metadata/generated/schema/auth/__init__.py +1 -1
  113. metadata/generated/schema/auth/basicAuth.py +1 -1
  114. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  115. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  116. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  117. metadata/generated/schema/auth/emailRequest.py +1 -1
  118. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  119. metadata/generated/schema/auth/generateToken.py +1 -1
  120. metadata/generated/schema/auth/jwtAuth.py +1 -1
  121. metadata/generated/schema/auth/loginRequest.py +1 -1
  122. metadata/generated/schema/auth/logoutRequest.py +1 -1
  123. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  124. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  125. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  126. metadata/generated/schema/auth/refreshToken.py +1 -1
  127. metadata/generated/schema/auth/registrationRequest.py +1 -1
  128. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  129. metadata/generated/schema/auth/revokeToken.py +1 -1
  130. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  131. metadata/generated/schema/auth/ssoAuth.py +1 -1
  132. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  133. metadata/generated/schema/configuration/__init__.py +1 -1
  134. metadata/generated/schema/configuration/appsPrivateConfiguration.py +28 -0
  135. metadata/generated/schema/configuration/authConfig.py +1 -1
  136. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  137. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  138. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  139. metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
  140. metadata/generated/schema/configuration/elasticSearchConfiguration.py +4 -1
  141. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  142. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  143. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  144. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  145. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  146. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  147. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  148. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  149. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  150. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  151. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  152. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  153. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  154. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  155. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  156. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  157. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  158. metadata/generated/schema/dataInsight/__init__.py +1 -1
  159. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  160. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  161. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  162. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  163. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  164. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  165. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  166. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  167. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  168. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  169. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  170. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  171. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  172. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  173. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  174. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  175. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  176. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  177. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  178. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  179. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  180. metadata/generated/schema/email/__init__.py +1 -1
  181. metadata/generated/schema/email/emailRequest.py +1 -1
  182. metadata/generated/schema/email/smtpSettings.py +1 -1
  183. metadata/generated/schema/entity/__init__.py +1 -1
  184. metadata/generated/schema/entity/applications/__init__.py +1 -1
  185. metadata/generated/schema/entity/applications/app.py +4 -1
  186. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  187. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  188. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +6 -1
  189. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  190. metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +1 -1
  191. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -16
  192. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  193. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  194. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  195. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +2 -2
  196. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
  197. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
  198. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  199. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  200. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  201. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  202. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  203. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  204. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  205. metadata/generated/schema/entity/automations/__init__.py +1 -1
  206. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  207. metadata/generated/schema/entity/automations/workflow.py +1 -1
  208. metadata/generated/schema/entity/bot.py +1 -1
  209. metadata/generated/schema/entity/classification/__init__.py +1 -1
  210. metadata/generated/schema/entity/classification/classification.py +1 -1
  211. metadata/generated/schema/entity/classification/tag.py +1 -1
  212. metadata/generated/schema/entity/data/__init__.py +1 -1
  213. metadata/generated/schema/entity/data/chart.py +1 -1
  214. metadata/generated/schema/entity/data/container.py +1 -1
  215. metadata/generated/schema/entity/data/dashboard.py +1 -1
  216. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  217. metadata/generated/schema/entity/data/database.py +1 -1
  218. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  219. metadata/generated/schema/entity/data/glossary.py +1 -1
  220. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  221. metadata/generated/schema/entity/data/metrics.py +1 -1
  222. metadata/generated/schema/entity/data/mlmodel.py +2 -2
  223. metadata/generated/schema/entity/data/pipeline.py +1 -1
  224. metadata/generated/schema/entity/data/query.py +1 -1
  225. metadata/generated/schema/entity/data/report.py +1 -1
  226. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  227. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  228. metadata/generated/schema/entity/data/table.py +2 -1
  229. metadata/generated/schema/entity/data/topic.py +1 -1
  230. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  231. metadata/generated/schema/entity/docStore/document.py +1 -1
  232. metadata/generated/schema/entity/domains/__init__.py +1 -1
  233. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  234. metadata/generated/schema/entity/domains/domain.py +1 -1
  235. metadata/generated/schema/entity/events/__init__.py +1 -1
  236. metadata/generated/schema/entity/events/webhook.py +4 -6
  237. metadata/generated/schema/entity/feed/__init__.py +1 -1
  238. metadata/generated/schema/entity/feed/suggestion.py +61 -0
  239. metadata/generated/schema/entity/feed/thread.py +1 -1
  240. metadata/generated/schema/entity/policies/__init__.py +1 -1
  241. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  242. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  243. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  244. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  245. metadata/generated/schema/entity/policies/filters.py +1 -1
  246. metadata/generated/schema/entity/policies/policy.py +1 -1
  247. metadata/generated/schema/entity/services/__init__.py +1 -1
  248. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  249. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  250. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  251. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  252. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  253. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  254. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  255. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  265. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  267. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  268. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  269. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  270. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  271. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  272. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
  273. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  274. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  275. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  276. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  277. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  278. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  279. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  280. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  281. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  282. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  283. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  284. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  285. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  287. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  288. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  289. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  290. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  291. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  292. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  296. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  297. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  300. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  301. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  302. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  303. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  304. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +8 -6
  310. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  318. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  319. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  320. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  321. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  322. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  323. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  324. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +14 -2
  325. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  326. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  327. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +14 -2
  328. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  329. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  330. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  331. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  332. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  333. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
  334. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  335. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  336. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  337. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  340. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  341. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  343. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  344. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  345. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  346. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  347. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  348. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  349. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  350. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  352. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  353. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  354. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  355. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  356. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  357. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  358. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  359. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  360. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  361. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  362. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  363. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  365. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  367. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  368. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  369. metadata/generated/schema/entity/services/databaseService.py +4 -4
  370. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  371. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  372. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  373. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  374. metadata/generated/schema/entity/services/messagingService.py +1 -1
  375. metadata/generated/schema/entity/services/metadataService.py +1 -1
  376. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  377. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  378. metadata/generated/schema/entity/services/searchService.py +1 -1
  379. metadata/generated/schema/entity/services/serviceType.py +1 -1
  380. metadata/generated/schema/entity/services/storageService.py +1 -1
  381. metadata/generated/schema/entity/teams/__init__.py +1 -1
  382. metadata/generated/schema/entity/teams/persona.py +1 -1
  383. metadata/generated/schema/entity/teams/role.py +1 -1
  384. metadata/generated/schema/entity/teams/team.py +1 -1
  385. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  386. metadata/generated/schema/entity/teams/user.py +1 -1
  387. metadata/generated/schema/entity/type.py +3 -18
  388. metadata/generated/schema/entity/utils/__init__.py +1 -1
  389. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  390. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  391. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  392. metadata/generated/schema/events/__init__.py +1 -1
  393. metadata/generated/schema/events/alertMetrics.py +1 -1
  394. metadata/generated/schema/events/api/__init__.py +1 -1
  395. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  396. metadata/generated/schema/events/emailAlertConfig.py +1 -6
  397. metadata/generated/schema/events/eventFilterRule.py +1 -1
  398. metadata/generated/schema/events/eventSubscription.py +5 -10
  399. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  400. metadata/generated/schema/events/failedEvent.py +1 -1
  401. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  402. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  403. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  404. metadata/generated/schema/metadataIngestion/application.py +4 -1
  405. metadata/generated/schema/metadataIngestion/applicationPipeline.py +4 -1
  406. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  407. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  408. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  409. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  410. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  411. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  412. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  413. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  414. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
  415. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  416. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  417. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
  418. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  419. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  420. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
  421. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  422. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  423. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  424. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  425. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  426. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  427. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  428. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  429. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  430. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  431. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  432. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  433. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  434. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  435. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  436. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  437. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  438. metadata/generated/schema/monitoring/__init__.py +1 -1
  439. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  440. metadata/generated/schema/security/__init__.py +1 -1
  441. metadata/generated/schema/security/client/__init__.py +1 -1
  442. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  443. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  444. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  445. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  446. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  447. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  448. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  449. metadata/generated/schema/security/credentials/__init__.py +1 -1
  450. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  451. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  452. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  453. metadata/generated/schema/security/credentials/azureCredentials.py +16 -9
  454. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  455. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  456. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  457. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  458. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  459. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  460. metadata/generated/schema/security/secrets/__init__.py +1 -1
  461. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  462. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  463. metadata/generated/schema/security/secrets/secretsManagerProvider.py +3 -1
  464. metadata/generated/schema/security/securityConfiguration.py +1 -1
  465. metadata/generated/schema/security/ssl/__init__.py +1 -1
  466. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  467. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  468. metadata/generated/schema/settings/__init__.py +1 -1
  469. metadata/generated/schema/settings/settings.py +1 -1
  470. metadata/generated/schema/system/__init__.py +1 -1
  471. metadata/generated/schema/system/entityError.py +1 -1
  472. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  473. metadata/generated/schema/system/indexingError.py +1 -1
  474. metadata/generated/schema/system/ui/__init__.py +1 -1
  475. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  476. metadata/generated/schema/system/ui/page.py +1 -1
  477. metadata/generated/schema/tests/__init__.py +1 -1
  478. metadata/generated/schema/tests/assigned.py +1 -1
  479. metadata/generated/schema/tests/basic.py +1 -1
  480. metadata/generated/schema/tests/customMetric.py +1 -1
  481. metadata/generated/schema/tests/resolved.py +1 -1
  482. metadata/generated/schema/tests/testCase.py +1 -1
  483. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  484. metadata/generated/schema/tests/testDefinition.py +2 -1
  485. metadata/generated/schema/tests/testSuite.py +1 -1
  486. metadata/generated/schema/type/__init__.py +1 -1
  487. metadata/generated/schema/type/auditLog.py +1 -1
  488. metadata/generated/schema/type/basic.py +6 -2
  489. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  490. metadata/generated/schema/type/changeEvent.py +1 -1
  491. metadata/generated/schema/type/changeEventType.py +6 -1
  492. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  493. metadata/generated/schema/type/csvDocumentation.py +1 -1
  494. metadata/generated/schema/type/csvErrorType.py +1 -1
  495. metadata/generated/schema/type/csvFile.py +1 -1
  496. metadata/generated/schema/type/csvImportResult.py +1 -1
  497. metadata/generated/schema/type/customProperties/__init__.py +3 -0
  498. metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
  499. metadata/generated/schema/type/customProperty.py +52 -0
  500. metadata/generated/schema/type/dailyCount.py +1 -1
  501. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  502. metadata/generated/schema/type/entityHistory.py +1 -1
  503. metadata/generated/schema/type/entityLineage.py +1 -1
  504. metadata/generated/schema/type/entityReference.py +1 -1
  505. metadata/generated/schema/type/entityReferenceList.py +1 -1
  506. metadata/generated/schema/type/entityRelationship.py +1 -1
  507. metadata/generated/schema/type/entityUsage.py +1 -1
  508. metadata/generated/schema/type/filterPattern.py +1 -1
  509. metadata/generated/schema/type/function.py +1 -1
  510. metadata/generated/schema/type/include.py +1 -1
  511. metadata/generated/schema/type/jdbcConnection.py +1 -1
  512. metadata/generated/schema/type/lifeCycle.py +1 -1
  513. metadata/generated/schema/type/paging.py +1 -1
  514. metadata/generated/schema/type/profile.py +1 -1
  515. metadata/generated/schema/type/queryParserData.py +1 -1
  516. metadata/generated/schema/type/reaction.py +1 -1
  517. metadata/generated/schema/type/schedule.py +1 -1
  518. metadata/generated/schema/type/schema.py +1 -1
  519. metadata/generated/schema/type/tableQuery.py +1 -1
  520. metadata/generated/schema/type/tableUsageCount.py +1 -1
  521. metadata/generated/schema/type/tagLabel.py +1 -1
  522. metadata/generated/schema/type/usageDetails.py +1 -1
  523. metadata/generated/schema/type/usageRequest.py +1 -1
  524. metadata/generated/schema/type/votes.py +1 -1
  525. metadata/great_expectations/action.py +7 -17
  526. metadata/ingestion/api/status.py +4 -0
  527. metadata/ingestion/api/steps.py +14 -1
  528. metadata/ingestion/api/topology_runner.py +4 -1
  529. metadata/ingestion/lineage/parser.py +4 -5
  530. metadata/ingestion/models/custom_properties.py +0 -1
  531. metadata/ingestion/models/patch_request.py +3 -2
  532. metadata/ingestion/ometa/client.py +6 -0
  533. metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
  534. metadata/ingestion/ometa/mixins/patch_mixin.py +0 -1
  535. metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
  536. metadata/ingestion/ometa/ometa_api.py +16 -8
  537. metadata/ingestion/ometa/routes.py +7 -0
  538. metadata/ingestion/sink/metadata_rest.py +2 -2
  539. metadata/ingestion/source/dashboard/dashboard_service.py +0 -1
  540. metadata/ingestion/source/dashboard/looker/metadata.py +3 -6
  541. metadata/ingestion/source/dashboard/metabase/client.py +4 -0
  542. metadata/ingestion/source/dashboard/metabase/metadata.py +5 -4
  543. metadata/ingestion/source/dashboard/metabase/models.py +2 -2
  544. metadata/ingestion/source/dashboard/superset/api_source.py +0 -1
  545. metadata/ingestion/source/dashboard/superset/db_source.py +1 -3
  546. metadata/ingestion/source/dashboard/superset/queries.py +1 -1
  547. metadata/ingestion/source/dashboard/tableau/metadata.py +19 -1
  548. metadata/ingestion/source/database/athena/client.py +2 -4
  549. metadata/ingestion/source/database/azuresql/metadata.py +0 -1
  550. metadata/ingestion/source/database/bigquery/helper.py +68 -1
  551. metadata/ingestion/source/database/bigquery/metadata.py +12 -3
  552. metadata/ingestion/source/database/bigquery/queries.py +22 -0
  553. metadata/ingestion/source/database/bigtable/client.py +62 -0
  554. metadata/ingestion/source/database/bigtable/connection.py +116 -0
  555. metadata/ingestion/source/database/bigtable/metadata.py +224 -0
  556. metadata/ingestion/source/database/bigtable/models.py +60 -0
  557. metadata/ingestion/source/database/common_db_source.py +2 -2
  558. metadata/ingestion/source/database/common_nosql_source.py +22 -4
  559. metadata/ingestion/source/database/databricks/client.py +0 -1
  560. metadata/ingestion/source/database/databricks/metadata.py +132 -46
  561. metadata/ingestion/source/database/databricks/queries.py +3 -4
  562. metadata/ingestion/source/database/datalake/metadata.py +9 -4
  563. metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
  564. metadata/ingestion/source/database/dbt/dbt_service.py +3 -11
  565. metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
  566. metadata/ingestion/source/database/dbt/metadata.py +16 -29
  567. metadata/ingestion/source/database/extended_sample_data.py +202 -134
  568. metadata/ingestion/source/database/hive/connection.py +0 -2
  569. metadata/ingestion/source/database/mssql/metadata.py +0 -1
  570. metadata/ingestion/source/database/mssql/queries.py +1 -2
  571. metadata/ingestion/source/database/oracle/queries.py +2 -2
  572. metadata/ingestion/source/database/oracle/utils.py +0 -1
  573. metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
  574. metadata/ingestion/source/database/sample_data.py +0 -1
  575. metadata/ingestion/source/database/sas/metadata.py +2 -3
  576. metadata/ingestion/source/database/snowflake/utils.py +2 -6
  577. metadata/ingestion/source/database/stored_procedures_mixin.py +0 -1
  578. metadata/ingestion/source/database/unitycatalog/metadata.py +16 -31
  579. metadata/ingestion/source/messaging/common_broker_source.py +9 -8
  580. metadata/ingestion/source/messaging/kafka/connection.py +45 -4
  581. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
  582. metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
  583. metadata/ingestion/source/search/elasticsearch/metadata.py +0 -1
  584. metadata/ingestion/source/storage/storage_service.py +8 -8
  585. metadata/profiler/interface/pandas/profiler_interface.py +7 -2
  586. metadata/profiler/interface/profiler_interface_factory.py +7 -0
  587. metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
  588. metadata/profiler/interface/sqlalchemy/profiler_interface.py +3 -5
  589. metadata/profiler/metrics/hybrid/histogram.py +1 -0
  590. metadata/profiler/orm/functions/conn_test.py +1 -0
  591. metadata/profiler/orm/functions/sum.py +1 -0
  592. metadata/profiler/orm/functions/table_metric_computer.py +0 -1
  593. metadata/profiler/orm/registry.py +1 -0
  594. metadata/profiler/processor/core.py +2 -2
  595. metadata/profiler/processor/processor.py +0 -2
  596. metadata/profiler/processor/sample_data_handler.py +6 -2
  597. metadata/profiler/source/base/profiler_source.py +0 -1
  598. metadata/profiler/source/bigquery/type_mapper.py +0 -1
  599. metadata/readers/file/api_reader.py +0 -1
  600. metadata/utils/datalake/datalake_utils.py +369 -129
  601. metadata/utils/entity_link.py +26 -6
  602. metadata/utils/execution_time_tracker.py +199 -0
  603. metadata/utils/filters.py +4 -0
  604. metadata/utils/helpers.py +30 -38
  605. metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
  606. metadata/utils/secrets/aws_secrets_manager.py +7 -2
  607. metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
  608. metadata/utils/secrets/azure_kv_secrets_manager.py +148 -0
  609. metadata/utils/secrets/external_secrets_manager.py +25 -3
  610. metadata/utils/secrets/secrets_manager_factory.py +13 -31
  611. metadata/workflow/application.py +10 -10
  612. metadata/workflow/base.py +4 -1
  613. metadata/workflow/metadata.py +0 -1
  614. metadata/workflow/output_handler.py +22 -0
  615. metadata/workflow/usage.py +0 -1
  616. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/METADATA +298 -289
  617. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/RECORD +624 -612
  618. metadata/generated/schema/entity/services/connections/database/duckdbConnection.py +0 -96
  619. metadata/generated/schema/events/userAlertConfig.py +0 -25
  620. metadata/ingestion/source/database/duckdb/connection.py +0 -76
  621. metadata/ingestion/source/database/duckdb/metadata.py +0 -204
  622. metadata/ingestion/source/database/duckdb/queries.py +0 -141
  623. metadata/ingestion/source/database/duckdb/utils.py +0 -349
  624. metadata/utils/secrets/client/loader.py +0 -78
  625. /metadata/ingestion/source/database/{duckdb → bigtable}/__init__.py +0 -0
  626. /metadata/{utils/secrets/client → profiler/interface/sqlalchemy/db2}/__init__.py +0 -0
  627. /metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +0 -0
  628. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/LICENSE +0 -0
  629. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/WHEEL +0 -0
  630. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/entry_points.txt +0 -0
  631. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/top_level.txt +0 -0
@@ -15,8 +15,9 @@ from different auths and different file systems.
15
15
  """
16
16
  import ast
17
17
  import json
18
+ import random
18
19
  import traceback
19
- from typing import Dict, List, Optional, cast
20
+ from typing import Dict, List, Optional, Union, cast
20
21
 
21
22
  from metadata.generated.schema.entity.data.table import Column, DataType
22
23
  from metadata.ingestion.source.database.column_helpers import truncate_column_name
@@ -29,18 +30,6 @@ from metadata.utils.logger import utils_logger
29
30
 
30
31
  logger = utils_logger()
31
32
 
32
- DATALAKE_DATA_TYPES = {
33
- **dict.fromkeys(["int64", "int", "int32"], DataType.INT),
34
- "dict": DataType.JSON,
35
- "list": DataType.ARRAY,
36
- **dict.fromkeys(["float64", "float32", "float"], DataType.FLOAT),
37
- "bool": DataType.BOOLEAN,
38
- **dict.fromkeys(
39
- ["datetime64", "timedelta[ns]", "datetime64[ns]"], DataType.DATETIME
40
- ),
41
- "str": DataType.STRING,
42
- }
43
-
44
33
 
45
34
  def fetch_dataframe(
46
35
  config_source,
@@ -100,135 +89,386 @@ def get_file_format_type(key_name, metadata_entry=None):
100
89
  return False
101
90
 
102
91
 
103
- def unique_json_structure(dicts: List[Dict]) -> Dict:
104
- """Given a sample of `n` json objects, return a json object that represents the unique structure of all `n` objects.
105
- Note that the type of the key will be that of the last object seen in the sample.
92
+ # pylint: disable=import-outside-toplevel
93
+ class DataFrameColumnParser:
94
+ """A column parser object. This serves as a Creator class for the appropriate column parser object parser
95
+ for datalake types. It allows us to implement different schema parsers for different datalake types without
96
+ implementing many conditionals statements.
106
97
 
107
- Args:
108
- dicts: list of json objects
98
+ e.g. if we want to implement a column parser for parquet files, we can simply implement a
99
+ ParquetDataFrameColumnParser class and add it as part of the `create` method. The `create` method will then return
100
+ the appropriate parser based on the file type. The `ColumnParser` class has a single entry point `get_columns` which
101
+ will call the `get_columns` method of the appropriate parser.
109
102
  """
110
- result = {}
111
- for dict_ in dicts:
112
- for key, value in dict_.items():
113
- if isinstance(value, dict):
114
- nested_json = result.get(key, {})
115
- # `isinstance(nested_json, dict)` if for a key we first see a non dict value
116
- # but then see a dict value later, we will consider the key to be a dict.
117
- result[key] = unique_json_structure(
118
- [nested_json if isinstance(nested_json, dict) else {}, value]
119
- )
120
- else:
121
- result[key] = value
122
- return result
123
103
 
104
+ def __init__(self, parser):
105
+ """Initialize the column parser object"""
106
+ self.parser = parser
124
107
 
125
- def construct_json_column_children(json_column: Dict) -> List[Dict]:
126
- """Construt a dict representation of a Column object
108
+ @classmethod
109
+ def create(
110
+ cls,
111
+ data_frame: "DataFrame",
112
+ file_type: Optional[SupportedTypes] = None,
113
+ sample: bool = True,
114
+ shuffle: bool = False,
115
+ ):
116
+ """Instantiate a column parser object with the appropriate parser
127
117
 
128
- Args:
129
- json_column: unique json structure of a column
130
- """
131
- children = []
132
- for key, value in json_column.items():
133
- column = {}
134
- type_ = type(value).__name__.lower()
135
- column["dataTypeDisplay"] = DATALAKE_DATA_TYPES.get(
136
- type_, DataType.UNKNOWN
137
- ).value
138
- column["dataType"] = DATALAKE_DATA_TYPES.get(type_, DataType.UNKNOWN).value
139
- column["name"] = truncate_column_name(key)
140
- column["displayName"] = key
141
- if isinstance(value, dict):
142
- column["children"] = construct_json_column_children(value)
143
- children.append(column)
144
-
145
- return children
146
-
147
-
148
- def get_children(json_column) -> List[Dict]:
149
- """Get children of json column.
150
-
151
- Args:
152
- json_column (pandas.Series): column with 100 sample rows.
153
- Sample rows will be used to infer children.
154
- """
155
- from pandas import Series # pylint: disable=import-outside-toplevel
118
+ Args:
119
+ data_frame: the dataframe object
120
+ file_type: the file type of the dataframe. Will be used to determine the appropriate parser.
121
+ sample: whether to sample the dataframe or not if we have a list of dataframes.
122
+ If sample is False, we will concatenate the dataframes, which can be cause OOM error for large dataset.
123
+ (default: True)
124
+ shuffle: whether to shuffle the dataframe list or not if sample is True. (default: False)
125
+ """
126
+ data_frame = cls._get_data_frame(data_frame, sample, shuffle)
127
+ if file_type == SupportedTypes.PARQUET:
128
+ parser = ParquetDataFrameColumnParser(data_frame)
129
+ return cls(parser)
130
+ parser = GenericDataFrameColumnParser(data_frame)
131
+ return cls(parser)
156
132
 
157
- json_column = cast(Series, json_column)
158
- try:
159
- json_column = json_column.apply(json.loads)
160
- except TypeError:
161
- # if values are not strings, we will assume they are already json objects
162
- # based on the read class logic
163
- pass
164
- json_structure = unique_json_structure(json_column.values.tolist())
133
+ @staticmethod
134
+ def _get_data_frame(
135
+ data_frame: Union[List["DataFrame"], "DataFrame"], sample: bool, shuffle: bool
136
+ ):
137
+ """Return the dataframe to use for parsing"""
138
+ import pandas as pd
165
139
 
166
- return construct_json_column_children(json_structure)
140
+ if not isinstance(data_frame, list):
141
+ return data_frame
167
142
 
143
+ if sample:
144
+ if shuffle:
145
+ random.shuffle(data_frame)
146
+ return data_frame[0]
168
147
 
169
- def get_columns(data_frame: "DataFrame"):
170
- """
171
- method to process column details
148
+ return pd.concat(data_frame)
149
+
150
+ def get_columns(self):
151
+ """Get the columns from the parser"""
152
+ return self.parser.get_columns()
153
+
154
+
155
+ class GenericDataFrameColumnParser:
156
+ """Given a dataframe object, parse the columns and return a list of Column objects.
157
+
158
+ # TODO: We should consider making the function above part of the `GenericDataFrameColumnParser` class
159
+ # though we need to do a thorough overview of where they are used to ensure unnecessary coupling.
172
160
  """
173
- cols = []
174
- if hasattr(data_frame, "columns"):
175
- df_columns = list(data_frame.columns)
176
- for column in df_columns:
177
- # use String by default
178
- data_type = DataType.STRING
179
- try:
180
- if hasattr(data_frame[column], "dtypes"):
181
- data_type = fetch_col_types(data_frame, column_name=column)
182
-
183
- parsed_string = {
184
- "dataTypeDisplay": data_type.value,
185
- "dataType": data_type,
186
- "name": truncate_column_name(column),
187
- "displayName": column,
188
- }
189
- if data_type == DataType.ARRAY:
190
- parsed_string["arrayDataType"] = DataType.UNKNOWN
191
-
192
- if data_type == DataType.JSON:
193
- parsed_string["children"] = get_children(
194
- data_frame[column].dropna()[:100]
161
+
162
+ _data_formats = {
163
+ **dict.fromkeys(["int64", "int", "int32"], DataType.INT),
164
+ "dict": DataType.JSON,
165
+ "list": DataType.ARRAY,
166
+ **dict.fromkeys(["float64", "float32", "float"], DataType.FLOAT),
167
+ "bool": DataType.BOOLEAN,
168
+ **dict.fromkeys(
169
+ ["datetime64", "timedelta[ns]", "datetime64[ns]"], DataType.DATETIME
170
+ ),
171
+ "str": DataType.STRING,
172
+ "bytes": DataType.BYTES,
173
+ }
174
+
175
+ def __init__(self, data_frame: "DataFrame"):
176
+ self.data_frame = data_frame
177
+
178
+ def get_columns(self):
179
+ """
180
+ method to process column details
181
+ """
182
+ return self._get_columns(self.data_frame)
183
+
184
+ @classmethod
185
+ def _get_columns(cls, data_frame: "DataFrame"):
186
+ """
187
+ method to process column details.
188
+
189
+ Note this was move from a function to a class method to bring it closer to the
190
+ `GenericDataFrameColumnParser` class. Should be rethought as part of the TODO.
191
+ """
192
+ cols = []
193
+ if hasattr(data_frame, "columns"):
194
+ df_columns = list(data_frame.columns)
195
+ for column in df_columns:
196
+ # use String by default
197
+ data_type = DataType.STRING
198
+ try:
199
+ if hasattr(data_frame[column], "dtypes"):
200
+ data_type = cls.fetch_col_types(data_frame, column_name=column)
201
+
202
+ parsed_string = {
203
+ "dataTypeDisplay": data_type.value,
204
+ "dataType": data_type,
205
+ "name": truncate_column_name(column),
206
+ "displayName": column,
207
+ }
208
+ if data_type == DataType.ARRAY:
209
+ parsed_string["arrayDataType"] = DataType.UNKNOWN
210
+
211
+ if data_type == DataType.JSON:
212
+ parsed_string["children"] = cls.get_children(
213
+ data_frame[column].dropna()[:100]
214
+ )
215
+
216
+ cols.append(Column(**parsed_string))
217
+ except Exception as exc:
218
+ logger.debug(traceback.format_exc())
219
+ logger.warning(
220
+ f"Unexpected exception parsing column [{column}]: {exc}"
195
221
  )
222
+ return cols
196
223
 
197
- cols.append(Column(**parsed_string))
198
- except Exception as exc:
199
- logger.debug(traceback.format_exc())
200
- logger.warning(f"Unexpected exception parsing column [{column}]: {exc}")
201
- return cols
224
+ @classmethod
225
+ def fetch_col_types(cls, data_frame, column_name):
226
+ """fetch_col_types: Fetch Column Type for the c
202
227
 
228
+ Note this was move from a function to a class method to bring it closer to the
229
+ `GenericDataFrameColumnParser` class. Should be rethought as part of the TODO.
203
230
 
204
- def fetch_col_types(data_frame, column_name):
205
- """fetch_col_types: Fetch Column Type for the c
231
+ Args:
232
+ data_frame (DataFrame)
233
+ column_name (string)
234
+ """
235
+ data_type = None
236
+ try:
237
+ if data_frame[column_name].dtypes.name == "object" and any(
238
+ data_frame[column_name].dropna().values
239
+ ):
240
+ try:
241
+ # Safely evaluate the input string
242
+ df_row_val = data_frame[column_name].dropna().values[0]
243
+ parsed_object = ast.literal_eval(str(df_row_val))
244
+ # Determine the data type of the parsed object
245
+ data_type = type(parsed_object).__name__.lower()
246
+ except (ValueError, SyntaxError):
247
+ # Handle any exceptions that may occur
248
+ data_type = "string"
206
249
 
207
- Args:
208
- data_frame (DataFrame)
209
- column_name (string)
210
- """
211
- data_type = None
212
- try:
213
- if data_frame[column_name].dtypes.name == "object" and any(
214
- data_frame[column_name].dropna().values
250
+ data_type = cls._data_formats.get(
251
+ data_type or data_frame[column_name].dtypes.name,
252
+ )
253
+ if not data_type:
254
+ logger.debug(
255
+ f"unknown data type {data_frame[column_name].dtypes.name}. resolving to string."
256
+ )
257
+ data_type = data_type or DataType.STRING
258
+ except Exception as err:
259
+ logger.warning(
260
+ f"Failed to distinguish data type for column {column_name}, Falling back to {data_type}, exc: {err}"
261
+ )
262
+ logger.debug(traceback.format_exc())
263
+ return data_type
264
+
265
+ @classmethod
266
+ def unique_json_structure(cls, dicts: List[Dict]) -> Dict:
267
+ """Given a sample of `n` json objects, return a json object that represents the unique
268
+ structure of all `n` objects. Note that the type of the key will be that of
269
+ the last object seen in the sample.
270
+
271
+ Args:
272
+ dicts: list of json objects
273
+ """
274
+ result = {}
275
+ for dict_ in dicts:
276
+ for key, value in dict_.items():
277
+ if isinstance(value, dict):
278
+ nested_json = result.get(key, {})
279
+ # `isinstance(nested_json, dict)` if for a key we first see a non dict value
280
+ # but then see a dict value later, we will consider the key to be a dict.
281
+ result[key] = cls.unique_json_structure(
282
+ [nested_json if isinstance(nested_json, dict) else {}, value]
283
+ )
284
+ else:
285
+ result[key] = value
286
+ return result
287
+
288
+ @classmethod
289
+ def construct_json_column_children(cls, json_column: Dict) -> List[Dict]:
290
+ """Construt a dict representation of a Column object
291
+
292
+ Args:
293
+ json_column: unique json structure of a column
294
+ """
295
+ children = []
296
+ for key, value in json_column.items():
297
+ column = {}
298
+ type_ = type(value).__name__.lower()
299
+ column["dataTypeDisplay"] = cls._data_formats.get(
300
+ type_, DataType.UNKNOWN
301
+ ).value
302
+ column["dataType"] = cls._data_formats.get(type_, DataType.UNKNOWN).value
303
+ column["name"] = truncate_column_name(key)
304
+ column["displayName"] = key
305
+ if isinstance(value, dict):
306
+ column["children"] = cls.construct_json_column_children(value)
307
+ children.append(column)
308
+
309
+ return children
310
+
311
+ @classmethod
312
+ def get_children(cls, json_column) -> List[Dict]:
313
+ """Get children of json column.
314
+
315
+ Args:
316
+ json_column (pandas.Series): column with 100 sample rows.
317
+ Sample rows will be used to infer children.
318
+ """
319
+ from pandas import Series # pylint: disable=import-outside-toplevel
320
+
321
+ json_column = cast(Series, json_column)
322
+ try:
323
+ json_column = json_column.apply(json.loads)
324
+ except TypeError:
325
+ # if values are not strings, we will assume they are already json objects
326
+ # based on the read class logic
327
+ pass
328
+ json_structure = cls.unique_json_structure(json_column.values.tolist())
329
+
330
+ return cls.construct_json_column_children(json_structure)
331
+
332
+
333
+ # pylint: disable=import-outside-toplevel
334
+ class ParquetDataFrameColumnParser:
335
+ """Given a dataframe object generated from a parquet file, parse the columns and return a list of Column objects."""
336
+
337
+ def __init__(self, data_frame: "DataFrame"):
338
+ import pyarrow as pa
339
+
340
+ self._data_formats = {
341
+ **dict.fromkeys(
342
+ ["int8", "int16", "int32", "int64", "int", pa.DurationType],
343
+ DataType.INT,
344
+ ),
345
+ **dict.fromkeys(
346
+ ["uint8", "uint16", "uint32", "uint64", "uint"], DataType.UINT
347
+ ),
348
+ pa.StructType: DataType.STRUCT,
349
+ **dict.fromkeys([pa.ListType, pa.LargeListType], DataType.ARRAY),
350
+ **dict.fromkeys(
351
+ ["halffloat", "float32", "float64", "double", "float"], DataType.FLOAT
352
+ ),
353
+ "bool": DataType.BOOLEAN,
354
+ **dict.fromkeys(
355
+ [
356
+ "datetime64",
357
+ "timedelta[ns]",
358
+ "datetime64[ns]",
359
+ "time32[s]",
360
+ "time32[ms]",
361
+ "time64[ns]",
362
+ "time64[us]",
363
+ pa.TimestampType,
364
+ "date64",
365
+ ],
366
+ DataType.DATETIME,
367
+ ),
368
+ "date32[day]": DataType.DATE,
369
+ "string": DataType.STRING,
370
+ **dict.fromkeys(
371
+ ["binary", "large_binary", pa.FixedSizeBinaryType], DataType.BINARY
372
+ ),
373
+ **dict.fromkeys([pa.Decimal128Type, pa.Decimal256Type], DataType.DECIMAL),
374
+ }
375
+
376
+ self.data_frame = data_frame
377
+ self._arrow_table = pa.Table.from_pandas(self.data_frame)
378
+
379
+ def get_columns(self):
380
+ """
381
+ method to process column details for parquet files
382
+ """
383
+ import pyarrow as pa
384
+
385
+ schema: List[pa.Field] = self._arrow_table.schema
386
+ columns = []
387
+ for column in schema:
388
+ parsed_column = {
389
+ "dataTypeDisplay": str(column.type),
390
+ "dataType": self._get_pq_data_type(column),
391
+ "name": truncate_column_name(column.name),
392
+ "displayName": column.name,
393
+ }
394
+
395
+ if parsed_column["dataType"] == DataType.ARRAY:
396
+ try:
397
+ item_field = column.type.value_field
398
+ parsed_column["arrayDataType"] = self._get_pq_data_type(item_field)
399
+ except AttributeError:
400
+ # if the value field is not specified, we will set it to UNKNOWN
401
+ parsed_column["arrayDataType"] = DataType.UNKNOWN
402
+
403
+ if parsed_column["dataType"] == DataType.BINARY:
404
+ try:
405
+ data_length = type(column.type).byte_width
406
+ except AttributeError:
407
+ # if the byte width is not specified, we will set it to -1
408
+ # following pyarrow convention
409
+ data_length = -1
410
+ parsed_column["dataLength"] = data_length
411
+
412
+ if parsed_column["dataType"] == DataType.STRUCT:
413
+ parsed_column["children"] = self._get_children(column)
414
+ columns.append(Column(**parsed_column))
415
+
416
+ return columns
417
+
418
+ def _get_children(self, column):
419
+ """For struct types, get the children of the column
420
+
421
+ Args:
422
+ column (pa.Field): pa column
423
+ """
424
+ field_idx = column.type.num_fields
425
+
426
+ children = []
427
+ for idx in range(field_idx):
428
+ child = column.type.field(idx)
429
+ data_type = self._get_pq_data_type(child)
430
+
431
+ child_column = {
432
+ "dataTypeDisplay": str(child.type),
433
+ "dataType": data_type,
434
+ "name": truncate_column_name(child.name),
435
+ "displayName": child.name,
436
+ }
437
+ if data_type == DataType.STRUCT:
438
+ child_column["children"] = self._get_children(child)
439
+ children.append(child_column)
440
+
441
+ return children
442
+
443
+ def _get_pq_data_type(self, column):
444
+ """Given a column return the type of the column
445
+
446
+ Args:
447
+ column (pa.Field): pa column
448
+ """
449
+ import pyarrow as pa
450
+
451
+ if isinstance(
452
+ column.type,
453
+ (
454
+ pa.DurationType,
455
+ pa.StructType,
456
+ pa.ListType,
457
+ pa.LargeListType,
458
+ pa.TimestampType,
459
+ pa.Decimal128Type,
460
+ pa.Decimal256Type,
461
+ pa.FixedSizeBinaryType,
462
+ ),
215
463
  ):
216
- try:
217
- # Safely evaluate the input string
218
- df_row_val = data_frame[column_name].dropna().values[0]
219
- parsed_object = ast.literal_eval(str(df_row_val))
220
- # Determine the data type of the parsed object
221
- data_type = type(parsed_object).__name__.lower()
222
- except (ValueError, SyntaxError):
223
- # Handle any exceptions that may occur
224
- data_type = "string"
225
-
226
- data_type = DATALAKE_DATA_TYPES.get(
227
- data_type or data_frame[column_name].dtypes.name, DataType.STRING
228
- )
229
- except Exception as err:
230
- logger.warning(
231
- f"Failed to distinguish data type for column {column_name}, Falling back to {data_type}, exc: {err}"
232
- )
233
- logger.debug(traceback.format_exc())
234
- return data_type
464
+ # the above type can take many shape
465
+ # (i.e. pa.ListType(pa.StructType([pa.column("a", pa.int64())])), etc,)
466
+ # so we'll use their type to determine the data type
467
+ data_type = self._data_formats.get(type(column.type), DataType.UNKNOWN)
468
+ else:
469
+ # for the other types we need to use their string representation
470
+ # to determine the data type as `type(column.type)` will return
471
+ # a generic `pyarrow.lib.DataType`
472
+ data_type = self._data_formats.get(str(column.type), DataType.UNKNOWN)
473
+
474
+ return data_type
@@ -13,17 +13,23 @@ Handle Entity Link building and splitting logic.
13
13
  Filter information has been taken from the
14
14
  ES indexes definitions
15
15
  """
16
- from typing import List, Optional
16
+ from typing import Any, List, Optional, TypeVar
17
17
 
18
18
  from antlr4.CommonTokenStream import CommonTokenStream
19
19
  from antlr4.error.ErrorStrategy import BailErrorStrategy
20
20
  from antlr4.InputStream import InputStream
21
21
  from antlr4.tree.Tree import ParseTreeWalker
22
+ from pydantic import BaseModel
22
23
  from requests.compat import unquote_plus
23
24
 
24
25
  from metadata.antlr.split_listener import EntityLinkSplitListener
25
26
  from metadata.generated.antlr.EntityLinkLexer import EntityLinkLexer
26
27
  from metadata.generated.antlr.EntityLinkParser import EntityLinkParser
28
+ from metadata.generated.schema.entity.data.table import Table
29
+ from metadata.utils.constants import ENTITY_REFERENCE_TYPE_MAP
30
+ from metadata.utils.dispatch import class_register
31
+
32
+ T = TypeVar("T", bound=BaseModel)
27
33
 
28
34
 
29
35
  class EntityLinkBuildingException(Exception):
@@ -86,16 +92,30 @@ def get_table_or_column_fqn(entity_link: str) -> str:
86
92
  )
87
93
 
88
94
 
89
- def get_entity_link(table_fqn: str, column_name: Optional[str]) -> str:
95
+ get_entity_link_registry = class_register()
96
+
97
+
98
+ def get_entity_link(entity_type: Any, fqn: str, **kwargs) -> str:
90
99
  """From table fqn and column name get the entity_link
91
100
 
92
101
  Args:
93
- table_fqn: table fqn
94
- column_name: Optional param to generate entity link with column name
102
+ entity_type: Entity being built
103
+ fqn: Entity fqn
95
104
  """
96
105
 
106
+ func = get_entity_link_registry.registry.get(entity_type.__name__)
107
+ if not func:
108
+ return f"<#E::{ENTITY_REFERENCE_TYPE_MAP[entity_type.__name__]}::{fqn}>"
109
+
110
+ return func(fqn, **kwargs)
111
+
112
+
113
+ @get_entity_link_registry.add(Table)
114
+ def _(fqn: str, column_name: Optional[str] = None) -> str:
115
+ """From table fqn and column name get the entity_link"""
116
+
97
117
  if column_name:
98
- entity_link = f"<#E::table::" f"{table_fqn}" f"::columns::" f"{column_name}>"
118
+ entity_link = f"<#E::{ENTITY_REFERENCE_TYPE_MAP[Table.__name__]}::{fqn}::columns::{column_name}>"
99
119
  else:
100
- entity_link = f"<#E::table::" f"{table_fqn}>"
120
+ entity_link = f"<#E::{ENTITY_REFERENCE_TYPE_MAP[Table.__name__]}::{fqn}>"
101
121
  return entity_link