openmetadata-ingestion 1.9.0.0__py3-none-any.whl → 1.10.14.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1115) hide show
  1. airflow_provider_openmetadata/lineage/backend.py +4 -2
  2. airflow_provider_openmetadata/lineage/config/loader.py +8 -1
  3. metadata/cli/common.py +0 -1
  4. metadata/clients/aws_client.py +4 -0
  5. metadata/data_quality/interface/test_suite_interface.py +9 -3
  6. metadata/data_quality/validations/models.py +11 -1
  7. metadata/data_quality/validations/runtime_param_setter/base_diff_params_setter.py +39 -13
  8. metadata/data_quality/validations/runtime_param_setter/param_setter_factory.py +9 -0
  9. metadata/data_quality/validations/runtime_param_setter/table_custom_sql_query_params_setter.py +31 -0
  10. metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +20 -13
  11. metadata/data_quality/validations/table/base/tableCustomSQLQuery.py +132 -3
  12. metadata/data_quality/validations/table/pandas/tableCustomSQLQuery.py +38 -0
  13. metadata/data_quality/validations/table/sqlalchemy/tableCustomSQLQuery.py +320 -0
  14. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +4 -0
  15. metadata/examples/workflows/airbyte.yaml +8 -2
  16. metadata/examples/workflows/bigquery.yaml +1 -0
  17. metadata/examples/workflows/confluent_cdc.yaml +70 -0
  18. metadata/examples/workflows/confluent_cdc_cloud.yaml +86 -0
  19. metadata/examples/workflows/confluent_cdc_local.yaml +120 -0
  20. metadata/examples/workflows/databricks.yaml +9 -1
  21. metadata/examples/workflows/databricks_usage.yaml +7 -1
  22. metadata/examples/workflows/exasol.yaml +25 -0
  23. metadata/examples/workflows/grafana.yaml +115 -0
  24. metadata/examples/workflows/kinesisfirehose.yaml +99 -0
  25. metadata/examples/workflows/metabase.yaml +1 -0
  26. metadata/examples/workflows/my_confluent_cloud.yaml +49 -0
  27. metadata/examples/workflows/unity_catalog.yaml +7 -1
  28. metadata/examples/workflows/unity_catalog_usage.yaml +7 -1
  29. metadata/generated/antlr/EntityLinkLexer.py +419 -353
  30. metadata/generated/schema/analytics/__init__.py +1 -1
  31. metadata/generated/schema/analytics/basic.py +1 -1
  32. metadata/generated/schema/analytics/reportData.py +1 -1
  33. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  34. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  35. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  36. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  37. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  38. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  39. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  40. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  41. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  42. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  43. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  44. metadata/generated/schema/api/__init__.py +1 -1
  45. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  46. metadata/generated/schema/api/addTagToAssetsRequest.py +1 -1
  47. metadata/generated/schema/api/analytics/__init__.py +1 -1
  48. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  49. metadata/generated/schema/api/automations/__init__.py +1 -1
  50. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  51. metadata/generated/schema/api/bulkAssets.py +1 -1
  52. metadata/generated/schema/api/classification/__init__.py +1 -1
  53. metadata/generated/schema/api/classification/createClassification.py +52 -1
  54. metadata/generated/schema/api/classification/createTag.py +29 -2
  55. metadata/generated/schema/api/classification/createTagWithRecognizers.py +67 -0
  56. metadata/generated/schema/api/classification/loadTags.py +1 -1
  57. metadata/generated/schema/api/configuration/__init__.py +3 -0
  58. metadata/generated/schema/api/configuration/rdfConfiguration.py +47 -0
  59. metadata/generated/schema/api/createBot.py +1 -1
  60. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  61. metadata/generated/schema/api/createType.py +1 -1
  62. metadata/generated/schema/api/data/__init__.py +1 -1
  63. metadata/generated/schema/api/data/createAPICollection.py +1 -1
  64. metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
  65. metadata/generated/schema/api/data/createChart.py +1 -1
  66. metadata/generated/schema/api/data/createContainer.py +1 -1
  67. metadata/generated/schema/api/data/createCustomProperty.py +1 -1
  68. metadata/generated/schema/api/data/createDashboard.py +1 -1
  69. metadata/generated/schema/api/data/createDashboardDataModel.py +5 -1
  70. metadata/generated/schema/api/data/createDataContract.py +33 -3
  71. metadata/generated/schema/api/data/createDatabase.py +1 -1
  72. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  73. metadata/generated/schema/api/data/createDirectory.py +1 -1
  74. metadata/generated/schema/api/data/createEntityProfile.py +36 -0
  75. metadata/generated/schema/api/data/createFile.py +1 -1
  76. metadata/generated/schema/api/data/createGlossary.py +1 -1
  77. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  78. metadata/generated/schema/api/data/createMetric.py +12 -1
  79. metadata/generated/schema/api/data/createMlModel.py +1 -1
  80. metadata/generated/schema/api/data/createPipeline.py +1 -1
  81. metadata/generated/schema/api/data/createQuery.py +1 -1
  82. metadata/generated/schema/api/data/createQueryCostRecord.py +1 -1
  83. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  84. metadata/generated/schema/api/data/createSpreadsheet.py +9 -1
  85. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  86. metadata/generated/schema/api/data/createTable.py +1 -1
  87. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  88. metadata/generated/schema/api/data/createTopic.py +1 -1
  89. metadata/generated/schema/api/data/createWorksheet.py +1 -1
  90. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  91. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  92. metadata/generated/schema/api/data/updateColumn.py +1 -1
  93. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  94. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  95. metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
  96. metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
  97. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  98. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  99. metadata/generated/schema/api/docStore/__init__.py +1 -1
  100. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  101. metadata/generated/schema/api/domains/__init__.py +1 -1
  102. metadata/generated/schema/api/domains/createDataProduct.py +7 -1
  103. metadata/generated/schema/api/domains/createDomain.py +1 -1
  104. metadata/generated/schema/api/entityRelationship/__init__.py +1 -1
  105. metadata/generated/schema/api/entityRelationship/entityRelationshipDirection.py +1 -1
  106. metadata/generated/schema/api/entityRelationship/esEntityRelationshipData.py +1 -1
  107. metadata/generated/schema/api/entityRelationship/relationshipRef.py +1 -1
  108. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipRequest.py +1 -1
  109. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipResult.py +1 -1
  110. metadata/generated/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.py +1 -1
  111. metadata/generated/schema/api/events/__init__.py +3 -0
  112. metadata/generated/schema/api/events/createNotificationTemplate.py +61 -0
  113. metadata/generated/schema/api/events/notificationTemplateValidationRequest.py +30 -0
  114. metadata/generated/schema/api/events/notificationTemplateValidationResponse.py +36 -0
  115. metadata/generated/schema/api/feed/__init__.py +1 -1
  116. metadata/generated/schema/api/feed/closeTask.py +1 -1
  117. metadata/generated/schema/api/feed/createPost.py +1 -1
  118. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  119. metadata/generated/schema/api/feed/createThread.py +1 -1
  120. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  121. metadata/generated/schema/api/feed/threadCount.py +1 -1
  122. metadata/generated/schema/api/governance/__init__.py +1 -1
  123. metadata/generated/schema/api/governance/createWorkflowDefinition.py +20 -5
  124. metadata/generated/schema/api/governance/createWorkflowInstanceState.py +1 -1
  125. metadata/generated/schema/api/lineage/__init__.py +1 -1
  126. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  127. metadata/generated/schema/api/lineage/entityCountLineageRequest.py +66 -0
  128. metadata/generated/schema/api/lineage/esLineageData.py +1 -1
  129. metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
  130. metadata/generated/schema/api/lineage/lineagePaginationInfo.py +57 -0
  131. metadata/generated/schema/api/lineage/nodeInformation.py +10 -2
  132. metadata/generated/schema/api/lineage/searchLineageRequest.py +1 -1
  133. metadata/generated/schema/api/lineage/searchLineageResult.py +1 -1
  134. metadata/generated/schema/api/mcp/__init__.py +1 -1
  135. metadata/generated/schema/api/mcp/mcpSearchResponse.py +118 -0
  136. metadata/generated/schema/api/mcp/mcpToolDefinition.py +1 -1
  137. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  138. metadata/generated/schema/api/policies/__init__.py +1 -1
  139. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  140. metadata/generated/schema/api/rdf/__init__.py +3 -0
  141. metadata/generated/schema/api/rdf/sparqlQuery.py +57 -0
  142. metadata/generated/schema/api/rdf/sparqlResponse.py +56 -0
  143. metadata/generated/schema/api/scim/__init__.py +1 -1
  144. metadata/generated/schema/api/scim/scimGroup.py +1 -1
  145. metadata/generated/schema/api/scim/scimPatchOp.py +1 -1
  146. metadata/generated/schema/api/scim/scimUser.py +1 -1
  147. metadata/generated/schema/api/search/__init__.py +1 -1
  148. metadata/generated/schema/api/search/previewSearchRequest.py +1 -1
  149. metadata/generated/schema/api/services/__init__.py +1 -1
  150. metadata/generated/schema/api/services/createApiService.py +1 -1
  151. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  152. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  153. metadata/generated/schema/api/services/createDriveService.py +9 -2
  154. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  155. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  156. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  157. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  158. metadata/generated/schema/api/services/createSearchService.py +1 -1
  159. metadata/generated/schema/api/services/createSecurityService.py +1 -1
  160. metadata/generated/schema/api/services/createStorageService.py +1 -1
  161. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  162. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +8 -1
  163. metadata/generated/schema/api/setOwner.py +1 -1
  164. metadata/generated/schema/api/teams/__init__.py +1 -1
  165. metadata/generated/schema/api/teams/createPersona.py +1 -1
  166. metadata/generated/schema/api/teams/createRole.py +1 -1
  167. metadata/generated/schema/api/teams/createTeam.py +1 -1
  168. metadata/generated/schema/api/teams/createUser.py +1 -1
  169. metadata/generated/schema/api/tests/__init__.py +1 -1
  170. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  171. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  172. metadata/generated/schema/api/tests/createTestCase.py +5 -1
  173. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  174. metadata/generated/schema/api/tests/createTestCaseResult.py +1 -1
  175. metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
  176. metadata/generated/schema/api/tests/createTestSuite.py +5 -1
  177. metadata/generated/schema/api/tests/moveGlossaryTermRequest.py +1 -1
  178. metadata/generated/schema/api/validateGlossaryTagsRequest.py +1 -1
  179. metadata/generated/schema/api/voteRequest.py +1 -1
  180. metadata/generated/schema/auth/__init__.py +1 -1
  181. metadata/generated/schema/auth/basicAuth.py +1 -1
  182. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  183. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  184. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  185. metadata/generated/schema/auth/emailRequest.py +1 -1
  186. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  187. metadata/generated/schema/auth/generateToken.py +1 -1
  188. metadata/generated/schema/auth/jwtAuth.py +1 -1
  189. metadata/generated/schema/auth/loginRequest.py +1 -1
  190. metadata/generated/schema/auth/logoutRequest.py +1 -1
  191. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  192. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  193. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  194. metadata/generated/schema/auth/refreshToken.py +1 -1
  195. metadata/generated/schema/auth/registrationRequest.py +1 -1
  196. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  197. metadata/generated/schema/auth/revokeToken.py +1 -1
  198. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  199. metadata/generated/schema/auth/ssoAuth.py +1 -1
  200. metadata/generated/schema/auth/supportToken.py +1 -1
  201. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  202. metadata/generated/schema/configuration/__init__.py +1 -1
  203. metadata/generated/schema/configuration/aiPlatformConfiguration.py +1 -1
  204. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  205. metadata/generated/schema/configuration/assetCertificationSettings.py +1 -1
  206. metadata/generated/schema/configuration/authConfig.py +1 -1
  207. metadata/generated/schema/configuration/authenticationConfiguration.py +49 -13
  208. metadata/generated/schema/configuration/authorizerConfiguration.py +39 -10
  209. metadata/generated/schema/configuration/cacheConfiguration.py +1 -1
  210. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  211. metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
  212. metadata/generated/schema/configuration/elasticSearchConfiguration.py +19 -1
  213. metadata/generated/schema/configuration/entityRulesSettings.py +1 -1
  214. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  215. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  216. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  217. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  218. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  219. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  220. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  221. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  222. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  223. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  224. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  225. metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
  226. metadata/generated/schema/configuration/lineageSettings.py +9 -1
  227. metadata/generated/schema/configuration/logStorageConfiguration.py +105 -0
  228. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  229. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  230. metadata/generated/schema/configuration/openMetadataBaseUrlConfiguration.py +1 -1
  231. metadata/generated/schema/configuration/opertionalConfiguration.py +1 -1
  232. metadata/generated/schema/configuration/opsConfig.py +1 -1
  233. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +9 -2
  234. metadata/generated/schema/configuration/profilerConfiguration.py +2 -1
  235. metadata/generated/schema/configuration/searchSettings.py +7 -2
  236. metadata/generated/schema/configuration/securityConfiguration.py +26 -0
  237. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  238. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  239. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  240. metadata/generated/schema/configuration/themeConfiguration.py +1 -1
  241. metadata/generated/schema/configuration/uiThemePreference.py +1 -1
  242. metadata/generated/schema/configuration/workflowSettings.py +15 -1
  243. metadata/generated/schema/dataInsight/__init__.py +1 -1
  244. metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
  245. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
  246. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
  247. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
  248. metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
  249. metadata/generated/schema/dataInsight/custom/lineChart.py +1 -1
  250. metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
  251. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  252. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  253. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  254. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  255. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  256. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  257. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  258. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  259. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  260. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  261. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  262. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  263. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  264. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  265. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  266. metadata/generated/schema/email/__init__.py +1 -1
  267. metadata/generated/schema/email/emailRequest.py +1 -1
  268. metadata/generated/schema/email/emailTemplate.py +1 -1
  269. metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
  270. metadata/generated/schema/email/smtpSettings.py +1 -1
  271. metadata/generated/schema/email/templateValidationReponse.py +1 -1
  272. metadata/generated/schema/entity/__init__.py +1 -1
  273. metadata/generated/schema/entity/applications/__init__.py +1 -1
  274. metadata/generated/schema/entity/applications/app.py +15 -1
  275. metadata/generated/schema/entity/applications/appExtension.py +1 -1
  276. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  277. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  278. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
  279. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  280. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  281. metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +1 -1
  282. metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.py +1 -1
  283. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
  284. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
  285. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
  286. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +7 -2
  287. metadata/generated/schema/entity/applications/configuration/external/automator/addTermsAction.py +48 -0
  288. metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.py +1 -1
  289. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
  290. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
  291. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
  292. metadata/generated/schema/entity/applications/configuration/external/automator/propagationStopConfig.py +1 -1
  293. metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +1 -1
  294. metadata/generated/schema/entity/applications/configuration/external/automator/removeDataProductAction.py +1 -1
  295. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
  296. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
  297. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
  298. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +6 -2
  299. metadata/generated/schema/entity/applications/configuration/external/automator/removeTermsAction.py +59 -0
  300. metadata/generated/schema/entity/applications/configuration/external/automator/removeTestCaseAction.py +1 -1
  301. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
  302. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +7 -1
  303. metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
  304. metadata/generated/schema/entity/applications/configuration/external/metadataExporterAppConfig.py +103 -0
  305. metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/__init__.py +3 -0
  306. metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/bigQueryConnection.py +90 -0
  307. metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/databricksConnection.py +101 -0
  308. metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/redshiftConnection.py +76 -0
  309. metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/snowflakeConnection.py +115 -0
  310. metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +1 -1
  311. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  312. metadata/generated/schema/entity/applications/configuration/internal/autoPilotAppConfig.py +1 -1
  313. metadata/generated/schema/entity/applications/configuration/internal/collateAIQualityAgentAppConfig.py +1 -1
  314. metadata/generated/schema/entity/applications/configuration/internal/collateAITierAgentAppConfig.py +1 -1
  315. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  316. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  317. metadata/generated/schema/entity/applications/configuration/internal/dataRetentionConfiguration.py +15 -1
  318. metadata/generated/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.py +1 -1
  319. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
  320. metadata/generated/schema/entity/applications/configuration/private/__init__.py +1 -1
  321. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  322. metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
  323. metadata/generated/schema/entity/applications/configuration/private/internal/__init__.py +1 -1
  324. metadata/generated/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.py +1 -1
  325. metadata/generated/schema/entity/applications/configuration/private/limits.py +1 -1
  326. metadata/generated/schema/entity/applications/createAppRequest.py +9 -2
  327. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  328. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  329. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  330. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +8 -1
  331. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +8 -1
  332. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  333. metadata/generated/schema/entity/automations/__init__.py +1 -1
  334. metadata/generated/schema/entity/automations/queryRunnerRequest.py +46 -0
  335. metadata/generated/schema/entity/automations/response/__init__.py +3 -0
  336. metadata/generated/schema/entity/automations/response/queryRunnerResponse.py +51 -0
  337. metadata/generated/schema/entity/automations/testServiceConnection.py +3 -1
  338. metadata/generated/schema/entity/automations/testSparkEngineConnection.py +31 -0
  339. metadata/generated/schema/entity/automations/workflow.py +8 -2
  340. metadata/generated/schema/entity/bot.py +1 -1
  341. metadata/generated/schema/entity/classification/__init__.py +1 -1
  342. metadata/generated/schema/entity/classification/classification.py +57 -2
  343. metadata/generated/schema/entity/classification/tag.py +41 -3
  344. metadata/generated/schema/entity/data/__init__.py +1 -1
  345. metadata/generated/schema/entity/data/apiCollection.py +8 -1
  346. metadata/generated/schema/entity/data/apiEndpoint.py +8 -1
  347. metadata/generated/schema/entity/data/chart.py +12 -1
  348. metadata/generated/schema/entity/data/container.py +7 -1
  349. metadata/generated/schema/entity/data/dashboard.py +6 -1
  350. metadata/generated/schema/entity/data/dashboardDataModel.py +13 -1
  351. metadata/generated/schema/entity/data/dataContract.py +238 -2
  352. metadata/generated/schema/entity/data/database.py +6 -1
  353. metadata/generated/schema/entity/data/databaseSchema.py +8 -1
  354. metadata/generated/schema/entity/data/directory.py +6 -1
  355. metadata/generated/schema/entity/data/file.py +6 -1
  356. metadata/generated/schema/entity/data/glossary.py +6 -1
  357. metadata/generated/schema/entity/data/glossaryTerm.py +8 -12
  358. metadata/generated/schema/entity/data/metric.py +18 -1
  359. metadata/generated/schema/entity/data/mlmodel.py +6 -1
  360. metadata/generated/schema/entity/data/pipeline.py +136 -2
  361. metadata/generated/schema/entity/data/query.py +6 -1
  362. metadata/generated/schema/entity/data/queryCostRecord.py +1 -1
  363. metadata/generated/schema/entity/data/queryCostSearchResult.py +1 -1
  364. metadata/generated/schema/entity/data/report.py +6 -1
  365. metadata/generated/schema/entity/data/searchIndex.py +8 -1
  366. metadata/generated/schema/entity/data/spreadsheet.py +10 -4
  367. metadata/generated/schema/entity/data/storedProcedure.py +9 -1
  368. metadata/generated/schema/entity/data/table.py +102 -1
  369. metadata/generated/schema/entity/data/topic.py +6 -1
  370. metadata/generated/schema/entity/data/worksheet.py +6 -1
  371. metadata/generated/schema/entity/datacontract/__init__.py +1 -1
  372. metadata/generated/schema/entity/datacontract/dataContractResult.py +1 -1
  373. metadata/generated/schema/entity/datacontract/qualityValidation.py +1 -1
  374. metadata/generated/schema/entity/datacontract/schemaValidation.py +1 -1
  375. metadata/generated/schema/entity/datacontract/semanticsValidation.py +1 -1
  376. metadata/generated/schema/entity/datacontract/slaValidation.py +1 -1
  377. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  378. metadata/generated/schema/entity/docStore/document.py +1 -1
  379. metadata/generated/schema/entity/domains/__init__.py +1 -1
  380. metadata/generated/schema/entity/domains/dataProduct.py +155 -2
  381. metadata/generated/schema/entity/domains/domain.py +1 -1
  382. metadata/generated/schema/entity/events/__init__.py +1 -1
  383. metadata/generated/schema/entity/events/notificationTemplate.py +111 -0
  384. metadata/generated/schema/entity/events/webhook.py +1 -1
  385. metadata/generated/schema/entity/feed/__init__.py +1 -1
  386. metadata/generated/schema/entity/feed/assets.py +1 -1
  387. metadata/generated/schema/entity/feed/customProperty.py +1 -1
  388. metadata/generated/schema/entity/feed/description.py +1 -1
  389. metadata/generated/schema/entity/feed/domain.py +1 -1
  390. metadata/generated/schema/entity/feed/entityInfo.py +1 -1
  391. metadata/generated/schema/entity/feed/owner.py +1 -1
  392. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  393. metadata/generated/schema/entity/feed/tag.py +1 -1
  394. metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
  395. metadata/generated/schema/entity/feed/thread.py +1 -1
  396. metadata/generated/schema/entity/policies/__init__.py +1 -1
  397. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  398. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  399. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  400. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  401. metadata/generated/schema/entity/policies/filters.py +1 -1
  402. metadata/generated/schema/entity/policies/policy.py +1 -1
  403. metadata/generated/schema/entity/services/__init__.py +1 -1
  404. metadata/generated/schema/entity/services/apiService.py +1 -1
  405. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  406. metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
  407. metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
  408. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  409. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  410. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  411. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  412. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  413. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  414. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +2 -2
  415. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  416. metadata/generated/schema/entity/services/connections/dashboard/grafanaConnection.py +77 -0
  417. metadata/generated/schema/entity/services/connections/dashboard/hexConnection.py +76 -0
  418. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  419. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +13 -2
  420. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +17 -4
  421. metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
  422. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  423. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +9 -1
  424. metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
  425. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  426. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
  427. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
  428. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
  429. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
  430. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
  431. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  432. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  433. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  434. metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +1 -1
  435. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  436. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  437. metadata/generated/schema/entity/services/connections/dashboard/thoughtSpotConnection.py +1 -1
  438. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  439. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  440. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  441. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +9 -1
  442. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
  443. metadata/generated/schema/entity/services/connections/database/cassandra/__init__.py +1 -1
  444. metadata/generated/schema/entity/services/connections/database/cassandra/cloudConfig.py +1 -1
  445. metadata/generated/schema/entity/services/connections/database/cassandraConnection.py +1 -1
  446. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  447. metadata/generated/schema/entity/services/connections/database/cockroachConnection.py +1 -1
  448. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  449. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
  450. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  451. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  452. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  453. metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +1 -1
  454. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  455. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +2 -2
  456. metadata/generated/schema/entity/services/connections/database/databricks/__init__.py +3 -0
  457. metadata/generated/schema/entity/services/connections/database/databricks/azureAdSetup.py +37 -0
  458. metadata/generated/schema/entity/services/connections/database/databricks/databricksOAuth.py +30 -0
  459. metadata/generated/schema/entity/services/connections/database/databricks/personalAccessToken.py +23 -0
  460. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +14 -6
  461. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  462. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  463. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  464. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  465. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  466. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  467. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  468. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
  469. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
  470. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
  471. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  472. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  473. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  474. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  475. metadata/generated/schema/entity/services/connections/database/epicConnection.py +1 -1
  476. metadata/generated/schema/entity/services/connections/database/exasolConnection.py +4 -1
  477. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  478. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  479. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +16 -1
  480. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  481. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  482. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  483. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  484. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  485. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  486. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  487. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  488. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  489. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  490. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  491. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +26 -1
  492. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  493. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  494. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  495. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  496. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  497. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  498. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +25 -6
  499. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
  500. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  501. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
  502. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
  503. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  504. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  505. metadata/generated/schema/entity/services/connections/database/serviceNowConnection.py +90 -0
  506. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  507. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +10 -2
  508. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  509. metadata/generated/schema/entity/services/connections/database/ssasConnection.py +1 -1
  510. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
  511. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
  512. metadata/generated/schema/entity/services/connections/database/timescaleConnection.py +162 -0
  513. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  514. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +14 -6
  515. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  516. metadata/generated/schema/entity/services/connections/drive/__init__.py +1 -1
  517. metadata/generated/schema/entity/services/connections/drive/customDriveConnection.py +35 -2
  518. metadata/generated/schema/entity/services/connections/drive/googleDriveConnection.py +34 -1
  519. metadata/generated/schema/entity/services/connections/drive/sharePointConnection.py +34 -1
  520. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  521. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +2 -2
  522. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  523. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  524. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  525. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  526. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  527. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  528. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  529. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
  530. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  531. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  532. metadata/generated/schema/entity/services/connections/metadata/collibraConnection.py +73 -0
  533. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  534. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  535. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  536. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +2 -2
  537. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  538. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  539. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  540. metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
  541. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  542. metadata/generated/schema/entity/services/connections/pipeline/airbyte/__init__.py +3 -0
  543. metadata/generated/schema/entity/services/connections/pipeline/airbyte/basicAuth.py +26 -0
  544. metadata/generated/schema/entity/services/connections/pipeline/airbyte/oauthClientAuth.py +30 -0
  545. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +16 -10
  546. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  547. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  548. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +2 -2
  549. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  550. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +11 -1
  551. metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
  552. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
  553. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  554. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +2 -2
  555. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
  556. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  557. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
  558. metadata/generated/schema/entity/services/connections/pipeline/kinesisFirehoseConnection.py +58 -0
  559. metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
  560. metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
  561. metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
  562. metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
  563. metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
  564. metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +1 -1
  565. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  566. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
  567. metadata/generated/schema/entity/services/connections/pipeline/snowplowConnection.py +93 -0
  568. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  569. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  570. metadata/generated/schema/entity/services/connections/pipeline/ssisConnection.py +1 -1
  571. metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
  572. metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.py +1 -1
  573. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  574. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +2 -2
  575. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  576. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  577. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  578. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  579. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  580. metadata/generated/schema/entity/services/connections/security/__init__.py +1 -1
  581. metadata/generated/schema/entity/services/connections/security/ranger/__init__.py +1 -1
  582. metadata/generated/schema/entity/services/connections/security/ranger/basicAuth.py +1 -1
  583. metadata/generated/schema/entity/services/connections/security/rangerConnection.py +1 -1
  584. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  585. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  586. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  587. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +2 -2
  588. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  589. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +10 -2
  590. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  591. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  592. metadata/generated/schema/entity/services/dashboardService.py +7 -1
  593. metadata/generated/schema/entity/services/databaseService.py +7 -1
  594. metadata/generated/schema/entity/services/driveService.py +1 -1
  595. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  596. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +8 -1
  597. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  598. metadata/generated/schema/entity/services/ingestionPipelines/reverseIngestionResponse.py +1 -1
  599. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  600. metadata/generated/schema/entity/services/messagingService.py +1 -1
  601. metadata/generated/schema/entity/services/metadataService.py +4 -1
  602. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  603. metadata/generated/schema/entity/services/pipelineService.py +7 -1
  604. metadata/generated/schema/entity/services/searchService.py +1 -1
  605. metadata/generated/schema/entity/services/securityService.py +1 -1
  606. metadata/generated/schema/entity/services/serviceType.py +1 -1
  607. metadata/generated/schema/entity/services/storageService.py +1 -1
  608. metadata/generated/schema/entity/teams/__init__.py +1 -1
  609. metadata/generated/schema/entity/teams/persona.py +1 -1
  610. metadata/generated/schema/entity/teams/role.py +1 -1
  611. metadata/generated/schema/entity/teams/team.py +1 -1
  612. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  613. metadata/generated/schema/entity/teams/user.py +1 -1
  614. metadata/generated/schema/entity/type.py +1 -1
  615. metadata/generated/schema/entity/utils/__init__.py +1 -1
  616. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  617. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  618. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  619. metadata/generated/schema/events/__init__.py +1 -1
  620. metadata/generated/schema/events/alertMetrics.py +1 -1
  621. metadata/generated/schema/events/api/__init__.py +1 -1
  622. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  623. metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +1 -1
  624. metadata/generated/schema/events/api/eventsRecord.py +1 -1
  625. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
  626. metadata/generated/schema/events/api/typedEvent.py +1 -1
  627. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  628. metadata/generated/schema/events/eventFilterRule.py +1 -1
  629. metadata/generated/schema/events/eventSubscription.py +16 -1
  630. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  631. metadata/generated/schema/events/failedEvent.py +1 -1
  632. metadata/generated/schema/events/failedEventResponse.py +1 -1
  633. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  634. metadata/generated/schema/events/statusContext.py +1 -1
  635. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  636. metadata/generated/schema/events/subscriptionStatus.py +1 -1
  637. metadata/generated/schema/events/testDestinationStatus.py +1 -1
  638. metadata/generated/schema/governance/workflows/__init__.py +1 -1
  639. metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
  640. metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
  641. metadata/generated/schema/governance/workflows/elements/nodeSubType.py +4 -1
  642. metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
  643. metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
  644. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
  645. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
  646. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.py +1 -1
  647. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/dataCompletenessTask.py +124 -0
  648. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/rollbackEntityTask.py +54 -0
  649. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.py +1 -1
  650. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityAttributeTask.py +66 -0
  651. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
  652. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +11 -12
  653. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
  654. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
  655. metadata/generated/schema/governance/workflows/elements/nodes/gateway/__init__.py +1 -1
  656. metadata/generated/schema/governance/workflows/elements/nodes/gateway/parallelGateway.py +1 -1
  657. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
  658. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
  659. metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
  660. metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +22 -1
  661. metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
  662. metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +90 -7
  663. metadata/generated/schema/governance/workflows/elements/triggers/noOpTrigger.py +1 -1
  664. metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +80 -7
  665. metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -1
  666. metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
  667. metadata/generated/schema/governance/workflows/workflowInstanceState.py +1 -1
  668. metadata/generated/schema/jobs/__init__.py +1 -1
  669. metadata/generated/schema/jobs/backgroundJob.py +1 -1
  670. metadata/generated/schema/jobs/enumCleanupArgs.py +1 -1
  671. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  672. metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +1 -1
  673. metadata/generated/schema/metadataIngestion/application.py +8 -1
  674. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  675. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  676. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  677. metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +1 -1
  678. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  679. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  680. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  681. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  682. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  683. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  684. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  685. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  686. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  687. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  688. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  689. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  690. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  691. metadata/generated/schema/metadataIngestion/driveServiceMetadataPipeline.py +1 -1
  692. metadata/generated/schema/metadataIngestion/engine/__init__.py +1 -1
  693. metadata/generated/schema/metadataIngestion/engine/nativeEngineConfig.py +1 -1
  694. metadata/generated/schema/metadataIngestion/engine/sparkEngineConfig.py +1 -1
  695. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  696. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  697. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +29 -2
  698. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  699. metadata/generated/schema/metadataIngestion/reverseIngestionPipeline.py +1 -1
  700. metadata/generated/schema/metadataIngestion/reverseingestionconfig/__init__.py +1 -1
  701. metadata/generated/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.py +1 -1
  702. metadata/generated/schema/metadataIngestion/reverseingestionconfig/ownerConfig.py +1 -1
  703. metadata/generated/schema/metadataIngestion/reverseingestionconfig/tagsConfig.py +1 -1
  704. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  705. metadata/generated/schema/metadataIngestion/securityServiceMetadataPipeline.py +1 -1
  706. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  707. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  708. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +17 -1
  709. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  710. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  711. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  712. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  713. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  714. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  715. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  716. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  717. metadata/generated/schema/metadataIngestion/workflow.py +8 -1
  718. metadata/generated/schema/monitoring/__init__.py +1 -1
  719. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  720. metadata/generated/schema/scim/__init__.py +1 -1
  721. metadata/generated/schema/scim/scimConfiguration.py +1 -1
  722. metadata/generated/schema/search/__init__.py +1 -1
  723. metadata/generated/schema/search/aggregationRequest.py +1 -1
  724. metadata/generated/schema/search/searchRequest.py +8 -1
  725. metadata/generated/schema/security/__init__.py +1 -1
  726. metadata/generated/schema/security/client/__init__.py +1 -1
  727. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  728. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  729. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  730. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  731. metadata/generated/schema/security/client/oidcClientConfig.py +6 -10
  732. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  733. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  734. metadata/generated/schema/security/client/samlSSOClientConfig.py +6 -6
  735. metadata/generated/schema/security/credentials/__init__.py +1 -1
  736. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  737. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  738. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  739. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  740. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  741. metadata/generated/schema/security/credentials/bitbucketCredentials.py +10 -2
  742. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  743. metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
  744. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  745. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  746. metadata/generated/schema/security/credentials/githubCredentials.py +10 -2
  747. metadata/generated/schema/security/credentials/gitlabCredentials.py +10 -2
  748. metadata/generated/schema/security/credentials/kubernetesCredentials.py +1 -1
  749. metadata/generated/schema/security/sasl/__init__.py +1 -1
  750. metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
  751. metadata/generated/schema/security/secrets/__init__.py +1 -1
  752. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  753. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  754. metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
  755. metadata/generated/schema/security/securityConfiguration.py +1 -1
  756. metadata/generated/schema/security/ssl/__init__.py +1 -1
  757. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  758. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  759. metadata/generated/schema/settings/__init__.py +1 -1
  760. metadata/generated/schema/settings/settings.py +5 -2
  761. metadata/generated/schema/system/__init__.py +1 -1
  762. metadata/generated/schema/system/entityError.py +1 -1
  763. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  764. metadata/generated/schema/system/indexingError.py +1 -1
  765. metadata/generated/schema/system/limitsResponse.py +1 -1
  766. metadata/generated/schema/system/securityValidationResponse.py +62 -0
  767. metadata/generated/schema/system/ui/__init__.py +1 -1
  768. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  769. metadata/generated/schema/system/ui/navigationItem.py +1 -1
  770. metadata/generated/schema/system/ui/page.py +8 -1
  771. metadata/generated/schema/system/ui/tab.py +1 -1
  772. metadata/generated/schema/system/ui/uiCustomization.py +1 -1
  773. metadata/generated/schema/system/validationResponse.py +8 -1
  774. metadata/generated/schema/tests/__init__.py +1 -1
  775. metadata/generated/schema/tests/assigned.py +1 -1
  776. metadata/generated/schema/tests/basic.py +20 -20
  777. metadata/generated/schema/tests/customMetric.py +1 -1
  778. metadata/generated/schema/tests/dataQualityReport.py +1 -1
  779. metadata/generated/schema/tests/resolved.py +1 -1
  780. metadata/generated/schema/tests/testCase.py +26 -2
  781. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  782. metadata/generated/schema/tests/testDefinition.py +1 -1
  783. metadata/generated/schema/tests/testSuite.py +12 -1
  784. metadata/generated/schema/type/__init__.py +1 -1
  785. metadata/generated/schema/type/apiSchema.py +1 -1
  786. metadata/generated/schema/type/assetCertification.py +1 -1
  787. metadata/generated/schema/type/auditLog.py +1 -1
  788. metadata/generated/schema/type/basic.py +9 -1
  789. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  790. metadata/generated/schema/type/changeEvent.py +1 -1
  791. metadata/generated/schema/type/changeEventType.py +1 -1
  792. metadata/generated/schema/type/changeSummaryMap.py +1 -1
  793. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  794. metadata/generated/schema/type/contextRecognizer.py +50 -0
  795. metadata/generated/schema/type/contractExecutionStatus.py +1 -1
  796. metadata/generated/schema/type/csvDocumentation.py +1 -1
  797. metadata/generated/schema/type/csvErrorType.py +1 -1
  798. metadata/generated/schema/type/csvFile.py +1 -1
  799. metadata/generated/schema/type/csvImportResult.py +1 -1
  800. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  801. metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
  802. metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
  803. metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
  804. metadata/generated/schema/type/customProperty.py +1 -1
  805. metadata/generated/schema/type/customRecognizer.py +39 -0
  806. metadata/generated/schema/type/dailyCount.py +1 -1
  807. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  808. metadata/generated/schema/type/denyListRecognizer.py +37 -0
  809. metadata/generated/schema/type/entityHierarchy.py +1 -1
  810. metadata/generated/schema/type/entityHistory.py +1 -1
  811. metadata/generated/schema/type/entityLineage.py +1 -1
  812. metadata/generated/schema/type/entityProfile.py +45 -0
  813. metadata/generated/schema/type/entityReference.py +1 -1
  814. metadata/generated/schema/type/entityReferenceList.py +1 -1
  815. metadata/generated/schema/type/entityRelationship/__init__.py +1 -1
  816. metadata/generated/schema/type/entityRelationship/nodeInformation.py +1 -1
  817. metadata/generated/schema/type/entityUsage.py +1 -1
  818. metadata/generated/schema/type/filterPattern.py +1 -1
  819. metadata/generated/schema/type/function.py +1 -1
  820. metadata/generated/schema/type/include.py +1 -1
  821. metadata/generated/schema/type/jdbcConnection.py +1 -1
  822. metadata/generated/schema/type/layerPaging.py +1 -1
  823. metadata/generated/schema/type/lifeCycle.py +1 -1
  824. metadata/generated/schema/type/paging.py +1 -1
  825. metadata/generated/schema/type/patternRecognizer.py +39 -0
  826. metadata/generated/schema/type/personaPreferences.py +1 -1
  827. metadata/generated/schema/type/piiEntity.py +48 -0
  828. metadata/generated/schema/type/predefinedRecognizer.py +85 -0
  829. metadata/generated/schema/type/profile.py +1 -1
  830. metadata/generated/schema/type/queryParserData.py +1 -1
  831. metadata/generated/schema/type/reaction.py +1 -1
  832. metadata/generated/schema/type/recognizer.py +159 -0
  833. metadata/generated/schema/type/recognizerFeedback.py +120 -0
  834. metadata/generated/schema/type/recognizers/__init__.py +3 -0
  835. metadata/generated/schema/type/recognizers/patterns.py +29 -0
  836. metadata/generated/schema/type/recognizers/regexFlags.py +29 -0
  837. metadata/generated/schema/type/schedule.py +1 -1
  838. metadata/generated/schema/type/schema.py +1 -1
  839. metadata/generated/schema/type/status.py +16 -0
  840. metadata/generated/schema/type/tableQuery.py +1 -1
  841. metadata/generated/schema/type/tableUsageCount.py +1 -1
  842. metadata/generated/schema/type/tagLabel.py +8 -1
  843. metadata/generated/schema/type/usageDetails.py +1 -1
  844. metadata/generated/schema/type/usageRequest.py +1 -1
  845. metadata/generated/schema/type/votes.py +1 -1
  846. metadata/great_expectations/action1xx.py +2 -1
  847. metadata/ingestion/api/status.py +6 -1
  848. metadata/ingestion/api/step.py +3 -1
  849. metadata/ingestion/bulksink/metadata_usage.py +19 -2
  850. metadata/ingestion/connections/builders.py +5 -1
  851. metadata/ingestion/lineage/masker.py +5 -0
  852. metadata/ingestion/lineage/models.py +4 -0
  853. metadata/ingestion/lineage/parser.py +56 -4
  854. metadata/ingestion/lineage/sql_lineage.py +243 -103
  855. metadata/ingestion/models/custom_basemodel_validation.py +169 -43
  856. metadata/ingestion/models/custom_pydantic.py +6 -19
  857. metadata/ingestion/models/patch_request.py +2 -0
  858. metadata/ingestion/ometa/client.py +2 -2
  859. metadata/ingestion/ometa/mixins/csv_mixin.py +180 -0
  860. metadata/ingestion/ometa/mixins/domain_mixin.py +48 -0
  861. metadata/ingestion/ometa/mixins/es_mixin.py +7 -1
  862. metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +26 -0
  863. metadata/ingestion/ometa/mixins/lineage_mixin.py +1 -1
  864. metadata/ingestion/ometa/mixins/logs_mixin.py +316 -0
  865. metadata/ingestion/ometa/mixins/patch_mixin.py +23 -9
  866. metadata/ingestion/ometa/mixins/profile_mixin.py +77 -0
  867. metadata/ingestion/ometa/mixins/tag_glossary_mixin.py +68 -0
  868. metadata/ingestion/ometa/mixins/tests_mixin.py +1 -1
  869. metadata/ingestion/ometa/mixins/user_mixin.py +57 -16
  870. metadata/ingestion/ometa/ometa_api.py +24 -1
  871. metadata/ingestion/ometa/routes.py +5 -0
  872. metadata/ingestion/source/api/rest/connection.py +12 -6
  873. metadata/ingestion/source/api/rest/metadata.py +227 -37
  874. metadata/ingestion/source/api/rest/parser.py +103 -0
  875. metadata/ingestion/source/dashboard/domodashboard/metadata.py +19 -9
  876. metadata/ingestion/source/dashboard/grafana/__init__.py +10 -0
  877. metadata/ingestion/source/dashboard/grafana/client.py +223 -0
  878. metadata/ingestion/source/dashboard/grafana/connection.py +66 -0
  879. metadata/ingestion/source/dashboard/grafana/metadata.py +476 -0
  880. metadata/ingestion/source/dashboard/grafana/models.py +159 -0
  881. metadata/ingestion/source/dashboard/grafana/service_spec.py +17 -0
  882. metadata/ingestion/source/dashboard/hex/client.py +104 -0
  883. metadata/ingestion/source/dashboard/hex/connection.py +60 -0
  884. metadata/ingestion/source/dashboard/hex/metadata.py +363 -0
  885. metadata/ingestion/source/dashboard/hex/models.py +143 -0
  886. metadata/ingestion/source/dashboard/hex/query_fetcher.py +503 -0
  887. metadata/ingestion/source/dashboard/hex/service_spec.py +18 -0
  888. metadata/ingestion/source/dashboard/hex/warehouse_queries.py +225 -0
  889. metadata/ingestion/source/dashboard/looker/bulk_parser.py +31 -14
  890. metadata/ingestion/source/dashboard/looker/metadata.py +131 -32
  891. metadata/ingestion/source/dashboard/looker/models.py +3 -0
  892. metadata/ingestion/source/dashboard/looker/utils.py +18 -3
  893. metadata/ingestion/source/dashboard/metabase/client.py +33 -11
  894. metadata/ingestion/source/dashboard/metabase/metadata.py +4 -0
  895. metadata/ingestion/source/dashboard/metabase/models.py +49 -1
  896. metadata/ingestion/source/dashboard/microstrategy/metadata.py +1 -1
  897. metadata/ingestion/source/dashboard/powerbi/client.py +18 -1
  898. metadata/ingestion/source/dashboard/powerbi/databricks_parser.py +108 -0
  899. metadata/ingestion/source/dashboard/powerbi/metadata.py +412 -100
  900. metadata/ingestion/source/dashboard/powerbi/models.py +20 -1
  901. metadata/ingestion/source/dashboard/redash/metadata.py +4 -0
  902. metadata/ingestion/source/dashboard/sigma/metadata.py +4 -0
  903. metadata/ingestion/source/dashboard/superset/api_source.py +2 -0
  904. metadata/ingestion/source/dashboard/superset/db_source.py +2 -0
  905. metadata/ingestion/source/dashboard/superset/mixin.py +2 -0
  906. metadata/ingestion/source/dashboard/tableau/client.py +29 -14
  907. metadata/ingestion/source/dashboard/tableau/metadata.py +7 -1
  908. metadata/ingestion/source/database/athena/utils.py +1 -1
  909. metadata/ingestion/source/database/bigquery/connection.py +33 -13
  910. metadata/ingestion/source/database/bigquery/lineage.py +5 -10
  911. metadata/ingestion/source/database/bigquery/metadata.py +39 -34
  912. metadata/ingestion/source/database/bigquery/queries.py +6 -1
  913. metadata/ingestion/source/database/column_type_parser.py +1 -1
  914. metadata/ingestion/source/database/common/data_diff/databricks_base.py +42 -0
  915. metadata/ingestion/source/database/common_pg_mappings.py +7 -0
  916. metadata/ingestion/source/database/databricks/auth.py +99 -0
  917. metadata/ingestion/source/database/databricks/client.py +201 -51
  918. metadata/ingestion/source/database/databricks/connection.py +99 -13
  919. metadata/ingestion/source/database/databricks/data_diff/__init__.py +1 -0
  920. metadata/ingestion/source/database/databricks/data_diff/data_diff.py +12 -0
  921. metadata/ingestion/source/database/databricks/queries.py +86 -16
  922. metadata/ingestion/source/database/databricks/service_spec.py +4 -0
  923. metadata/ingestion/source/database/dbt/constants.py +0 -1
  924. metadata/ingestion/source/database/dbt/metadata.py +47 -21
  925. metadata/ingestion/source/database/dbt/models.py +1 -0
  926. metadata/ingestion/source/database/exasol/connection.py +6 -0
  927. metadata/ingestion/source/database/exasol/lineage.py +24 -0
  928. metadata/ingestion/source/database/exasol/metadata.py +6 -0
  929. metadata/ingestion/source/database/exasol/queries.py +22 -0
  930. metadata/ingestion/source/database/exasol/query_parser.py +33 -0
  931. metadata/ingestion/source/database/exasol/service_spec.py +5 -1
  932. metadata/ingestion/source/database/glue/metadata.py +2 -2
  933. metadata/ingestion/source/database/hive/connection.py +41 -2
  934. metadata/ingestion/source/database/hive/custom_hive_connection.py +195 -0
  935. metadata/ingestion/source/database/iceberg/metadata.py +44 -1
  936. metadata/ingestion/source/database/iceberg/models.py +22 -13
  937. metadata/ingestion/source/database/lineage_processors.py +386 -0
  938. metadata/ingestion/source/database/lineage_source.py +314 -248
  939. metadata/ingestion/source/database/mariadb/metadata.py +86 -1
  940. metadata/ingestion/source/database/mariadb/models.py +36 -0
  941. metadata/ingestion/source/database/mariadb/queries.py +43 -0
  942. metadata/ingestion/source/database/mssql/lineage.py +3 -27
  943. metadata/ingestion/source/database/oracle/connection.py +158 -114
  944. metadata/ingestion/source/database/oracle/lineage.py +3 -10
  945. metadata/ingestion/source/database/oracle/queries.py +43 -6
  946. metadata/ingestion/source/database/oracle/service_spec.py +2 -0
  947. metadata/ingestion/source/database/postgres/connection.py +6 -0
  948. metadata/ingestion/source/database/postgres/queries.py +22 -0
  949. metadata/ingestion/source/database/redshift/lineage.py +4 -10
  950. metadata/ingestion/source/database/redshift/utils.py +2 -1
  951. metadata/ingestion/source/database/salesforce/connection.py +14 -6
  952. metadata/ingestion/source/database/salesforce/metadata.py +14 -16
  953. metadata/ingestion/source/database/sample_data.py +24 -8
  954. metadata/ingestion/source/database/saphana/cdata_parser.py +327 -117
  955. metadata/ingestion/source/database/saphana/lineage.py +15 -2
  956. metadata/ingestion/source/database/saphana/queries.py +7 -0
  957. metadata/ingestion/source/database/snowflake/connection.py +7 -0
  958. metadata/ingestion/source/database/snowflake/constants.py +21 -0
  959. metadata/ingestion/source/database/snowflake/lineage.py +48 -30
  960. metadata/ingestion/source/database/snowflake/metadata.py +176 -22
  961. metadata/ingestion/source/database/snowflake/queries.py +15 -1
  962. metadata/ingestion/source/database/snowflake/query_parser.py +12 -2
  963. metadata/ingestion/source/database/snowflake/usage.py +97 -0
  964. metadata/ingestion/source/database/sql_column_handler.py +11 -3
  965. metadata/ingestion/source/database/stored_procedures_mixin.py +66 -221
  966. metadata/ingestion/source/database/timescale/__init__.py +3 -0
  967. metadata/ingestion/source/database/timescale/connection.py +103 -0
  968. metadata/ingestion/source/database/timescale/lineage.py +124 -0
  969. metadata/ingestion/source/database/timescale/metadata.py +228 -0
  970. metadata/ingestion/source/database/timescale/models.py +60 -0
  971. metadata/ingestion/source/database/timescale/queries.py +96 -0
  972. metadata/ingestion/source/database/timescale/query_parser.py +106 -0
  973. metadata/ingestion/source/database/timescale/service_spec.py +12 -0
  974. metadata/ingestion/source/database/timescale/usage.py +43 -0
  975. metadata/ingestion/source/database/timescale/utils.py +545 -0
  976. metadata/ingestion/source/database/trino/metadata.py +43 -4
  977. metadata/ingestion/source/database/trino/queries.py +4 -0
  978. metadata/ingestion/source/database/unitycatalog/client.py +35 -1
  979. metadata/ingestion/source/database/unitycatalog/connection.py +43 -12
  980. metadata/ingestion/source/database/unitycatalog/data_diff/__init__.py +1 -0
  981. metadata/ingestion/source/database/unitycatalog/data_diff/data_diff.py +12 -0
  982. metadata/ingestion/source/database/unitycatalog/lineage.py +213 -24
  983. metadata/ingestion/source/database/unitycatalog/metadata.py +5 -4
  984. metadata/ingestion/source/database/unitycatalog/models.py +18 -2
  985. metadata/ingestion/source/database/unitycatalog/service_spec.py +4 -0
  986. metadata/ingestion/source/messaging/kafka/connection.py +13 -4
  987. metadata/ingestion/source/metadata/amundsen/client.py +6 -6
  988. metadata/ingestion/source/mlmodel/mlmodel_service.py +75 -1
  989. metadata/ingestion/source/pipeline/airbyte/client.py +142 -4
  990. metadata/ingestion/source/pipeline/airbyte/connection.py +18 -5
  991. metadata/ingestion/source/pipeline/airbyte/metadata.py +102 -2
  992. metadata/ingestion/source/pipeline/airflow/connection.py +8 -6
  993. metadata/ingestion/source/pipeline/airflow/metadata.py +5 -1
  994. metadata/ingestion/source/pipeline/databrickspipeline/connection.py +1 -0
  995. metadata/ingestion/source/pipeline/databrickspipeline/kafka_parser.py +603 -0
  996. metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +1019 -90
  997. metadata/ingestion/source/pipeline/databrickspipeline/models.py +19 -3
  998. metadata/ingestion/source/pipeline/dbtcloud/client.py +85 -76
  999. metadata/ingestion/source/pipeline/dbtcloud/metadata.py +135 -84
  1000. metadata/ingestion/source/pipeline/dbtcloud/models.py +4 -0
  1001. metadata/ingestion/source/pipeline/dbtcloud/queries.py +7 -11
  1002. metadata/ingestion/source/pipeline/fivetran/client.py +7 -3
  1003. metadata/ingestion/source/pipeline/fivetran/metadata.py +122 -90
  1004. metadata/ingestion/source/pipeline/kafkaconnect/client.py +388 -107
  1005. metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +1678 -72
  1006. metadata/ingestion/source/pipeline/kafkaconnect/models.py +51 -14
  1007. metadata/ingestion/source/pipeline/nifi/metadata.py +62 -5
  1008. metadata/ingestion/source/pipeline/openlineage/metadata.py +6 -2
  1009. metadata/ingestion/source/search/elasticsearch/connection.py +1 -1
  1010. metadata/ingestion/source/storage/gcs/connection.py +15 -5
  1011. metadata/ingestion/source/storage/gcs/metadata.py +285 -26
  1012. metadata/ingestion/source/storage/gcs/models.py +12 -6
  1013. metadata/ingestion/source/storage/s3/metadata.py +46 -11
  1014. metadata/ingestion/source/storage/storage_service.py +2 -0
  1015. metadata/parsers/json_schema_parser.py +41 -1
  1016. metadata/pii/algorithms/classifiers.py +63 -1
  1017. metadata/pii/algorithms/feature_extraction.py +13 -2
  1018. metadata/pii/algorithms/patterns.py +171 -0
  1019. metadata/pii/algorithms/preprocessing.py +19 -13
  1020. metadata/pii/algorithms/presidio_recognizer_factory.py +302 -0
  1021. metadata/pii/algorithms/presidio_utils.py +205 -24
  1022. metadata/pii/algorithms/utils.py +4 -0
  1023. metadata/pii/base_processor.py +2 -1
  1024. metadata/pii/processor.py +8 -5
  1025. metadata/pii/processor_factory.py +28 -0
  1026. metadata/pii/scanners/custom_ner_scanner.py +290 -0
  1027. metadata/pii/tag_analyzer.py +124 -0
  1028. metadata/pii/tag_processor.py +100 -0
  1029. metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +17 -0
  1030. metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +24 -0
  1031. metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +16 -2
  1032. metadata/profiler/metrics/hybrid/cardinality_distribution.py +232 -0
  1033. metadata/profiler/metrics/hybrid/histogram.py +1 -1
  1034. metadata/profiler/metrics/registry.py +4 -0
  1035. metadata/profiler/metrics/system/bigquery/system.py +4 -1
  1036. metadata/profiler/metrics/system/databricks/system.py +1 -1
  1037. metadata/profiler/orm/converter/converter_registry.py +2 -0
  1038. metadata/profiler/orm/converter/trino/__init__.py +14 -0
  1039. metadata/profiler/orm/converter/trino/converter.py +39 -0
  1040. metadata/profiler/orm/functions/conn_test.py +5 -0
  1041. metadata/profiler/orm/functions/table_metric_computer.py +5 -18
  1042. metadata/profiler/orm/registry.py +7 -0
  1043. metadata/profiler/orm/types/__init__.py +10 -0
  1044. metadata/profiler/orm/types/trino.py +70 -0
  1045. metadata/profiler/processor/core.py +1 -1
  1046. metadata/profiler/processor/default.py +1 -0
  1047. metadata/readers/dataframe/mf4.py +75 -0
  1048. metadata/readers/dataframe/reader_factory.py +3 -0
  1049. metadata/sampler/sqlalchemy/bigquery/sampler.py +17 -0
  1050. metadata/sampler/sqlalchemy/databricks/sampler.py +13 -1
  1051. metadata/sampler/sqlalchemy/unitycatalog/sampler.py +6 -39
  1052. metadata/sdk/__init__.py +188 -0
  1053. metadata/sdk/api/__init__.py +7 -0
  1054. metadata/sdk/api/lineage.py +421 -0
  1055. metadata/sdk/api/search.py +382 -0
  1056. metadata/sdk/client.py +91 -0
  1057. metadata/sdk/config.py +121 -0
  1058. metadata/sdk/entities/__init__.py +64 -0
  1059. metadata/sdk/entities/apicollections.py +19 -0
  1060. metadata/sdk/entities/apiendpoints.py +19 -0
  1061. metadata/sdk/entities/base.py +487 -0
  1062. metadata/sdk/entities/charts.py +17 -0
  1063. metadata/sdk/entities/classifications.py +21 -0
  1064. metadata/sdk/entities/containers.py +17 -0
  1065. metadata/sdk/entities/custom_properties.py +144 -0
  1066. metadata/sdk/entities/dashboard_services.py +18 -0
  1067. metadata/sdk/entities/dashboarddatamodels.py +21 -0
  1068. metadata/sdk/entities/dashboards.py +17 -0
  1069. metadata/sdk/entities/database_services.py +18 -0
  1070. metadata/sdk/entities/databases.py +17 -0
  1071. metadata/sdk/entities/databaseschemas.py +19 -0
  1072. metadata/sdk/entities/datacontracts.py +19 -0
  1073. metadata/sdk/entities/dataproducts.py +19 -0
  1074. metadata/sdk/entities/domains.py +17 -0
  1075. metadata/sdk/entities/glossaries.py +17 -0
  1076. metadata/sdk/entities/glossary_terms.py +18 -0
  1077. metadata/sdk/entities/glossaryterms.py +19 -0
  1078. metadata/sdk/entities/metrics.py +49 -0
  1079. metadata/sdk/entities/mlmodels.py +17 -0
  1080. metadata/sdk/entities/pipelines.py +17 -0
  1081. metadata/sdk/entities/queries.py +17 -0
  1082. metadata/sdk/entities/searchindexes.py +19 -0
  1083. metadata/sdk/entities/storedprocedures.py +19 -0
  1084. metadata/sdk/entities/tables.py +68 -0
  1085. metadata/sdk/entities/tags.py +17 -0
  1086. metadata/sdk/entities/teams.py +17 -0
  1087. metadata/sdk/entities/testcases.py +17 -0
  1088. metadata/sdk/entities/testdefinitions.py +19 -0
  1089. metadata/sdk/entities/testsuites.py +17 -0
  1090. metadata/sdk/entities/users.py +17 -0
  1091. metadata/sdk/examples/builder_end_to_end.py +387 -0
  1092. metadata/sdk/types.py +15 -0
  1093. metadata/utils/bigquery_utils.py +7 -4
  1094. metadata/utils/datalake/datalake_utils.py +121 -0
  1095. metadata/utils/db_utils.py +20 -6
  1096. metadata/utils/deprecation.py +9 -6
  1097. metadata/utils/dispatch.py +6 -3
  1098. metadata/utils/elasticsearch.py +3 -0
  1099. metadata/utils/fqn.py +104 -7
  1100. metadata/utils/helpers.py +18 -1
  1101. metadata/utils/importer.py +3 -2
  1102. metadata/utils/logger.py +12 -0
  1103. metadata/utils/sqa_utils.py +3 -0
  1104. metadata/utils/ssl_manager.py +93 -5
  1105. metadata/utils/streamable_logger.py +569 -0
  1106. metadata/workflow/base.py +49 -2
  1107. metadata/workflow/classification.py +2 -2
  1108. metadata/workflow/workflow_resource_metrics.py +111 -0
  1109. metadata/workflow/workflow_status_mixin.py +1 -1
  1110. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/METADATA +559 -540
  1111. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/RECORD +1115 -950
  1112. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/LICENSE +0 -0
  1113. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/WHEEL +0 -0
  1114. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/entry_points.txt +0 -0
  1115. {openmetadata_ingestion-1.9.0.0.dist-info → openmetadata_ingestion-1.10.14.4.dist-info}/top_level.txt +0 -0
@@ -28,6 +28,7 @@ from metadata.generated.schema.entity.data.pipeline import (
28
28
  TaskStatus,
29
29
  )
30
30
  from metadata.generated.schema.entity.data.table import Table
31
+ from metadata.generated.schema.entity.data.topic import Topic
31
32
  from metadata.generated.schema.entity.services.connections.pipeline.databricksPipelineConnection import (
32
33
  DatabricksPipelineConnection,
33
34
  )
@@ -56,6 +57,10 @@ from metadata.ingestion.api.steps import InvalidSourceException
56
57
  from metadata.ingestion.lineage.sql_lineage import get_column_fqn
57
58
  from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
58
59
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
60
+ from metadata.ingestion.source.pipeline.databrickspipeline.kafka_parser import (
61
+ extract_dlt_table_dependencies,
62
+ extract_kafka_sources,
63
+ )
59
64
  from metadata.ingestion.source.pipeline.databrickspipeline.models import (
60
65
  DataBrickPipelineDetails,
61
66
  DBRun,
@@ -86,6 +91,15 @@ class DatabrickspipelineSource(PipelineServiceSource):
86
91
  Pipeline metadata from Databricks Jobs API
87
92
  """
88
93
 
94
+ def __init__(self, config, metadata):
95
+ super().__init__(config, metadata)
96
+ # Cache for Databricks services to avoid repeated API calls
97
+ self._databricks_services_cached = False
98
+ self._databricks_services: List[str] = []
99
+
100
+ self._table_lookup_cache = {}
101
+ self._dlt_table_cache = {}
102
+
89
103
  @classmethod
90
104
  def create(
91
105
  cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
@@ -99,20 +113,42 @@ class DatabrickspipelineSource(PipelineServiceSource):
99
113
  )
100
114
  return cls(config, metadata)
101
115
 
116
+ def close(self):
117
+ """Method to implement any required logic after the ingestion process is completed"""
118
+ self._table_lookup_cache.clear()
119
+ self._dlt_table_cache.clear()
120
+ return super().close()
121
+
102
122
  def get_pipelines_list(self) -> Iterable[DataBrickPipelineDetails]:
103
123
  try:
104
124
  for workflow in self.client.list_jobs() or []:
105
125
  yield DataBrickPipelineDetails(**workflow)
106
126
  except Exception as exc:
107
127
  logger.debug(traceback.format_exc())
108
- logger.error(f"Failed to get pipeline list due to : {exc}")
128
+ logger.error(f"Failed to get jobs list due to : {exc}")
129
+
130
+ # Fetch DLT pipelines directly (new)
131
+ try:
132
+ for pipeline in self.client.list_pipelines() or []:
133
+ try:
134
+ yield DataBrickPipelineDetails(**pipeline)
135
+ except Exception as exc:
136
+ logger.debug(f"Error creating DLT pipeline details: {exc}")
137
+ logger.debug(traceback.format_exc())
138
+ continue
139
+ except Exception as exc:
140
+ logger.debug(traceback.format_exc())
141
+ logger.warning(f"Failed to get DLT pipelines list due to : {exc}")
142
+
109
143
  return None
110
144
 
111
145
  def get_pipeline_name(
112
146
  self, pipeline_details: DataBrickPipelineDetails
113
147
  ) -> Optional[str]:
114
148
  try:
115
- return pipeline_details.settings.name
149
+ if pipeline_details.pipeline_id:
150
+ return pipeline_details.name
151
+ return pipeline_details.settings.name if pipeline_details.settings else None
116
152
  except Exception as exc:
117
153
  logger.debug(traceback.format_exc())
118
154
  logger.error(f"Failed to get pipeline name due to : {exc}")
@@ -124,15 +160,35 @@ class DatabrickspipelineSource(PipelineServiceSource):
124
160
  ) -> Iterable[Either[CreatePipelineRequest]]:
125
161
  """Method to Get Pipeline Entity"""
126
162
  try:
127
- description = pipeline_details.settings.description
163
+ if pipeline_details.pipeline_id:
164
+ description = None
165
+ display_name = pipeline_details.name
166
+ entity_name = str(pipeline_details.pipeline_id)
167
+ schedule_interval = None
168
+ else:
169
+ description = (
170
+ pipeline_details.settings.description
171
+ if pipeline_details.settings
172
+ else None
173
+ )
174
+ display_name = (
175
+ pipeline_details.settings.name
176
+ if pipeline_details.settings
177
+ else None
178
+ )
179
+ entity_name = str(pipeline_details.job_id)
180
+ schedule_interval = (
181
+ str(pipeline_details.settings.schedule.cron)
182
+ if pipeline_details.settings and pipeline_details.settings.schedule
183
+ else None
184
+ )
185
+
128
186
  pipeline_request = CreatePipelineRequest(
129
- name=EntityName(str(pipeline_details.job_id)),
130
- displayName=pipeline_details.settings.name,
187
+ name=EntityName(entity_name),
188
+ displayName=display_name,
131
189
  description=Markdown(description) if description else None,
132
190
  tasks=self.get_tasks(pipeline_details),
133
- scheduleInterval=str(pipeline_details.settings.schedule.cron)
134
- if pipeline_details.settings.schedule
135
- else None,
191
+ scheduleInterval=schedule_interval,
136
192
  service=FullyQualifiedEntityName(self.context.get().pipeline_service),
137
193
  )
138
194
  yield Either(right=pipeline_request)
@@ -168,38 +224,37 @@ class DatabrickspipelineSource(PipelineServiceSource):
168
224
 
169
225
  def get_tasks(self, pipeline_details: DataBrickPipelineDetails) -> List[Task]:
170
226
  try:
171
- task_list = []
172
- for run in self.client.get_job_runs(job_id=pipeline_details.job_id) or []:
173
- run = DBRun(**run)
174
- task_list.extend(
175
- [
176
- Task(
177
- name=str(task.name),
178
- taskType=pipeline_details.settings.task_type,
179
- sourceUrl=SourceUrl(run.run_page_url)
180
- if run.run_page_url
181
- else None,
182
- description=Markdown(task.description)
183
- if task.description
184
- else None,
185
- downstreamTasks=[
186
- depend_task.name
187
- for depend_task in task.depends_on or []
188
- ],
189
- )
190
- for task in run.tasks or []
191
- ]
227
+ if not pipeline_details.settings or not pipeline_details.settings.tasks:
228
+ return []
229
+
230
+ job_url = f"https://{self.service_connection.hostPort}/#job/{pipeline_details.job_id}"
231
+
232
+ return [
233
+ Task(
234
+ name=str(task.name),
235
+ taskType=pipeline_details.settings.task_type,
236
+ sourceUrl=SourceUrl(job_url),
237
+ description=(
238
+ Markdown(task.description) if task.description else None
239
+ ),
240
+ downstreamTasks=[
241
+ depend_task.name for depend_task in task.depends_on or []
242
+ ],
192
243
  )
193
- return task_list
244
+ for task in pipeline_details.settings.tasks
245
+ ]
194
246
  except Exception as exc:
195
247
  logger.debug(traceback.format_exc())
196
248
  logger.warning(f"Failed to get tasks list due to : {exc}")
197
- return None
249
+ return []
198
250
 
199
251
  def yield_pipeline_status(
200
252
  self, pipeline_details: DataBrickPipelineDetails
201
253
  ) -> Iterable[OMetaPipelineStatus]:
202
254
  try:
255
+ if not pipeline_details.job_id:
256
+ return
257
+
203
258
  for run in self.client.get_job_runs(job_id=pipeline_details.job_id) or []:
204
259
  run = DBRun(**run)
205
260
  task_status = [
@@ -237,7 +292,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
237
292
  except Exception as exc:
238
293
  yield Either(
239
294
  left=StackTraceError(
240
- name=pipeline_details.job_id,
295
+ name=pipeline_details.id,
241
296
  error=f"Failed to yield pipeline status: {exc}",
242
297
  stackTrace=traceback.format_exc(),
243
298
  )
@@ -296,6 +351,847 @@ class DatabrickspipelineSource(PipelineServiceSource):
296
351
  )
297
352
  return processed_column_lineage or []
298
353
 
354
+ def _get_databricks_services(self) -> List[str]:
355
+ """
356
+ Get list of all Databricks/Unity Catalog database service names from OpenMetadata
357
+
358
+ Caches the result to avoid repeated API calls during lineage extraction.
359
+ Returns list of service names that are of type Databricks or UnityCatalog.
360
+ """
361
+ # Return cached services if already fetched
362
+ if self._databricks_services_cached:
363
+ logger.debug(
364
+ f"Using cached Databricks services: {self._databricks_services}"
365
+ )
366
+ return self._databricks_services
367
+
368
+ try:
369
+ from metadata.generated.schema.entity.services.databaseService import (
370
+ DatabaseService,
371
+ )
372
+
373
+ logger.info("Fetching Databricks/Unity Catalog database services...")
374
+
375
+ # List all database services
376
+ services = self.metadata.list_all_entities(
377
+ entity=DatabaseService, fields=["serviceType"]
378
+ )
379
+
380
+ databricks_services = []
381
+ for service in services or []:
382
+ try:
383
+ service_type = (
384
+ service.serviceType.value
385
+ if hasattr(service, "serviceType")
386
+ else None
387
+ )
388
+ service_name = (
389
+ service.name.root
390
+ if hasattr(service.name, "root")
391
+ else service.name
392
+ )
393
+
394
+ logger.debug(f" Service: {service_name}, Type: {service_type}")
395
+
396
+ # Check if it's a Databricks or Unity Catalog service
397
+ if service_type and service_type.lower() in [
398
+ "databricks",
399
+ "unitycatalog",
400
+ ]:
401
+ databricks_services.append(service_name)
402
+ logger.debug(
403
+ f" ✓ Databricks/Unity Catalog service: {service_name}"
404
+ )
405
+
406
+ except Exception as exc:
407
+ logger.debug(f" Error processing service: {exc}")
408
+ continue
409
+
410
+ # Cache the results
411
+ self._databricks_services = databricks_services
412
+ self._databricks_services_cached = True
413
+
414
+ logger.info(
415
+ f"Found {len(databricks_services)} Databricks/Unity Catalog service(s): {databricks_services}"
416
+ )
417
+ return databricks_services
418
+
419
+ except Exception as exc:
420
+ logger.warning(f"Error fetching Databricks services: {exc}")
421
+ logger.debug(traceback.format_exc())
422
+ # Cache empty list to avoid repeated failures
423
+ self._databricks_services = []
424
+ self._databricks_services_cached = True
425
+ return []
426
+
427
+ def _find_dlt_table(
428
+ self, table_name: str, catalog: Optional[str], schema: Optional[str]
429
+ ) -> Optional[Table]:
430
+ """
431
+ Find DLT table in OpenMetadata by iterating through Databricks services
432
+
433
+ DLT pipelines only write to Databricks/Unity Catalog Delta tables.
434
+ Uses catalog.schema.table_name from DLT spec to build FQN for each Databricks service.
435
+
436
+ Args:
437
+ table_name: Table name extracted from notebook code
438
+ catalog: Catalog name from DLT pipeline spec (database in OpenMetadata)
439
+ schema: Schema name from DLT pipeline spec
440
+
441
+ Returns:
442
+ Table entity if found, None otherwise
443
+ """
444
+ try:
445
+ # Check cache first to avoid duplicate API calls
446
+ cache_key = f"{catalog}.{schema}.{table_name}"
447
+ if cache_key in self._dlt_table_cache:
448
+ logger.debug(f"DLT table found in cache: {cache_key}")
449
+ return self._dlt_table_cache[cache_key]
450
+
451
+ logger.debug(
452
+ f"Searching for DLT table: catalog={catalog}, schema={schema}, table={table_name}"
453
+ )
454
+
455
+ # Get all Databricks/Unity Catalog services (uses cache)
456
+ databricks_services = self._get_databricks_services()
457
+
458
+ if not databricks_services:
459
+ logger.warning(
460
+ "No Databricks/Unity Catalog services found in OpenMetadata"
461
+ )
462
+ # Fall back to configured dbServiceNames if available
463
+ databricks_services = self.get_db_service_names() or []
464
+ if databricks_services:
465
+ logger.info(
466
+ f"Using configured database services: {databricks_services}"
467
+ )
468
+
469
+ if not databricks_services:
470
+ return None
471
+
472
+ logger.debug(f"Trying {len(databricks_services)} Databricks service(s)")
473
+
474
+ # Try each Databricks service with exact case
475
+ for service_name in databricks_services:
476
+ try:
477
+ # Build FQN: service.catalog.schema.table
478
+ table_fqn = fqn.build(
479
+ metadata=self.metadata,
480
+ entity_type=Table,
481
+ service_name=service_name,
482
+ database_name=catalog,
483
+ schema_name=schema,
484
+ table_name=table_name,
485
+ )
486
+
487
+ logger.debug(f" Trying FQN: {table_fqn}")
488
+
489
+ # Try to get table
490
+ table = self.metadata.get_by_name(entity=Table, fqn=table_fqn)
491
+ if table:
492
+ logger.info(f"Found DLT table with FQN: {table_fqn}")
493
+ # Cache the found table
494
+ cache_key = f"{catalog}.{schema}.{table_name}"
495
+ self._dlt_table_cache[cache_key] = table
496
+ return table
497
+
498
+ except Exception as exc:
499
+ logger.debug(f" Error checking service {service_name}: {exc}")
500
+ continue
501
+
502
+ # If no exact match found, try case-insensitive (Unity Catalog lowercases table names)
503
+ logger.debug("Exact match not found, trying lowercase variants...")
504
+ for service_name in databricks_services:
505
+ try:
506
+ table_fqn = fqn.build(
507
+ metadata=self.metadata,
508
+ entity_type=Table,
509
+ service_name=service_name,
510
+ database_name=catalog.lower() if catalog else None,
511
+ schema_name=schema.lower() if schema else None,
512
+ table_name=table_name.lower(),
513
+ )
514
+
515
+ logger.debug(f" Trying lowercase FQN: {table_fqn}")
516
+
517
+ table = self.metadata.get_by_name(entity=Table, fqn=table_fqn)
518
+ if table:
519
+ logger.info(
520
+ f"Found DLT table with FQN (lowercase): {table_fqn}"
521
+ )
522
+ # Cache the found table
523
+ cache_key = f"{catalog}.{schema}.{table_name}"
524
+ self._dlt_table_cache[cache_key] = table
525
+ return table
526
+
527
+ except Exception as exc:
528
+ logger.debug(
529
+ f" Error checking service {service_name} (lowercase): {exc}"
530
+ )
531
+ continue
532
+
533
+ except Exception as exc:
534
+ logger.debug(f"Could not find DLT table {table_name}: {exc}")
535
+ logger.debug(traceback.format_exc())
536
+
537
+ logger.warning(
538
+ f"DLT table not found: {catalog}.{schema}.{table_name}. "
539
+ f"Ensure the table is ingested from a Databricks/Unity Catalog database service."
540
+ )
541
+ # Cache None to avoid repeated lookups for non-existent tables
542
+ cache_key = f"{catalog}.{schema}.{table_name}"
543
+ self._dlt_table_cache[cache_key] = None
544
+ return None
545
+
546
+ def _find_kafka_topic(self, topic_name: str) -> Optional[Topic]:
547
+ """
548
+ Find Kafka topic in OpenMetadata using Elasticsearch search
549
+
550
+ Handles topic names with dots (e.g., "dev.example.transactions.customerEvent_v1")
551
+ by searching with wildcard pattern: *.topic_name
552
+
553
+ Topic FQN format: MessagingServiceName.TopicName
554
+ When TopicName has dots, it's quoted: MessagingServiceName."dev.ern.topic"
555
+ """
556
+ try:
557
+ logger.debug(
558
+ f"Searching for topic {topic_name} across all messaging services"
559
+ )
560
+
561
+ # Use ES search with wildcard pattern to find topic regardless of service
562
+ # Pattern: *.topic_name or *."topic.with.dots"
563
+ from metadata.utils.elasticsearch import ES_INDEX_MAP
564
+
565
+ # Quote the topic name if it contains dots
566
+ search_topic_name = f'"{topic_name}"' if "." in topic_name else topic_name
567
+ search_pattern = f"*.{search_topic_name}"
568
+
569
+ logger.debug(f"Using search pattern: {search_pattern}")
570
+
571
+ # Search using ES field query for FQN pattern matching
572
+ query_string = f"/search/fieldQuery?fieldName=fullyQualifiedName&fieldValue={search_pattern}&from=0&size=10&index={ES_INDEX_MAP['Topic']}&deleted=false"
573
+
574
+ try:
575
+ response = self.metadata.client.get(query_string)
576
+ if response and response.get("hits", {}).get("hits"):
577
+ # Get the first matching topic
578
+ hit = response["hits"]["hits"][0]
579
+ topic_fqn = hit["_source"]["fullyQualifiedName"]
580
+
581
+ # Fetch full topic entity
582
+ topic = self.metadata.get_by_name(entity=Topic, fqn=topic_fqn)
583
+ if topic:
584
+ logger.info(f"Found topic {topic_name} with FQN: {topic_fqn}")
585
+ return topic
586
+ except Exception as search_exc:
587
+ logger.debug(f"ES search error: {search_exc}")
588
+ logger.debug(traceback.format_exc())
589
+
590
+ except Exception as exc:
591
+ logger.debug(f"Could not find topic {topic_name}: {exc}")
592
+ logger.debug(traceback.format_exc())
593
+
594
+ logger.warning(
595
+ f"Topic {topic_name} not found in OpenMetadata. "
596
+ f"Ensure the topic is ingested from a messaging service."
597
+ )
598
+ return None
599
+
600
+ def _yield_kafka_lineage(
601
+ self, pipeline_details: DataBrickPipelineDetails, pipeline_entity: Pipeline
602
+ ) -> Iterable[Either[AddLineageRequest]]:
603
+ """
604
+ Extract and yield Kafka topic lineage from DLT pipeline source code
605
+ Only processes DLT pipelines (with pipeline_id), not regular jobs
606
+ Creates lineage: Kafka topic -> DLT table (with pipeline in lineageDetails)
607
+ """
608
+ try:
609
+ logger.info("=" * 80)
610
+ logger.info(f"KAFKA LINEAGE EXTRACTION STARTED")
611
+ logger.info(
612
+ f"Pipeline: {pipeline_details.name if hasattr(pipeline_details, 'name') else 'N/A'}"
613
+ )
614
+ logger.info(f"Job ID: {pipeline_details.job_id}")
615
+ logger.info(f"Pipeline ID: {pipeline_details.pipeline_id}")
616
+ logger.info("=" * 80)
617
+
618
+ # Only process DLT pipelines - check for pipeline_id
619
+ # For pure DLT pipelines, pipeline_id is set directly
620
+ pipeline_id = pipeline_details.pipeline_id
621
+
622
+ # For jobs with DLT pipeline tasks, check settings
623
+ if not pipeline_id and pipeline_details.settings:
624
+ try:
625
+ tasks = pipeline_details.settings.tasks
626
+ logger.debug(
627
+ f"Checking for DLT pipeline in job {pipeline_details.job_id}: "
628
+ f"{len(tasks) if tasks else 0} tasks found"
629
+ )
630
+
631
+ if tasks:
632
+ for task in tasks:
633
+ logger.debug(
634
+ f"Task: {task.name}, has pipeline_task: {task.pipeline_task is not None}"
635
+ )
636
+ # Check for direct DLT pipeline task
637
+ if task.pipeline_task and task.pipeline_task.pipeline_id:
638
+ pipeline_id = task.pipeline_task.pipeline_id
639
+ logger.info(
640
+ f"✓ Found DLT pipeline_id from job task: {pipeline_id} for job {pipeline_details.job_id}"
641
+ )
642
+ break
643
+ except Exception as exc:
644
+ logger.debug(f"Error checking for pipeline tasks: {exc}")
645
+ logger.debug(traceback.format_exc())
646
+
647
+ # Only process if we have a DLT pipeline_id
648
+ if not pipeline_id:
649
+ logger.info(
650
+ f"⊗ No DLT pipeline_id found - skipping Kafka lineage extraction"
651
+ )
652
+ logger.info(f" Job ID: {pipeline_details.job_id}")
653
+ logger.info(f" Pipeline ID: {pipeline_details.pipeline_id}")
654
+ logger.info("=" * 80)
655
+ return
656
+
657
+ logger.info(f"✓ Processing Kafka lineage for DLT pipeline: {pipeline_id}")
658
+
659
+ # Get pipeline configuration and extract target catalog/schema
660
+ target_catalog = None
661
+ target_schema = None
662
+ notebook_paths = []
663
+ try:
664
+ logger.info(f"⟳ Fetching pipeline configuration for {pipeline_id}...")
665
+ pipeline_config = self.client.get_pipeline_details(pipeline_id)
666
+ if not pipeline_config:
667
+ logger.warning(
668
+ f"✗ Could not fetch pipeline config for {pipeline_id}"
669
+ )
670
+ logger.info("=" * 80)
671
+ return
672
+
673
+ logger.debug(f"✓ Pipeline config fetched successfully")
674
+ logger.debug(f" Config keys: {list(pipeline_config.keys())}")
675
+
676
+ # Extract spec for detailed configuration
677
+ spec = pipeline_config.get("spec", {})
678
+ logger.info(f"✓ Pipeline spec extracted")
679
+ logger.info(f" Spec keys: {list(spec.keys()) if spec else 'None'}")
680
+
681
+ # Extract target catalog and schema for DLT tables
682
+ target_catalog = spec.get("catalog") if spec else None
683
+ # Schema can be in 'target' or 'schema' field
684
+ target_schema = (
685
+ spec.get("target") or spec.get("schema") if spec else None
686
+ )
687
+ logger.info(f"✓ DLT Target Location:")
688
+ logger.info(f" Catalog: {target_catalog or 'NOT SET'}")
689
+ logger.info(f" Schema: {target_schema or 'NOT SET'}")
690
+
691
+ # Extract notebook/file paths from libraries in spec
692
+ notebook_paths = []
693
+ if spec and "libraries" in spec:
694
+ libraries = spec["libraries"]
695
+ logger.info(
696
+ f"⟳ Extracting notebook paths from {len(libraries)} libraries..."
697
+ )
698
+ for idx, lib in enumerate(libraries):
699
+ logger.debug(f" Library {idx + 1}: {lib}")
700
+ # Library can be dict or have different structures
701
+ if isinstance(lib, dict):
702
+ # Check for notebook path
703
+ if "notebook" in lib and lib["notebook"]:
704
+ notebook = lib["notebook"]
705
+ if isinstance(notebook, dict):
706
+ path = notebook.get("path")
707
+ else:
708
+ path = notebook
709
+ if path:
710
+ notebook_paths.append(path)
711
+ logger.info(f" ✓ Found notebook: {path}")
712
+ # Check for glob pattern
713
+ elif "glob" in lib and lib["glob"]:
714
+ glob_pattern = lib["glob"]
715
+ if isinstance(glob_pattern, dict):
716
+ include_pattern = glob_pattern.get("include")
717
+ if include_pattern:
718
+ # Convert glob pattern to directory path
719
+ # e.g., "/path/**" -> "/path/"
720
+ base_path = include_pattern.replace(
721
+ "/**", "/"
722
+ ).replace("**", "")
723
+ notebook_paths.append(base_path)
724
+ logger.info(
725
+ f" ✓ Found glob pattern, using base path: {base_path}"
726
+ )
727
+
728
+ # Also check for source path in spec configuration
729
+ if not notebook_paths and spec:
730
+ source_path = None
731
+
732
+ # Check spec.configuration for source path
733
+ if "configuration" in spec:
734
+ config = spec["configuration"]
735
+ source_path = config.get("source_path") or config.get("source")
736
+
737
+ # Check development settings
738
+ if not source_path and "development" in spec:
739
+ source_path = spec["development"].get("source_path")
740
+
741
+ if source_path:
742
+ logger.info(
743
+ f" ✓ Found source_path in pipeline spec: {source_path}"
744
+ )
745
+ notebook_paths.append(source_path)
746
+
747
+ logger.info(f"✓ Total notebook paths found: {len(notebook_paths)}")
748
+ for idx, path in enumerate(notebook_paths):
749
+ logger.info(f" {idx + 1}. {path}")
750
+ except Exception as exc:
751
+ logger.error(
752
+ f"✗ Failed to fetch pipeline config for {pipeline_id}: {exc}"
753
+ )
754
+ logger.debug(traceback.format_exc())
755
+ logger.info("=" * 80)
756
+ return
757
+
758
+ if not notebook_paths:
759
+ logger.warning(f"✗ No notebook paths found for pipeline {pipeline_id}")
760
+ logger.info(
761
+ " Cannot extract Kafka lineage without notebook source code"
762
+ )
763
+ logger.info("=" * 80)
764
+ return
765
+
766
+ # Expand directories to individual notebook files
767
+ logger.info(f"⟳ Expanding directory paths to individual notebooks...")
768
+ expanded_paths = []
769
+ for path in notebook_paths:
770
+ # If path ends with /, it's a directory - list all notebooks in it
771
+ if path.endswith("/"):
772
+ try:
773
+ logger.debug(f" Listing directory: {path}")
774
+ # List workspace directory to get all notebooks
775
+ objects = self.client.list_workspace_objects(path)
776
+ if objects:
777
+ for obj in objects:
778
+ obj_type = obj.get("object_type")
779
+ if obj_type in ("NOTEBOOK", "FILE"):
780
+ notebook_path = obj.get("path")
781
+ if notebook_path:
782
+ expanded_paths.append(notebook_path)
783
+ logger.info(
784
+ f" ✓ Found {obj_type.lower()}: {notebook_path}"
785
+ )
786
+ if not expanded_paths:
787
+ logger.debug(f" ⊗ No notebooks found in directory {path}")
788
+ except Exception as exc:
789
+ logger.warning(f" ✗ Could not list directory {path}: {exc}")
790
+ logger.debug(traceback.format_exc())
791
+ else:
792
+ expanded_paths.append(path)
793
+ logger.debug(f" Direct path: {path}")
794
+
795
+ logger.info(f"✓ Total notebooks to process: {len(expanded_paths)}")
796
+
797
+ # Process each notebook to extract Kafka sources and DLT tables
798
+ logger.info("-" * 80)
799
+ logger.info(f"PROCESSING NOTEBOOKS FOR KAFKA LINEAGE")
800
+ logger.info("-" * 80)
801
+
802
+ for idx, lib_path in enumerate(expanded_paths, 1):
803
+ try:
804
+ logger.info(f"\n📓 Notebook {idx}/{len(expanded_paths)}: {lib_path}")
805
+ logger.info(f"⟳ Exporting notebook source code...")
806
+
807
+ source_code = self.client.export_notebook_source(lib_path)
808
+ if not source_code:
809
+ logger.warning(f"✗ Could not export source for {lib_path}")
810
+ continue
811
+
812
+ logger.info(
813
+ f"✓ Source code exported ({len(source_code)} characters)"
814
+ )
815
+
816
+ # Log full source code for debugging
817
+ logger.debug(f" ===== FULL NOTEBOOK SOURCE CODE =====")
818
+ for i, line in enumerate(source_code.split("\n"), 1):
819
+ logger.debug(f" {i:3d}: {line}")
820
+ logger.debug(f" ===== END OF SOURCE CODE =====")
821
+
822
+ # Extract Kafka topics
823
+ logger.info(f"⟳ Parsing Kafka sources from notebook...")
824
+ logger.debug(f" Looking for patterns:")
825
+ logger.debug(
826
+ f" - Kafka: .format('kafka')...option('subscribe', 'topic')"
827
+ )
828
+ logger.debug(f" - DLT: @dlt.table(name='table_name')")
829
+ kafka_sources = extract_kafka_sources(source_code)
830
+ if kafka_sources:
831
+ topics_found = [t for ks in kafka_sources for t in ks.topics]
832
+ logger.info(
833
+ f"✓ Found {len(kafka_sources)} Kafka source(s) with {len(topics_found)} topic(s):"
834
+ )
835
+ for ks_idx, ks in enumerate(kafka_sources, 1):
836
+ logger.info(f" Kafka Source {ks_idx}:")
837
+ logger.info(f" Topics: {ks.topics}")
838
+ logger.info(
839
+ f" Bootstrap Servers: {ks.bootstrap_servers or 'NOT SET'}"
840
+ )
841
+ logger.info(
842
+ f" Group ID Prefix: {ks.group_id_prefix or 'NOT SET'}"
843
+ )
844
+ else:
845
+ logger.info(f"⊗ No Kafka sources found in notebook")
846
+
847
+ # Extract DLT table dependencies
848
+ logger.info(f"⟳ Parsing DLT table dependencies from notebook...")
849
+ dlt_dependencies = extract_dlt_table_dependencies(source_code)
850
+ if dlt_dependencies:
851
+ logger.info(
852
+ f"✓ Found {len(dlt_dependencies)} DLT table(s) with dependencies"
853
+ )
854
+ for dep in dlt_dependencies:
855
+ s3_info = (
856
+ f", reads_from_s3={dep.reads_from_s3}, s3_locations={dep.s3_locations}"
857
+ if dep.reads_from_s3
858
+ else ""
859
+ )
860
+ logger.info(
861
+ f" - {dep.table_name}: depends_on={dep.depends_on}, "
862
+ f"reads_from_kafka={dep.reads_from_kafka}{s3_info}"
863
+ )
864
+ else:
865
+ logger.info(f"⊗ No DLT table dependencies found in notebook")
866
+
867
+ # Check if we have anything to process
868
+ has_kafka = kafka_sources and len(kafka_sources) > 0
869
+ has_s3 = any(dep.reads_from_s3 for dep in dlt_dependencies)
870
+ has_tables = dlt_dependencies and len(dlt_dependencies) > 0
871
+
872
+ if not dlt_dependencies:
873
+ logger.warning(
874
+ f"⊗ Skipping lineage for this notebook - no DLT tables found"
875
+ )
876
+ continue
877
+
878
+ if not has_kafka and not has_s3:
879
+ logger.info(
880
+ f"⊗ No external sources (Kafka or S3) found in this notebook - only table-to-table lineage will be created"
881
+ )
882
+
883
+ logger.info(f"✓ Notebook has DLT tables - creating lineage...")
884
+ if has_kafka:
885
+ logger.info(f" Kafka sources: {len(kafka_sources)}")
886
+ if has_s3:
887
+ s3_count = sum(
888
+ len(dep.s3_locations)
889
+ for dep in dlt_dependencies
890
+ if dep.reads_from_s3
891
+ )
892
+ logger.info(f" S3 sources: {s3_count} location(s)")
893
+
894
+ # Create lineage edges based on dependencies
895
+ logger.info(f"\n⟳ Creating lineage edges...")
896
+ lineage_created = 0
897
+
898
+ # Step 1: Create Kafka topic -> DLT table lineage
899
+ # Build a map to identify which tables/views read from external sources (Kafka/S3)
900
+ external_sources_map = {}
901
+ for dep in dlt_dependencies:
902
+ if dep.reads_from_kafka or dep.reads_from_s3:
903
+ external_sources_map[dep.table_name] = True
904
+
905
+ for kafka_config in kafka_sources:
906
+ for topic_name in kafka_config.topics:
907
+ try:
908
+ logger.info(
909
+ f"\n 🔍 Processing Kafka topic: {topic_name}"
910
+ )
911
+
912
+ kafka_topic = self._find_kafka_topic(topic_name)
913
+ if not kafka_topic:
914
+ logger.warning(
915
+ f" ✗ Kafka topic '{topic_name}' not found in OpenMetadata"
916
+ )
917
+ continue
918
+
919
+ logger.info(
920
+ f" ✓ Topic found: {kafka_topic.fullyQualifiedName.root if hasattr(kafka_topic.fullyQualifiedName, 'root') else kafka_topic.fullyQualifiedName}"
921
+ )
922
+
923
+ # Find tables that read DIRECTLY from Kafka
924
+ # Only create Kafka -> table lineage for direct consumers
925
+ # Downstream tables get table -> table lineage in Step 2
926
+ for dep in dlt_dependencies:
927
+ if dep.reads_from_kafka:
928
+ logger.info(
929
+ f" 🔍 Processing table: {dep.table_name}"
930
+ )
931
+
932
+ target_table = self._find_dlt_table(
933
+ table_name=dep.table_name,
934
+ catalog=target_catalog,
935
+ schema=target_schema,
936
+ )
937
+
938
+ if target_table:
939
+ table_fqn = (
940
+ target_table.fullyQualifiedName.root
941
+ if hasattr(
942
+ target_table.fullyQualifiedName,
943
+ "root",
944
+ )
945
+ else target_table.fullyQualifiedName
946
+ )
947
+ logger.info(
948
+ f" ✅ Creating lineage: {topic_name} -> {table_fqn}"
949
+ )
950
+
951
+ yield Either(
952
+ right=AddLineageRequest(
953
+ edge=EntitiesEdge(
954
+ fromEntity=EntityReference(
955
+ id=kafka_topic.id,
956
+ type="topic",
957
+ ),
958
+ toEntity=EntityReference(
959
+ id=(
960
+ target_table.id.root
961
+ if hasattr(
962
+ target_table.id,
963
+ "root",
964
+ )
965
+ else target_table.id
966
+ ),
967
+ type="table",
968
+ ),
969
+ lineageDetails=LineageDetails(
970
+ pipeline=EntityReference(
971
+ id=pipeline_entity.id.root,
972
+ type="pipeline",
973
+ ),
974
+ source=LineageSource.PipelineLineage,
975
+ ),
976
+ )
977
+ )
978
+ )
979
+ lineage_created += 1
980
+ else:
981
+ logger.warning(
982
+ f" ✗ Table '{dep.table_name}' not found"
983
+ )
984
+
985
+ except Exception as exc:
986
+ logger.error(
987
+ f" ✗ Failed to process topic {topic_name}: {exc}"
988
+ )
989
+ logger.debug(traceback.format_exc())
990
+ continue
991
+
992
+ # Step 2: Create table-to-table lineage for downstream dependencies
993
+ for dep in dlt_dependencies:
994
+ if dep.depends_on:
995
+ for source_table_name in dep.depends_on:
996
+ try:
997
+ logger.info(
998
+ f"\n 🔍 Processing table dependency: {source_table_name} -> {dep.table_name}"
999
+ )
1000
+
1001
+ # Check if source is a view/table that reads from S3
1002
+ source_dep = next(
1003
+ (
1004
+ d
1005
+ for d in dlt_dependencies
1006
+ if d.table_name == source_table_name
1007
+ ),
1008
+ None,
1009
+ )
1010
+
1011
+ # If source reads from S3, create container → table lineage
1012
+ if (
1013
+ source_dep
1014
+ and source_dep.reads_from_s3
1015
+ and source_dep.s3_locations
1016
+ ):
1017
+ target_table = self._find_dlt_table(
1018
+ table_name=dep.table_name,
1019
+ catalog=target_catalog,
1020
+ schema=target_schema,
1021
+ )
1022
+
1023
+ if target_table:
1024
+ for s3_location in source_dep.s3_locations:
1025
+ logger.info(
1026
+ f" 🔍 Looking for S3 container: {s3_location}"
1027
+ )
1028
+ # Search for container by S3 path
1029
+ storage_location = s3_location.rstrip(
1030
+ "/"
1031
+ )
1032
+ container_entity = self.metadata.es_search_container_by_path(
1033
+ full_path=storage_location
1034
+ )
1035
+
1036
+ if (
1037
+ container_entity
1038
+ and container_entity[0]
1039
+ ):
1040
+ logger.info(
1041
+ f" ✅ Creating lineage: {container_entity[0].fullyQualifiedName.root if hasattr(container_entity[0].fullyQualifiedName, 'root') else container_entity[0].fullyQualifiedName} -> {target_table.fullyQualifiedName.root if hasattr(target_table.fullyQualifiedName, 'root') else target_table.fullyQualifiedName}"
1042
+ )
1043
+
1044
+ yield Either(
1045
+ right=AddLineageRequest(
1046
+ edge=EntitiesEdge(
1047
+ fromEntity=EntityReference(
1048
+ id=container_entity[
1049
+ 0
1050
+ ].id,
1051
+ type="container",
1052
+ ),
1053
+ toEntity=EntityReference(
1054
+ id=(
1055
+ target_table.id.root
1056
+ if hasattr(
1057
+ target_table.id,
1058
+ "root",
1059
+ )
1060
+ else target_table.id
1061
+ ),
1062
+ type="table",
1063
+ ),
1064
+ lineageDetails=LineageDetails(
1065
+ pipeline=EntityReference(
1066
+ id=pipeline_entity.id.root,
1067
+ type="pipeline",
1068
+ ),
1069
+ source=LineageSource.PipelineLineage,
1070
+ ),
1071
+ )
1072
+ )
1073
+ )
1074
+ lineage_created += 1
1075
+ else:
1076
+ logger.warning(
1077
+ f" ✗ S3 container not found for path: {storage_location}"
1078
+ )
1079
+ logger.info(
1080
+ f" Make sure the S3 container is ingested in OpenMetadata"
1081
+ )
1082
+ else:
1083
+ logger.warning(
1084
+ f" ✗ Target table '{dep.table_name}' not found"
1085
+ )
1086
+ continue
1087
+
1088
+ # Otherwise, create table → table lineage
1089
+ source_table = self._find_dlt_table(
1090
+ table_name=source_table_name,
1091
+ catalog=target_catalog,
1092
+ schema=target_schema,
1093
+ )
1094
+ target_table = self._find_dlt_table(
1095
+ table_name=dep.table_name,
1096
+ catalog=target_catalog,
1097
+ schema=target_schema,
1098
+ )
1099
+
1100
+ if source_table and target_table:
1101
+ source_fqn = (
1102
+ source_table.fullyQualifiedName.root
1103
+ if hasattr(
1104
+ source_table.fullyQualifiedName, "root"
1105
+ )
1106
+ else source_table.fullyQualifiedName
1107
+ )
1108
+ target_fqn = (
1109
+ target_table.fullyQualifiedName.root
1110
+ if hasattr(
1111
+ target_table.fullyQualifiedName, "root"
1112
+ )
1113
+ else target_table.fullyQualifiedName
1114
+ )
1115
+ logger.info(
1116
+ f" ✅ Creating lineage: {source_fqn} -> {target_fqn}"
1117
+ )
1118
+
1119
+ yield Either(
1120
+ right=AddLineageRequest(
1121
+ edge=EntitiesEdge(
1122
+ fromEntity=EntityReference(
1123
+ id=(
1124
+ source_table.id.root
1125
+ if hasattr(
1126
+ source_table.id, "root"
1127
+ )
1128
+ else source_table.id
1129
+ ),
1130
+ type="table",
1131
+ ),
1132
+ toEntity=EntityReference(
1133
+ id=(
1134
+ target_table.id.root
1135
+ if hasattr(
1136
+ target_table.id, "root"
1137
+ )
1138
+ else target_table.id
1139
+ ),
1140
+ type="table",
1141
+ ),
1142
+ lineageDetails=LineageDetails(
1143
+ pipeline=EntityReference(
1144
+ id=pipeline_entity.id.root,
1145
+ type="pipeline",
1146
+ ),
1147
+ source=LineageSource.PipelineLineage,
1148
+ ),
1149
+ )
1150
+ )
1151
+ )
1152
+ lineage_created += 1
1153
+ else:
1154
+ if not source_table:
1155
+ logger.warning(
1156
+ f" ✗ Source table '{source_table_name}' not found"
1157
+ )
1158
+ if not target_table:
1159
+ logger.warning(
1160
+ f" ✗ Target table '{dep.table_name}' not found"
1161
+ )
1162
+
1163
+ except Exception as exc:
1164
+ logger.error(
1165
+ f" ✗ Failed to process dependency {source_table_name} -> {dep.table_name}: {exc}"
1166
+ )
1167
+ logger.debug(traceback.format_exc())
1168
+ continue
1169
+
1170
+ logger.info(
1171
+ f"\n✓ Lineage edges created for this notebook: {lineage_created}"
1172
+ )
1173
+ except Exception as exc:
1174
+ logger.error(f"✗ Failed to process notebook {lib_path}: {exc}")
1175
+ logger.debug(traceback.format_exc())
1176
+ logger.info(f" Continuing with next notebook...")
1177
+ continue
1178
+
1179
+ logger.info("\n" + "=" * 80)
1180
+ logger.info(f"KAFKA LINEAGE EXTRACTION COMPLETED")
1181
+ logger.info(
1182
+ f"Pipeline: {pipeline_details.name if hasattr(pipeline_details, 'name') else 'N/A'}"
1183
+ )
1184
+ logger.info("=" * 80)
1185
+
1186
+ except Exception as exc:
1187
+ logger.error(f"✗ Unexpected error in Kafka lineage extraction: {exc}")
1188
+ logger.error(f" Job ID: {pipeline_details.job_id}")
1189
+ logger.error(
1190
+ f" Pipeline ID: {pipeline_details.pipeline_id if hasattr(pipeline_details, 'pipeline_id') else 'N/A'}"
1191
+ )
1192
+ logger.debug(traceback.format_exc())
1193
+ logger.info("=" * 80)
1194
+
299
1195
  def yield_pipeline_lineage_details(
300
1196
  self, pipeline_details: DataBrickPipelineDetails
301
1197
  ) -> Iterable[Either[AddLineageRequest]]:
@@ -311,85 +1207,115 @@ class DatabrickspipelineSource(PipelineServiceSource):
311
1207
  entity=Pipeline, fqn=pipeline_fqn
312
1208
  )
313
1209
 
1210
+ # Extract Kafka topic lineage from source code
1211
+ # Works automatically - no configuration required!
1212
+ yield from self._yield_kafka_lineage(pipeline_details, pipeline_entity)
1213
+
1214
+ if not pipeline_details.job_id:
1215
+ return
1216
+
314
1217
  table_lineage_list = self.client.get_table_lineage(
315
1218
  job_id=pipeline_details.job_id
316
1219
  )
1220
+ logger.debug(
1221
+ f"Processing pipeline lineage for job {pipeline_details.job_id}"
1222
+ )
317
1223
  if table_lineage_list:
318
1224
  for table_lineage in table_lineage_list:
319
1225
  source_table_full_name = table_lineage.get("source_table_full_name")
320
1226
  target_table_full_name = table_lineage.get("target_table_full_name")
321
- if source_table_full_name and target_table_full_name:
322
- source = fqn.split_table_name(source_table_full_name)
323
- target = fqn.split_table_name(target_table_full_name)
324
- for dbservicename in self.get_db_service_names() or ["*"]:
1227
+ if not (source_table_full_name and target_table_full_name):
1228
+ continue
325
1229
 
326
- from_entity = self.metadata.get_by_name(
1230
+ source = fqn.split_table_name(source_table_full_name)
1231
+ target = fqn.split_table_name(target_table_full_name)
1232
+ for dbservicename in self.get_db_service_names() or ["*"]:
1233
+
1234
+ # Build FQN for source table
1235
+ from_table_fqn = fqn.build(
1236
+ metadata=self.metadata,
1237
+ entity_type=Table,
1238
+ table_name=source.get("table"),
1239
+ database_name=source.get("database"),
1240
+ schema_name=source.get("database_schema"),
1241
+ service_name=dbservicename,
1242
+ )
1243
+
1244
+ # Check cache first, then fetch if not cached
1245
+ if from_table_fqn not in self._table_lookup_cache:
1246
+ self._table_lookup_cache[
1247
+ from_table_fqn
1248
+ ] = self.metadata.get_by_name(
327
1249
  entity=Table,
328
- fqn=fqn.build(
329
- metadata=self.metadata,
330
- entity_type=Table,
331
- table_name=source.get("table"),
332
- database_name=source.get("database"),
333
- schema_name=source.get("database_schema"),
334
- service_name=dbservicename,
335
- ),
1250
+ fqn=from_table_fqn,
336
1251
  )
337
1252
 
338
- if from_entity is None:
339
- continue
1253
+ from_entity = self._table_lookup_cache[from_table_fqn]
1254
+
1255
+ if from_entity is None:
1256
+ continue
340
1257
 
341
- to_entity = self.metadata.get_by_name(
1258
+ # Build FQN for target table
1259
+ to_table_fqn = fqn.build(
1260
+ metadata=self.metadata,
1261
+ entity_type=Table,
1262
+ table_name=target.get("table"),
1263
+ database_name=target.get("database"),
1264
+ schema_name=target.get("database_schema"),
1265
+ service_name=dbservicename,
1266
+ )
1267
+
1268
+ # Check cache first, then fetch if not cached
1269
+ if to_table_fqn not in self._table_lookup_cache:
1270
+ self._table_lookup_cache[
1271
+ to_table_fqn
1272
+ ] = self.metadata.get_by_name(
342
1273
  entity=Table,
343
- fqn=fqn.build(
344
- metadata=self.metadata,
345
- entity_type=Table,
346
- table_name=target.get("table"),
347
- database_name=target.get("database"),
348
- schema_name=target.get("database_schema"),
349
- service_name=dbservicename,
350
- ),
1274
+ fqn=to_table_fqn,
351
1275
  )
352
1276
 
353
- if to_entity is None:
354
- continue
1277
+ to_entity = self._table_lookup_cache[to_table_fqn]
355
1278
 
356
- processed_column_lineage = (
357
- self._process_and_validate_column_lineage(
358
- column_lineage=self.client.get_column_lineage(
359
- job_id=pipeline_details.job_id,
360
- TableKey=(
361
- source_table_full_name,
362
- target_table_full_name,
363
- ),
364
- ),
365
- from_entity=from_entity,
366
- to_entity=to_entity,
367
- )
368
- )
1279
+ if to_entity is None:
1280
+ continue
369
1281
 
370
- lineage_details = LineageDetails(
371
- pipeline=EntityReference(
372
- id=pipeline_entity.id.root, type="pipeline"
1282
+ processed_column_lineage = (
1283
+ self._process_and_validate_column_lineage(
1284
+ column_lineage=self.client.get_column_lineage(
1285
+ job_id=pipeline_details.job_id,
1286
+ TableKey=(
1287
+ source_table_full_name,
1288
+ target_table_full_name,
1289
+ ),
373
1290
  ),
374
- source=LineageSource.PipelineLineage,
375
- columnsLineage=processed_column_lineage,
1291
+ from_entity=from_entity,
1292
+ to_entity=to_entity,
376
1293
  )
1294
+ )
377
1295
 
378
- yield Either(
379
- right=AddLineageRequest(
380
- edge=EntitiesEdge(
381
- fromEntity=EntityReference(
382
- id=from_entity.id,
383
- type="table",
384
- ),
385
- toEntity=EntityReference(
386
- id=to_entity.id,
387
- type="table",
388
- ),
389
- lineageDetails=lineage_details,
390
- )
1296
+ lineage_details = LineageDetails(
1297
+ pipeline=EntityReference(
1298
+ id=pipeline_entity.id.root, type="pipeline"
1299
+ ),
1300
+ source=LineageSource.PipelineLineage,
1301
+ columnsLineage=processed_column_lineage,
1302
+ )
1303
+
1304
+ yield Either(
1305
+ right=AddLineageRequest(
1306
+ edge=EntitiesEdge(
1307
+ fromEntity=EntityReference(
1308
+ id=from_entity.id,
1309
+ type="table",
1310
+ ),
1311
+ toEntity=EntityReference(
1312
+ id=to_entity.id,
1313
+ type="table",
1314
+ ),
1315
+ lineageDetails=lineage_details,
391
1316
  )
392
1317
  )
1318
+ )
393
1319
 
394
1320
  else:
395
1321
  logger.debug(
@@ -402,8 +1328,11 @@ class DatabrickspipelineSource(PipelineServiceSource):
402
1328
  except Exception as exc:
403
1329
  yield Either(
404
1330
  left=StackTraceError(
405
- name=pipeline_details.job_id,
1331
+ name=pipeline_details.id,
406
1332
  error=f"Wild error ingesting pipeline lineage {pipeline_details} - {exc}",
407
1333
  stackTrace=traceback.format_exc(),
408
1334
  )
409
1335
  )
1336
+ finally:
1337
+ # Clear pipeline-specific caches to free memory
1338
+ logger.debug("Clearing table lookup caches for pipeline")