openmetadata-ingestion 1.2.4.0__py3-none-any.whl → 1.3.2.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of openmetadata-ingestion might be problematic. Click here for more details.

Files changed (885) hide show
  1. airflow_provider_openmetadata/lineage/runner.py +44 -5
  2. airflow_provider_openmetadata/lineage/status.py +1 -1
  3. metadata/antlr/split_listener.py +1 -4
  4. metadata/applications/auto_tagger.py +212 -0
  5. metadata/cli/app.py +47 -0
  6. metadata/cli/db_dump.py +7 -3
  7. metadata/clients/aws_client.py +4 -0
  8. metadata/clients/azure_client.py +85 -0
  9. metadata/clients/domo_client.py +0 -2
  10. metadata/cmd.py +24 -13
  11. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +40 -48
  12. metadata/data_insight/processor/reports/data_processor.py +1 -0
  13. metadata/data_insight/processor/reports/entity_report_data_processor.py +8 -2
  14. metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +4 -0
  15. metadata/data_insight/producer/cost_analysis_producer.py +78 -14
  16. metadata/data_insight/producer/entity_producer.py +1 -1
  17. metadata/data_insight/producer/producer_interface.py +1 -1
  18. metadata/data_insight/producer/web_analytics_producer.py +1 -1
  19. metadata/data_insight/source/metadata.py +21 -5
  20. metadata/data_quality/interface/sqlalchemy/databricks/test_suite_interface.py +29 -0
  21. metadata/data_quality/interface/sqlalchemy/snowflake/test_suite_interface.py +29 -0
  22. metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +6 -6
  23. metadata/data_quality/interface/sqlalchemy/unity_catalog/test_suite_interface.py +35 -0
  24. metadata/data_quality/interface/test_suite_interface_factory.py +40 -0
  25. metadata/data_quality/processor/test_case_runner.py +17 -8
  26. metadata/data_quality/source/test_suite.py +10 -4
  27. metadata/data_quality/validations/base_test_handler.py +21 -17
  28. metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +38 -1
  29. metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +36 -1
  30. metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +27 -0
  31. metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +27 -0
  32. metadata/data_quality/validations/column/base/columnValuesToBeNotNull.py +27 -0
  33. metadata/data_quality/validations/column/base/columnValuesToBeUnique.py +15 -0
  34. metadata/data_quality/validations/column/base/columnValuesToMatchRegex.py +27 -0
  35. metadata/data_quality/validations/column/base/columnValuesToNotMatchRegex.py +27 -0
  36. metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +23 -0
  37. metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +23 -0
  38. metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +11 -0
  39. metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +11 -0
  40. metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +11 -0
  41. metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +11 -0
  42. metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +11 -0
  43. metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +27 -0
  44. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +23 -0
  45. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +11 -0
  46. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +11 -0
  47. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +11 -0
  48. metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +11 -0
  49. metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +11 -0
  50. metadata/data_quality/validations/mixins/pandas_validator_mixin.py +13 -2
  51. metadata/data_quality/validations/mixins/sqa_validator_mixin.py +40 -0
  52. metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
  53. metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
  54. metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
  55. metadata/examples/workflows/bigtable.yaml +32 -0
  56. metadata/examples/workflows/databricks.yaml +0 -1
  57. metadata/examples/workflows/datalake_azure_default.yaml +29 -0
  58. metadata/examples/workflows/mongodb.yaml +4 -2
  59. metadata/examples/workflows/mstr.yaml +24 -0
  60. metadata/examples/workflows/sas.yaml +28 -0
  61. metadata/examples/workflows/unity_catalog.yaml +27 -0
  62. metadata/examples/workflows/unity_catalog_lineage.yaml +18 -0
  63. metadata/examples/workflows/unity_catalog_usage.yaml +35 -0
  64. metadata/generated/antlr/EntityLinkLexer.py +425 -292
  65. metadata/generated/antlr/EntityLinkListener.py +12 -12
  66. metadata/generated/antlr/EntityLinkParser.py +228 -103
  67. metadata/generated/schema/analytics/__init__.py +1 -1
  68. metadata/generated/schema/analytics/basic.py +1 -1
  69. metadata/generated/schema/analytics/reportData.py +1 -1
  70. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  71. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  72. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  73. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  74. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  75. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  76. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  77. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  78. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  79. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  80. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  81. metadata/generated/schema/api/__init__.py +1 -1
  82. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  83. metadata/generated/schema/api/analytics/__init__.py +1 -1
  84. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  85. metadata/generated/schema/api/automations/__init__.py +1 -1
  86. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  87. metadata/generated/schema/api/bulkAssets.py +1 -1
  88. metadata/generated/schema/api/classification/__init__.py +1 -1
  89. metadata/generated/schema/api/classification/createClassification.py +1 -1
  90. metadata/generated/schema/api/classification/createTag.py +1 -1
  91. metadata/generated/schema/api/classification/loadTags.py +1 -1
  92. metadata/generated/schema/api/createBot.py +2 -3
  93. metadata/generated/schema/api/createEventPublisherJob.py +2 -2
  94. metadata/generated/schema/api/createType.py +1 -1
  95. metadata/generated/schema/api/data/__init__.py +1 -1
  96. metadata/generated/schema/api/data/createChart.py +1 -1
  97. metadata/generated/schema/api/data/createContainer.py +2 -2
  98. metadata/generated/schema/api/data/createCustomProperty.py +7 -12
  99. metadata/generated/schema/api/data/createDashboard.py +1 -1
  100. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  101. metadata/generated/schema/api/data/createDatabase.py +2 -3
  102. metadata/generated/schema/api/data/createDatabaseSchema.py +2 -3
  103. metadata/generated/schema/api/data/createGlossary.py +2 -3
  104. metadata/generated/schema/api/data/createGlossaryTerm.py +2 -3
  105. metadata/generated/schema/api/data/createMlModel.py +1 -1
  106. metadata/generated/schema/api/data/createPipeline.py +2 -2
  107. metadata/generated/schema/api/data/createQuery.py +2 -2
  108. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  109. metadata/generated/schema/api/data/createStoredProcedure.py +2 -4
  110. metadata/generated/schema/api/data/createTable.py +2 -2
  111. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  112. metadata/generated/schema/api/data/createTopic.py +1 -1
  113. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  114. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  115. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  116. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  117. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  118. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  119. metadata/generated/schema/api/docStore/__init__.py +1 -1
  120. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  121. metadata/generated/schema/api/domains/__init__.py +1 -1
  122. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  123. metadata/generated/schema/api/domains/createDomain.py +1 -1
  124. metadata/generated/schema/api/feed/__init__.py +1 -1
  125. metadata/generated/schema/api/feed/closeTask.py +8 -1
  126. metadata/generated/schema/api/feed/createPost.py +1 -1
  127. metadata/generated/schema/api/feed/createSuggestion.py +30 -0
  128. metadata/generated/schema/api/feed/createThread.py +5 -1
  129. metadata/generated/schema/api/feed/resolveTask.py +12 -1
  130. metadata/generated/schema/api/feed/threadCount.py +18 -14
  131. metadata/generated/schema/api/lineage/__init__.py +1 -1
  132. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  133. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  134. metadata/generated/schema/api/policies/__init__.py +1 -1
  135. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  136. metadata/generated/schema/api/services/__init__.py +1 -1
  137. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  138. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  139. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  140. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  141. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  142. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  143. metadata/generated/schema/api/services/createSearchService.py +1 -1
  144. metadata/generated/schema/api/services/createStorageService.py +1 -1
  145. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  146. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  147. metadata/generated/schema/api/setOwner.py +1 -1
  148. metadata/generated/schema/api/teams/__init__.py +1 -1
  149. metadata/generated/schema/api/teams/createPersona.py +1 -1
  150. metadata/generated/schema/api/teams/createRole.py +2 -3
  151. metadata/generated/schema/api/teams/createTeam.py +1 -1
  152. metadata/generated/schema/api/teams/createUser.py +2 -2
  153. metadata/generated/schema/api/tests/__init__.py +1 -1
  154. metadata/generated/schema/api/tests/createCustomMetric.py +4 -2
  155. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  156. metadata/generated/schema/api/tests/createTestCase.py +4 -1
  157. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +31 -0
  158. metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
  159. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  160. metadata/generated/schema/api/voteRequest.py +1 -1
  161. metadata/generated/schema/auth/__init__.py +1 -1
  162. metadata/generated/schema/auth/basicAuth.py +1 -1
  163. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  164. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  165. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  166. metadata/generated/schema/auth/emailRequest.py +1 -1
  167. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  168. metadata/generated/schema/auth/generateToken.py +1 -1
  169. metadata/generated/schema/auth/jwtAuth.py +1 -1
  170. metadata/generated/schema/auth/loginRequest.py +1 -1
  171. metadata/generated/schema/auth/logoutRequest.py +1 -1
  172. metadata/generated/schema/auth/passwordResetRequest.py +3 -3
  173. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  174. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  175. metadata/generated/schema/auth/refreshToken.py +1 -1
  176. metadata/generated/schema/auth/registrationRequest.py +2 -2
  177. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  178. metadata/generated/schema/auth/revokeToken.py +1 -1
  179. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  180. metadata/generated/schema/auth/ssoAuth.py +1 -1
  181. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  182. metadata/generated/schema/configuration/__init__.py +1 -1
  183. metadata/generated/schema/configuration/appsPrivateConfiguration.py +32 -0
  184. metadata/generated/schema/configuration/authConfig.py +1 -1
  185. metadata/generated/schema/configuration/authenticationConfiguration.py +13 -2
  186. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  187. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  188. metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
  189. metadata/generated/schema/configuration/elasticSearchConfiguration.py +7 -1
  190. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  191. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  192. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  193. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  194. metadata/generated/schema/configuration/ldapConfiguration.py +28 -2
  195. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  196. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  197. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  198. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  199. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  200. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  201. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  202. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  203. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  204. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  205. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  206. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  207. metadata/generated/schema/dataInsight/__init__.py +1 -1
  208. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  209. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  210. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  211. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  212. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  213. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  214. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  215. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  216. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  217. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  218. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  219. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  220. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  221. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  222. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  223. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  224. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  225. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  226. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  227. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  228. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  229. metadata/generated/schema/email/__init__.py +1 -1
  230. metadata/generated/schema/email/emailRequest.py +1 -1
  231. metadata/generated/schema/email/smtpSettings.py +1 -1
  232. metadata/generated/schema/entity/__init__.py +1 -1
  233. metadata/generated/schema/entity/applications/__init__.py +1 -1
  234. metadata/generated/schema/entity/applications/app.py +24 -5
  235. metadata/generated/schema/entity/applications/appRunRecord.py +2 -7
  236. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  237. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +30 -0
  238. metadata/generated/schema/entity/{services/connections/database/mongoDB → applications/configuration/external}/__init__.py +1 -1
  239. metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +28 -0
  240. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +46 -0
  241. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +3 -0
  242. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +14 -0
  243. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +27 -0
  244. metadata/generated/schema/entity/applications/configuration/{searchIndexingApp.py → internal/searchIndexingAppConfig.py} +14 -4
  245. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
  246. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
  247. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  248. metadata/generated/schema/entity/applications/jobStatus.py +3 -3
  249. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  250. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  251. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +12 -3
  252. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +12 -3
  253. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  254. metadata/generated/schema/entity/automations/__init__.py +1 -1
  255. metadata/generated/schema/entity/automations/testServiceConnection.py +2 -2
  256. metadata/generated/schema/entity/automations/workflow.py +1 -1
  257. metadata/generated/schema/entity/bot.py +2 -3
  258. metadata/generated/schema/entity/classification/__init__.py +1 -1
  259. metadata/generated/schema/entity/classification/classification.py +1 -1
  260. metadata/generated/schema/entity/classification/tag.py +2 -2
  261. metadata/generated/schema/entity/data/__init__.py +1 -1
  262. metadata/generated/schema/entity/data/chart.py +1 -1
  263. metadata/generated/schema/entity/data/container.py +4 -9
  264. metadata/generated/schema/entity/data/dashboard.py +1 -1
  265. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  266. metadata/generated/schema/entity/data/database.py +4 -8
  267. metadata/generated/schema/entity/data/databaseSchema.py +2 -8
  268. metadata/generated/schema/entity/data/glossary.py +1 -1
  269. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  270. metadata/generated/schema/entity/data/metrics.py +1 -1
  271. metadata/generated/schema/entity/data/mlmodel.py +2 -2
  272. metadata/generated/schema/entity/data/pipeline.py +6 -9
  273. metadata/generated/schema/entity/data/query.py +2 -2
  274. metadata/generated/schema/entity/data/report.py +1 -1
  275. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  276. metadata/generated/schema/entity/data/storedProcedure.py +3 -9
  277. metadata/generated/schema/entity/data/table.py +18 -12
  278. metadata/generated/schema/entity/data/topic.py +1 -1
  279. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  280. metadata/generated/schema/entity/docStore/document.py +1 -1
  281. metadata/generated/schema/entity/domains/__init__.py +1 -1
  282. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  283. metadata/generated/schema/entity/domains/domain.py +1 -1
  284. metadata/generated/schema/entity/events/__init__.py +1 -1
  285. metadata/generated/schema/entity/events/webhook.py +6 -3
  286. metadata/generated/schema/entity/feed/__init__.py +1 -1
  287. metadata/generated/schema/entity/feed/suggestion.py +61 -0
  288. metadata/generated/schema/entity/feed/thread.py +17 -1
  289. metadata/generated/schema/entity/policies/__init__.py +1 -1
  290. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  291. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  292. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  293. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  294. metadata/generated/schema/entity/policies/filters.py +2 -5
  295. metadata/generated/schema/entity/policies/policy.py +1 -1
  296. metadata/generated/schema/entity/services/__init__.py +1 -1
  297. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  298. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  299. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  300. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  301. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  302. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  303. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  304. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  310. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +46 -0
  311. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +2 -2
  313. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  318. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +2 -2
  319. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +35 -2
  320. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
  321. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
  322. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +2 -2
  323. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  324. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +20 -0
  325. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  326. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  327. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  328. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +6 -1
  329. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  330. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +2 -7
  331. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  332. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  333. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  334. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  335. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +2 -2
  336. metadata/generated/schema/entity/services/connections/database/db2Connection.py +3 -2
  337. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +86 -0
  340. metadata/generated/schema/entity/services/connections/database/druidConnection.py +2 -2
  341. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  343. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -2
  344. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
  345. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +3 -0
  346. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +17 -0
  347. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +16 -0
  348. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +23 -0
  349. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +43 -0
  350. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +20 -0
  351. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +69 -0
  352. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +35 -0
  353. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +2 -2
  354. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +2 -2
  355. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +24 -14
  356. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -2
  357. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +8 -4
  358. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
  359. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +9 -7
  360. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +8 -4
  361. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +2 -2
  362. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +2 -2
  363. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +3 -0
  365. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +20 -0
  366. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +36 -0
  367. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +7 -41
  368. metadata/generated/schema/entity/services/connections/database/sasConnection.py +48 -0
  369. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +2 -2
  370. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
  371. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +2 -2
  372. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +2 -2
  373. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +90 -0
  374. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +2 -2
  375. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  376. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  377. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +14 -2
  378. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  379. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  380. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +14 -2
  381. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  382. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  383. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  384. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  385. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  386. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
  387. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +5 -20
  388. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  389. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  390. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  391. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  392. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  393. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  394. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  395. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +2 -8
  396. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  397. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  398. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  399. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  400. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  401. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  402. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  403. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  404. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +23 -0
  405. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  406. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  407. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  408. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  409. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  410. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  411. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  412. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  413. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  414. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  415. metadata/generated/schema/entity/services/connections/storage/{adlsConection.py → adlsConnection.py} +2 -2
  416. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  417. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  418. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  419. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  420. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  421. metadata/generated/schema/entity/services/dashboardService.py +4 -1
  422. metadata/generated/schema/entity/services/databaseService.py +16 -1
  423. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  424. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +27 -22
  425. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  426. metadata/generated/schema/entity/services/ingestionPipelines/status.py +56 -0
  427. metadata/generated/schema/entity/services/messagingService.py +1 -1
  428. metadata/generated/schema/entity/services/metadataService.py +1 -1
  429. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  430. metadata/generated/schema/entity/services/pipelineService.py +4 -1
  431. metadata/generated/schema/entity/services/searchService.py +1 -1
  432. metadata/generated/schema/entity/services/serviceType.py +1 -1
  433. metadata/generated/schema/entity/services/storageService.py +10 -3
  434. metadata/generated/schema/entity/teams/__init__.py +1 -1
  435. metadata/generated/schema/entity/teams/persona.py +1 -1
  436. metadata/generated/schema/entity/teams/role.py +2 -6
  437. metadata/generated/schema/entity/teams/team.py +1 -1
  438. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  439. metadata/generated/schema/entity/teams/user.py +3 -10
  440. metadata/generated/schema/entity/type.py +4 -19
  441. metadata/generated/schema/entity/utils/__init__.py +1 -1
  442. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  443. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  444. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  445. metadata/generated/schema/events/__init__.py +1 -1
  446. metadata/generated/schema/events/alertMetrics.py +27 -0
  447. metadata/generated/schema/events/api/__init__.py +1 -1
  448. metadata/generated/schema/events/api/createEventSubscription.py +14 -12
  449. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  450. metadata/generated/schema/events/eventFilterRule.py +13 -2
  451. metadata/generated/schema/events/eventSubscription.py +91 -49
  452. metadata/generated/schema/events/eventSubscriptionOffset.py +21 -0
  453. metadata/generated/schema/events/failedEvent.py +26 -0
  454. metadata/generated/schema/events/filterResourceDescriptor.py +27 -0
  455. metadata/generated/schema/events/subscriptionResourceDescriptor.py +11 -10
  456. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  457. metadata/generated/schema/metadataIngestion/application.py +40 -0
  458. metadata/generated/schema/metadataIngestion/applicationPipeline.py +15 -6
  459. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  460. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  461. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
  462. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +11 -1
  463. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  464. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  465. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  466. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  467. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
  468. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  469. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  470. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
  471. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  472. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  473. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
  474. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  475. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  476. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  477. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  478. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  479. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  480. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  481. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  482. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  483. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +2 -2
  484. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +24 -0
  485. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  486. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  487. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  488. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +8 -1
  489. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  490. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  491. metadata/generated/schema/monitoring/__init__.py +1 -1
  492. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  493. metadata/generated/schema/security/__init__.py +1 -1
  494. metadata/generated/schema/security/client/__init__.py +1 -1
  495. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  496. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  497. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  498. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  499. metadata/generated/schema/security/client/oidcClientConfig.py +46 -0
  500. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  501. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  502. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  503. metadata/generated/schema/security/credentials/__init__.py +1 -1
  504. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  505. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  506. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  507. metadata/generated/schema/security/credentials/azureCredentials.py +21 -9
  508. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  509. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  510. metadata/generated/schema/security/credentials/gcpCredentials.py +7 -3
  511. metadata/generated/schema/security/credentials/gcpExternalAccount.py +37 -0
  512. metadata/generated/schema/security/credentials/gcpValues.py +2 -2
  513. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  514. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  515. metadata/generated/schema/security/secrets/__init__.py +1 -1
  516. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  517. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +14 -4
  518. metadata/generated/schema/security/secrets/secretsManagerProvider.py +4 -2
  519. metadata/generated/schema/security/securityConfiguration.py +1 -1
  520. metadata/generated/schema/security/ssl/__init__.py +1 -1
  521. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  522. metadata/generated/schema/security/ssl/verifySSLConfig.py +4 -1
  523. metadata/generated/schema/settings/__init__.py +1 -1
  524. metadata/generated/schema/settings/settings.py +1 -1
  525. metadata/generated/schema/system/__init__.py +1 -1
  526. metadata/generated/schema/system/entityError.py +17 -0
  527. metadata/generated/schema/system/eventPublisherJob.py +5 -19
  528. metadata/generated/schema/system/indexingError.py +34 -0
  529. metadata/generated/schema/system/ui/__init__.py +1 -1
  530. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  531. metadata/generated/schema/system/ui/page.py +1 -1
  532. metadata/generated/schema/system/validationResponse.py +43 -0
  533. metadata/generated/schema/tests/__init__.py +1 -1
  534. metadata/generated/schema/tests/assigned.py +18 -0
  535. metadata/generated/schema/tests/basic.py +17 -39
  536. metadata/generated/schema/tests/customMetric.py +4 -2
  537. metadata/generated/schema/tests/resolved.py +35 -0
  538. metadata/generated/schema/tests/testCase.py +11 -2
  539. metadata/generated/schema/tests/testCaseResolutionStatus.py +63 -0
  540. metadata/generated/schema/tests/testDefinition.py +6 -1
  541. metadata/generated/schema/tests/testSuite.py +1 -1
  542. metadata/generated/schema/type/__init__.py +1 -1
  543. metadata/generated/schema/type/auditLog.py +1 -1
  544. metadata/generated/schema/type/basic.py +10 -6
  545. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  546. metadata/generated/schema/type/changeEvent.py +5 -75
  547. metadata/generated/schema/type/changeEventType.py +29 -0
  548. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  549. metadata/generated/schema/type/csvDocumentation.py +1 -1
  550. metadata/generated/schema/type/csvErrorType.py +1 -1
  551. metadata/generated/schema/type/csvFile.py +1 -1
  552. metadata/generated/schema/type/csvImportResult.py +1 -1
  553. metadata/generated/schema/type/customProperties/__init__.py +3 -0
  554. metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
  555. metadata/generated/schema/type/customProperty.py +52 -0
  556. metadata/generated/schema/type/dailyCount.py +1 -1
  557. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  558. metadata/generated/schema/type/entityHistory.py +1 -1
  559. metadata/generated/schema/type/entityLineage.py +2 -1
  560. metadata/generated/schema/type/entityReference.py +5 -1
  561. metadata/generated/schema/type/entityReferenceList.py +1 -1
  562. metadata/generated/schema/type/entityRelationship.py +1 -1
  563. metadata/generated/schema/type/entityUsage.py +1 -1
  564. metadata/generated/schema/type/filterPattern.py +1 -1
  565. metadata/generated/schema/type/function.py +7 -6
  566. metadata/generated/schema/type/include.py +1 -1
  567. metadata/generated/schema/type/jdbcConnection.py +1 -1
  568. metadata/generated/schema/type/lifeCycle.py +1 -1
  569. metadata/generated/schema/type/paging.py +1 -1
  570. metadata/generated/schema/type/profile.py +1 -1
  571. metadata/generated/schema/type/queryParserData.py +2 -2
  572. metadata/generated/schema/type/reaction.py +1 -1
  573. metadata/generated/schema/type/schedule.py +1 -1
  574. metadata/generated/schema/type/schema.py +1 -1
  575. metadata/generated/schema/type/tableQuery.py +2 -2
  576. metadata/generated/schema/type/tableUsageCount.py +1 -1
  577. metadata/generated/schema/type/tagLabel.py +1 -1
  578. metadata/generated/schema/type/usageDetails.py +1 -1
  579. metadata/generated/schema/type/usageRequest.py +1 -1
  580. metadata/generated/schema/type/votes.py +1 -1
  581. metadata/great_expectations/action.py +12 -20
  582. metadata/ingestion/api/delete.py +5 -2
  583. metadata/ingestion/api/models.py +4 -10
  584. metadata/ingestion/api/parser.py +3 -37
  585. metadata/ingestion/api/status.py +15 -4
  586. metadata/ingestion/api/step.py +39 -6
  587. metadata/ingestion/api/steps.py +34 -1
  588. metadata/ingestion/api/topology_runner.py +117 -168
  589. metadata/ingestion/bulksink/metadata_usage.py +11 -5
  590. metadata/ingestion/lineage/models.py +4 -0
  591. metadata/ingestion/lineage/parser.py +28 -12
  592. metadata/ingestion/lineage/sql_lineage.py +9 -17
  593. metadata/ingestion/models/custom_properties.py +0 -1
  594. metadata/ingestion/models/custom_pydantic.py +4 -2
  595. metadata/ingestion/models/lf_tags_model.py +33 -0
  596. metadata/ingestion/models/patch_request.py +160 -2
  597. metadata/ingestion/models/tests_data.py +9 -0
  598. metadata/ingestion/models/topology.py +177 -60
  599. metadata/ingestion/ometa/auth_provider.py +0 -349
  600. metadata/ingestion/ometa/client.py +12 -3
  601. metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
  602. metadata/ingestion/ometa/mixins/es_mixin.py +17 -0
  603. metadata/ingestion/ometa/mixins/patch_mixin.py +21 -72
  604. metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
  605. metadata/ingestion/ometa/mixins/table_mixin.py +18 -0
  606. metadata/ingestion/ometa/mixins/tests_mixin.py +24 -3
  607. metadata/ingestion/ometa/mixins/user_mixin.py +117 -22
  608. metadata/ingestion/ometa/ometa_api.py +19 -26
  609. metadata/ingestion/ometa/routes.py +7 -0
  610. metadata/ingestion/processor/query_parser.py +9 -2
  611. metadata/ingestion/sink/metadata_rest.py +29 -8
  612. metadata/ingestion/source/dashboard/dashboard_service.py +38 -61
  613. metadata/ingestion/source/dashboard/domodashboard/metadata.py +13 -14
  614. metadata/ingestion/source/dashboard/lightdash/metadata.py +2 -1
  615. metadata/ingestion/source/dashboard/looker/metadata.py +41 -29
  616. metadata/ingestion/source/dashboard/looker/utils.py +4 -2
  617. metadata/ingestion/source/dashboard/metabase/client.py +4 -0
  618. metadata/ingestion/source/dashboard/metabase/metadata.py +28 -10
  619. metadata/ingestion/source/dashboard/metabase/models.py +2 -2
  620. metadata/ingestion/source/dashboard/mode/client.py +10 -23
  621. metadata/ingestion/source/dashboard/mode/connection.py +6 -1
  622. metadata/ingestion/source/dashboard/mode/metadata.py +8 -4
  623. metadata/ingestion/source/dashboard/mstr/client.py +208 -0
  624. metadata/ingestion/source/dashboard/mstr/connection.py +53 -0
  625. metadata/ingestion/source/dashboard/mstr/metadata.py +182 -0
  626. metadata/ingestion/source/dashboard/mstr/models.py +144 -0
  627. metadata/ingestion/source/dashboard/powerbi/client.py +4 -1
  628. metadata/ingestion/source/dashboard/powerbi/metadata.py +15 -10
  629. metadata/ingestion/source/dashboard/qliksense/metadata.py +11 -7
  630. metadata/ingestion/source/dashboard/quicksight/metadata.py +9 -5
  631. metadata/ingestion/source/dashboard/redash/metadata.py +23 -14
  632. metadata/ingestion/source/dashboard/superset/api_source.py +11 -8
  633. metadata/ingestion/source/dashboard/superset/client.py +16 -9
  634. metadata/ingestion/source/dashboard/superset/connection.py +3 -3
  635. metadata/ingestion/source/dashboard/superset/db_source.py +14 -11
  636. metadata/ingestion/source/dashboard/superset/mixin.py +22 -18
  637. metadata/ingestion/source/dashboard/superset/queries.py +1 -1
  638. metadata/ingestion/source/dashboard/tableau/client.py +91 -11
  639. metadata/ingestion/source/dashboard/tableau/connection.py +10 -1
  640. metadata/ingestion/source/dashboard/tableau/metadata.py +76 -70
  641. metadata/ingestion/source/dashboard/tableau/models.py +0 -8
  642. metadata/ingestion/source/dashboard/tableau/queries.py +5 -5
  643. metadata/ingestion/source/database/athena/client.py +80 -0
  644. metadata/ingestion/source/database/athena/connection.py +7 -0
  645. metadata/ingestion/source/database/athena/metadata.py +161 -19
  646. metadata/ingestion/source/database/azuresql/connection.py +21 -3
  647. metadata/ingestion/source/database/azuresql/metadata.py +0 -1
  648. metadata/ingestion/source/database/bigquery/connection.py +24 -3
  649. metadata/ingestion/source/database/bigquery/helper.py +68 -1
  650. metadata/ingestion/source/database/bigquery/metadata.py +49 -28
  651. metadata/ingestion/source/database/bigquery/queries.py +33 -4
  652. metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
  653. metadata/ingestion/source/database/bigquery/usage.py +1 -3
  654. metadata/ingestion/source/database/bigtable/client.py +62 -0
  655. metadata/ingestion/source/database/bigtable/connection.py +116 -0
  656. metadata/ingestion/source/database/bigtable/metadata.py +224 -0
  657. metadata/ingestion/source/database/bigtable/models.py +60 -0
  658. metadata/ingestion/source/database/column_helpers.py +0 -10
  659. metadata/ingestion/source/database/column_type_parser.py +11 -5
  660. metadata/ingestion/source/database/common_db_source.py +33 -8
  661. metadata/ingestion/source/database/common_nosql_source.py +27 -6
  662. metadata/ingestion/source/database/database_service.py +89 -7
  663. metadata/ingestion/source/database/databricks/client.py +55 -103
  664. metadata/ingestion/source/database/databricks/connection.py +16 -55
  665. metadata/ingestion/source/database/databricks/lineage.py +29 -26
  666. metadata/ingestion/source/database/databricks/metadata.py +534 -11
  667. metadata/ingestion/source/database/databricks/queries.py +27 -0
  668. metadata/ingestion/source/database/databricks/query_parser.py +5 -1
  669. metadata/ingestion/source/database/databricks/usage.py +3 -3
  670. metadata/ingestion/source/database/datalake/connection.py +33 -18
  671. metadata/ingestion/source/database/datalake/metadata.py +113 -27
  672. metadata/ingestion/source/database/dbt/dbt_config.py +7 -14
  673. metadata/ingestion/source/database/dbt/dbt_service.py +10 -14
  674. metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
  675. metadata/ingestion/source/database/dbt/metadata.py +27 -53
  676. metadata/ingestion/source/database/deltalake/metadata.py +6 -3
  677. metadata/ingestion/source/database/domodatabase/metadata.py +7 -6
  678. metadata/ingestion/source/database/doris/connection.py +72 -0
  679. metadata/ingestion/source/database/doris/metadata.py +315 -0
  680. metadata/ingestion/source/database/doris/queries.py +54 -0
  681. metadata/ingestion/source/database/doris/utils.py +64 -0
  682. metadata/ingestion/source/database/extended_sample_data.py +532 -0
  683. metadata/ingestion/source/database/glue/metadata.py +8 -5
  684. metadata/ingestion/source/database/hive/connection.py +0 -2
  685. metadata/ingestion/source/database/hive/utils.py +3 -0
  686. metadata/ingestion/source/database/iceberg/catalog/__init__.py +65 -0
  687. metadata/ingestion/source/database/iceberg/catalog/base.py +40 -0
  688. metadata/ingestion/source/database/iceberg/catalog/dynamodb.py +102 -0
  689. metadata/ingestion/source/database/iceberg/catalog/glue.py +88 -0
  690. metadata/ingestion/source/database/iceberg/catalog/hive.py +51 -0
  691. metadata/ingestion/source/database/iceberg/catalog/rest.py +84 -0
  692. metadata/ingestion/source/database/iceberg/connection.py +68 -0
  693. metadata/ingestion/source/database/iceberg/fs/__init__.py +52 -0
  694. metadata/ingestion/source/database/iceberg/fs/azure.py +44 -0
  695. metadata/ingestion/source/database/iceberg/fs/base.py +30 -0
  696. metadata/ingestion/source/database/iceberg/fs/s3.py +77 -0
  697. metadata/ingestion/source/database/iceberg/helper.py +124 -0
  698. metadata/ingestion/source/database/iceberg/metadata.py +311 -0
  699. metadata/ingestion/source/database/iceberg/models.py +66 -0
  700. metadata/ingestion/source/database/life_cycle_query_mixin.py +72 -3
  701. metadata/ingestion/source/database/mongodb/connection.py +1 -5
  702. metadata/ingestion/source/database/mssql/lineage.py +3 -0
  703. metadata/ingestion/source/database/mssql/metadata.py +108 -4
  704. metadata/ingestion/source/database/mssql/models.py +30 -0
  705. metadata/ingestion/source/database/mssql/queries.py +178 -1
  706. metadata/ingestion/source/database/mssql/usage.py +5 -1
  707. metadata/ingestion/source/database/mssql/utils.py +207 -4
  708. metadata/ingestion/source/database/mysql/connection.py +14 -0
  709. metadata/ingestion/source/database/mysql/metadata.py +0 -2
  710. metadata/ingestion/source/database/oracle/metadata.py +108 -2
  711. metadata/ingestion/source/database/oracle/models.py +30 -0
  712. metadata/ingestion/source/database/oracle/queries.py +99 -18
  713. metadata/ingestion/source/database/oracle/utils.py +0 -1
  714. metadata/ingestion/source/database/postgres/connection.py +15 -0
  715. metadata/ingestion/source/database/postgres/lineage.py +32 -14
  716. metadata/ingestion/source/database/postgres/metadata.py +15 -7
  717. metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
  718. metadata/ingestion/source/database/postgres/queries.py +4 -2
  719. metadata/ingestion/source/database/postgres/query_parser.py +4 -72
  720. metadata/ingestion/source/database/postgres/usage.py +41 -0
  721. metadata/ingestion/source/database/postgres/utils.py +34 -0
  722. metadata/ingestion/source/database/query_parser_source.py +8 -2
  723. metadata/ingestion/source/database/redshift/metadata.py +14 -4
  724. metadata/ingestion/source/database/redshift/queries.py +10 -4
  725. metadata/ingestion/source/database/redshift/query_parser.py +16 -0
  726. metadata/ingestion/source/database/redshift/usage.py +0 -2
  727. metadata/ingestion/source/database/salesforce/metadata.py +32 -3
  728. metadata/ingestion/source/database/sample_data.py +120 -6
  729. metadata/ingestion/source/database/sas/client.py +184 -0
  730. metadata/ingestion/source/database/sas/connection.py +47 -0
  731. metadata/ingestion/source/database/sas/extension_attr.py +103 -0
  732. metadata/ingestion/source/database/sas/metadata.py +914 -0
  733. metadata/ingestion/source/database/snowflake/metadata.py +34 -48
  734. metadata/ingestion/source/database/snowflake/models.py +6 -1
  735. metadata/ingestion/source/database/snowflake/queries.py +6 -4
  736. metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
  737. metadata/ingestion/source/database/snowflake/utils.py +23 -8
  738. metadata/ingestion/source/database/stored_procedures_mixin.py +12 -8
  739. metadata/ingestion/source/database/unitycatalog/__init__.py +0 -0
  740. metadata/ingestion/source/database/unitycatalog/client.py +87 -0
  741. metadata/ingestion/source/database/unitycatalog/connection.py +97 -0
  742. metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/lineage.py +11 -11
  743. metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/metadata.py +42 -49
  744. metadata/ingestion/source/database/unitycatalog/query_parser.py +60 -0
  745. metadata/ingestion/source/database/unitycatalog/usage.py +31 -0
  746. metadata/ingestion/source/database/usage_source.py +3 -2
  747. metadata/ingestion/source/messaging/common_broker_source.py +15 -11
  748. metadata/ingestion/source/messaging/kafka/connection.py +45 -4
  749. metadata/ingestion/source/messaging/kinesis/metadata.py +6 -3
  750. metadata/ingestion/source/messaging/messaging_service.py +6 -2
  751. metadata/ingestion/source/metadata/amundsen/metadata.py +10 -7
  752. metadata/ingestion/source/metadata/atlas/metadata.py +5 -5
  753. metadata/ingestion/source/mlmodel/mlflow/metadata.py +5 -2
  754. metadata/ingestion/source/mlmodel/mlmodel_service.py +6 -2
  755. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
  756. metadata/ingestion/source/pipeline/airflow/connection.py +0 -12
  757. metadata/ingestion/source/pipeline/airflow/lineage_parser.py +12 -6
  758. metadata/ingestion/source/pipeline/airflow/metadata.py +63 -34
  759. metadata/ingestion/source/pipeline/airflow/models.py +5 -4
  760. metadata/ingestion/source/pipeline/dagster/metadata.py +7 -4
  761. metadata/ingestion/source/pipeline/databrickspipeline/connection.py +1 -5
  762. metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +14 -11
  763. metadata/ingestion/source/pipeline/domopipeline/metadata.py +7 -4
  764. metadata/ingestion/source/pipeline/gluepipeline/metadata.py +5 -2
  765. metadata/ingestion/source/pipeline/pipeline_service.py +6 -2
  766. metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
  767. metadata/ingestion/source/search/elasticsearch/connection.py +4 -1
  768. metadata/ingestion/source/search/elasticsearch/metadata.py +1 -2
  769. metadata/ingestion/source/search/search_service.py +6 -2
  770. metadata/ingestion/source/storage/s3/metadata.py +22 -17
  771. metadata/ingestion/source/storage/storage_service.py +53 -11
  772. metadata/ingestion/stage/table_usage.py +9 -2
  773. metadata/mixins/sqalchemy/sqa_mixin.py +14 -7
  774. metadata/parsers/protobuf_parser.py +29 -11
  775. metadata/pii/processor.py +9 -2
  776. metadata/pii/scanners/ner_scanner.py +5 -3
  777. metadata/profiler/api/models.py +19 -1
  778. metadata/profiler/interface/pandas/profiler_interface.py +59 -18
  779. metadata/profiler/interface/profiler_interface.py +14 -4
  780. metadata/profiler/interface/profiler_interface_factory.py +49 -14
  781. metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -0
  782. metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +26 -0
  783. metadata/profiler/interface/sqlalchemy/db2/__init__.py +0 -0
  784. metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
  785. metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +85 -0
  786. metadata/profiler/interface/sqlalchemy/profiler_interface.py +77 -34
  787. metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +2 -2
  788. metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +7 -0
  789. metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +2 -2
  790. metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +33 -0
  791. metadata/profiler/metrics/composed/null_ratio.py +1 -1
  792. metadata/profiler/metrics/hybrid/histogram.py +1 -0
  793. metadata/profiler/metrics/static/max.py +4 -1
  794. metadata/profiler/metrics/static/min.py +4 -1
  795. metadata/profiler/metrics/system/queries/snowflake.py +89 -17
  796. metadata/profiler/metrics/system/system.py +62 -20
  797. metadata/profiler/orm/functions/conn_test.py +1 -0
  798. metadata/profiler/orm/functions/length.py +1 -0
  799. metadata/profiler/orm/functions/median.py +9 -1
  800. metadata/profiler/orm/functions/sum.py +1 -0
  801. metadata/profiler/orm/functions/table_metric_computer.py +462 -0
  802. metadata/profiler/orm/registry.py +2 -0
  803. metadata/profiler/processor/core.py +129 -62
  804. metadata/profiler/processor/default.py +14 -3
  805. metadata/profiler/processor/handle_partition.py +2 -2
  806. metadata/profiler/processor/processor.py +10 -7
  807. metadata/profiler/processor/sample_data_handler.py +6 -2
  808. metadata/profiler/processor/sampler/sqlalchemy/bigquery/sampler.py +31 -3
  809. metadata/profiler/processor/sampler/sqlalchemy/sampler.py +29 -6
  810. metadata/profiler/processor/sampler/sqlalchemy/trino/sampler.py +10 -4
  811. metadata/profiler/source/base/profiler_source.py +5 -2
  812. metadata/profiler/source/bigquery/type_mapper.py +0 -1
  813. metadata/profiler/source/databricks/profiler_source.py +36 -0
  814. metadata/profiler/source/mariadb/functions/median.py +20 -0
  815. metadata/profiler/source/mariadb/metrics/window/first_quartile.py +10 -0
  816. metadata/profiler/source/mariadb/metrics/window/median.py +10 -0
  817. metadata/profiler/source/mariadb/metrics/window/third_quartile.py +10 -0
  818. metadata/profiler/source/metadata.py +49 -10
  819. metadata/profiler/source/metadata_ext.py +16 -50
  820. metadata/profiler/source/profiler_source_factory.py +8 -0
  821. metadata/py.typed +0 -0
  822. metadata/readers/dataframe/json.py +5 -4
  823. metadata/readers/file/api_reader.py +0 -1
  824. metadata/utils/constants.py +5 -0
  825. metadata/utils/credentials.py +36 -19
  826. metadata/utils/datalake/datalake_utils.py +369 -129
  827. metadata/utils/entity_link.py +26 -6
  828. metadata/utils/execution_time_tracker.py +199 -0
  829. metadata/utils/filters.py +4 -0
  830. metadata/utils/fqn.py +20 -0
  831. metadata/utils/helpers.py +34 -39
  832. metadata/utils/importer.py +2 -3
  833. metadata/utils/life_cycle_utils.py +4 -4
  834. metadata/utils/logger.py +13 -2
  835. metadata/utils/partition.py +10 -5
  836. metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
  837. metadata/utils/secrets/aws_secrets_manager.py +7 -2
  838. metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
  839. metadata/utils/secrets/azure_kv_secrets_manager.py +132 -0
  840. metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +4 -3
  841. metadata/utils/secrets/external_secrets_manager.py +25 -3
  842. metadata/utils/secrets/secrets_manager_factory.py +15 -33
  843. metadata/utils/{source_hash_utils.py → source_hash.py} +10 -1
  844. metadata/utils/sqlalchemy_utils.py +21 -0
  845. metadata/utils/storage_metadata_config.py +42 -14
  846. metadata/utils/tag_utils.py +5 -2
  847. metadata/workflow/application.py +154 -0
  848. metadata/workflow/application_output_handler.py +34 -0
  849. metadata/workflow/base.py +88 -153
  850. metadata/workflow/data_insight.py +8 -7
  851. metadata/workflow/data_quality.py +3 -2
  852. metadata/workflow/ingestion.py +203 -0
  853. metadata/workflow/metadata.py +2 -3
  854. metadata/workflow/output_handler.py +226 -0
  855. metadata/workflow/profiler.py +2 -2
  856. metadata/workflow/usage.py +3 -4
  857. metadata/workflow/workflow_output_handler.py +15 -255
  858. metadata/workflow/workflow_status_mixin.py +44 -52
  859. openmetadata_ingestion-1.3.2.0rc1.dist-info/METADATA +758 -0
  860. {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/RECORD +870 -762
  861. {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/WHEEL +1 -1
  862. metadata/generated/schema/entity/applications/appConfig.py +0 -21
  863. metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +0 -17
  864. metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +0 -38
  865. metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +0 -44
  866. metadata/generated/schema/events/dataInsightAlertConfig.py +0 -17
  867. metadata/generated/schema/events/entitySpelFilters.py +0 -19
  868. metadata/ingestion/models/es_documents.py +0 -339
  869. metadata/ingestion/ometa/mixins/glossary_mixin.py +0 -501
  870. metadata/ingestion/ometa/provider_registry.py +0 -144
  871. metadata/ingestion/source/database/databricks/legacy/lineage.py +0 -51
  872. metadata/ingestion/source/database/databricks/legacy/metadata.py +0 -339
  873. metadata/ingestion/source/metadata/metadata_elasticsearch/metadata.py +0 -144
  874. metadata/profiler/orm/functions/table_metric_construct.py +0 -365
  875. metadata/utils/secrets/client/loader.py +0 -78
  876. openmetadata_ingestion-1.2.4.0.dist-info/METADATA +0 -429
  877. /metadata/examples/workflows/{datalake_azure.yaml → datalake_azure_client_secret.yaml} +0 -0
  878. /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
  879. /metadata/ingestion/source/database/{databricks/unity_catalog → bigtable}/__init__.py +0 -0
  880. /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/doris}/__init__.py +0 -0
  881. /metadata/{utils/secrets/client → ingestion/source/database/sas}/__init__.py +0 -0
  882. /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
  883. {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/LICENSE +0 -0
  884. {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/entry_points.txt +0 -0
  885. {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -8,33 +8,280 @@
8
8
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
9
  # See the License for the specific language governing permissions and
10
10
  # limitations under the License.
11
- """Databricks source module"""
11
+ """Databricks legacy source module"""
12
12
 
13
+ import re
14
+ import traceback
15
+ from copy import deepcopy
16
+ from typing import Iterable, Optional, Tuple, Union
17
+
18
+ from pyhive.sqlalchemy_hive import _type_map
19
+ from sqlalchemy import types, util
20
+ from sqlalchemy.engine import reflection
21
+ from sqlalchemy.exc import DatabaseError
22
+ from sqlalchemy.inspection import inspect
23
+ from sqlalchemy.sql.sqltypes import String
24
+ from sqlalchemy_databricks._dialect import DatabricksDialect
25
+
26
+ from metadata.generated.schema.entity.data.database import Database
27
+ from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
28
+ from metadata.generated.schema.entity.data.table import Column, Table, TableType
13
29
  from metadata.generated.schema.entity.services.connections.database.databricksConnection import (
14
30
  DatabricksConnection,
15
31
  )
32
+ from metadata.generated.schema.entity.services.ingestionPipelines.status import (
33
+ StackTraceError,
34
+ )
16
35
  from metadata.generated.schema.metadataIngestion.workflow import (
17
36
  Source as WorkflowSource,
18
37
  )
38
+ from metadata.ingestion.api.models import Either
19
39
  from metadata.ingestion.api.steps import InvalidSourceException
40
+ from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
20
41
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
21
- from metadata.ingestion.source.database.databricks.legacy.metadata import (
22
- DatabricksLegacySource,
23
- )
24
- from metadata.ingestion.source.database.databricks.unity_catalog.metadata import (
25
- DatabricksUnityCatalogSource,
42
+ from metadata.ingestion.source.connections import get_connection
43
+ from metadata.ingestion.source.database.column_type_parser import create_sqlalchemy_type
44
+ from metadata.ingestion.source.database.common_db_source import CommonDbSourceService
45
+ from metadata.ingestion.source.database.databricks.queries import (
46
+ DATABRICKS_GET_CATALOGS,
47
+ DATABRICKS_GET_CATALOGS_TAGS,
48
+ DATABRICKS_GET_COLUMN_TAGS,
49
+ DATABRICKS_GET_SCHEMA_TAGS,
50
+ DATABRICKS_GET_TABLE_COMMENTS,
51
+ DATABRICKS_GET_TABLE_TAGS,
52
+ DATABRICKS_VIEW_DEFINITIONS,
26
53
  )
54
+ from metadata.ingestion.source.database.multi_db_source import MultiDBSource
55
+ from metadata.utils import fqn
56
+ from metadata.utils.constants import DEFAULT_DATABASE
57
+ from metadata.utils.filters import filter_by_database
27
58
  from metadata.utils.logger import ingestion_logger
59
+ from metadata.utils.sqlalchemy_utils import (
60
+ get_all_view_definitions,
61
+ get_view_definition_wrapper,
62
+ )
63
+ from metadata.utils.tag_utils import get_ometa_tag_and_classification
28
64
 
29
65
  logger = ingestion_logger()
30
66
 
67
+ DATABRICKS_TAG = "DATABRICK TAG"
68
+ DATABRICKS_TAG_CLASSIFICATION = "DATABRICK TAG CLASSIFICATION"
69
+ DEFAULT_TAG_VALUE = "NONE"
70
+
71
+
72
+ class STRUCT(String):
73
+ # This class is added to support STRUCT datatype
74
+ """The SQL STRUCT type."""
75
+
76
+ __visit_name__ = "STRUCT"
77
+
78
+
79
+ class ARRAY(String):
80
+ # This class is added to support ARRAY datatype
81
+ """The SQL ARRAY type."""
82
+
83
+ __visit_name__ = "ARRAY"
84
+
85
+
86
+ class MAP(String):
87
+ # This class is added to support MAP datatype
88
+ """The SQL MAP type."""
89
+
90
+ __visit_name__ = "MAP"
91
+
92
+
93
+ # overriding pyhive.sqlalchemy_hive._type_map
94
+ # mapping struct, array & map to custom classed instead of sqltypes.String
95
+ _type_map.update(
96
+ {
97
+ "struct": STRUCT,
98
+ "array": ARRAY,
99
+ "map": MAP,
100
+ "void": create_sqlalchemy_type("VOID"),
101
+ "interval": create_sqlalchemy_type("INTERVAL"),
102
+ "binary": create_sqlalchemy_type("BINARY"),
103
+ }
104
+ )
105
+
106
+
107
+ def _get_column_rows(self, connection, table_name, schema):
108
+ # get columns and strip whitespace
109
+ table_columns = self._get_table_columns( # pylint: disable=protected-access
110
+ connection, table_name, schema
111
+ )
112
+ column_rows = [
113
+ [col.strip() if col else None for col in row] for row in table_columns
114
+ ]
115
+ # Filter out empty rows and comment
116
+ return [row for row in column_rows if row[0] and row[0] != "# col_name"]
117
+
118
+
119
+ @reflection.cache
120
+ def get_columns(self, connection, table_name, schema=None, **kw):
121
+ """
122
+ This function overrides the sqlalchemy_databricks._dialect.DatabricksDialect.get_columns
123
+ to add support for struct, array & map datatype
124
+
125
+ Extract the Database Name from the keyword arguments parameter if it is present. This
126
+ value should match what is provided in the 'source.config.database' field in the
127
+ Databricks ingest config file.
128
+ """
129
+ db_name = kw["db_name"] if "db_name" in kw else None
130
+
131
+ rows = _get_column_rows(self, connection, table_name, schema)
132
+ result = []
133
+ for col_name, col_type, _comment in rows:
134
+ # Handle both oss hive and Databricks' hive partition header, respectively
135
+ if col_name in ("# Partition Information", "# Partitioning"):
136
+ break
137
+ # Take out the more detailed type information
138
+ # e.g. 'map<ixnt,int>' -> 'map'
139
+ # 'decimal(10,1)' -> decimal
140
+ raw_col_type = col_type
141
+ col_type = re.search(r"^\w+", col_type).group(0)
142
+ try:
143
+ coltype = _type_map[col_type]
144
+ except KeyError:
145
+ util.warn(f"Did not recognize type '{col_type}' of column '{col_name}'")
146
+ coltype = types.NullType
147
+
148
+ col_info = {
149
+ "name": col_name,
150
+ "type": coltype,
151
+ "nullable": True,
152
+ "default": None,
153
+ "comment": _comment,
154
+ "system_data_type": raw_col_type,
155
+ }
156
+ if col_type in {"array", "struct", "map"}:
157
+ if db_name and schema:
158
+ rows = dict(
159
+ connection.execute(
160
+ f"DESCRIBE {db_name}.{schema}.{table_name} {col_name}"
161
+ ).fetchall()
162
+ )
163
+ else:
164
+ rows = dict(
165
+ connection.execute(
166
+ f"DESCRIBE {schema}.{table_name} {col_name}"
167
+ if schema
168
+ else f"DESCRIBE {table_name} {col_name}"
169
+ ).fetchall()
170
+ )
171
+
172
+ col_info["system_data_type"] = rows["data_type"]
173
+ col_info["is_complex"] = True
174
+ result.append(col_info)
175
+ return result
176
+
177
+
178
+ @reflection.cache
179
+ def get_schema_names(self, connection, **kw): # pylint: disable=unused-argument
180
+ # Equivalent to SHOW DATABASES
181
+ if kw.get("database") and kw.get("is_old_version") is not True:
182
+ connection.execute(f"USE CATALOG '{kw.get('database')}'")
183
+ return [row[0] for row in connection.execute("SHOW SCHEMAS")]
184
+
185
+
186
+ def get_schema_names_reflection(self, **kw):
187
+ """Return all schema names."""
188
+
189
+ if hasattr(self.dialect, "get_schema_names"):
190
+ with self._operation_context() as conn: # pylint: disable=protected-access
191
+ return self.dialect.get_schema_names(conn, info_cache=self.info_cache, **kw)
192
+ return []
193
+
194
+
195
+ def get_view_names(
196
+ self, connection, schema=None, **kw
197
+ ): # pylint: disable=unused-argument
198
+ query = "SHOW VIEWS"
199
+ if schema:
200
+ query += " IN " + self.identifier_preparer.quote_identifier(schema)
201
+ view_in_schema = connection.execute(query)
202
+ views = []
203
+ for row in view_in_schema:
204
+ # check number of columns in result
205
+ # if it is > 1, we use spark thrift server with 3 columns in the result (schema, table, is_temporary)
206
+ # else it is hive with 1 column in the result
207
+ if len(row) > 1:
208
+ views.append(row[1])
209
+ else:
210
+ views.append(row[0])
211
+ return views
212
+
213
+
214
+ @reflection.cache
215
+ def get_table_comment( # pylint: disable=unused-argument
216
+ self, connection, table_name, schema_name, **kw
217
+ ):
218
+ """
219
+ Returns comment of table
220
+ """
221
+ cursor = connection.execute(
222
+ DATABRICKS_GET_TABLE_COMMENTS.format(
223
+ schema_name=schema_name, table_name=table_name
224
+ )
225
+ )
226
+ try:
227
+ for result in list(cursor):
228
+ data = result.values()
229
+ if data[0] and data[0].strip() == "Comment":
230
+ return {"text": data[1] if data and data[1] else None}
231
+ except Exception:
232
+ return {"text": None}
233
+ return {"text": None}
234
+
235
+
236
+ @reflection.cache
237
+ def get_view_definition(
238
+ self, connection, table_name, schema=None, **kw # pylint: disable=unused-argument
239
+ ):
240
+ schema_name = [row[0] for row in connection.execute("SHOW SCHEMAS")]
241
+ if "information_schema" in schema_name:
242
+ return get_view_definition_wrapper(
243
+ self,
244
+ connection,
245
+ table_name=table_name,
246
+ schema=schema,
247
+ query=DATABRICKS_VIEW_DEFINITIONS,
248
+ )
249
+ return None
250
+
251
+
252
+ DatabricksDialect.get_table_comment = get_table_comment
253
+ DatabricksDialect.get_view_names = get_view_names
254
+ DatabricksDialect.get_columns = get_columns
255
+ DatabricksDialect.get_schema_names = get_schema_names
256
+ DatabricksDialect.get_view_definition = get_view_definition
257
+ DatabricksDialect.get_all_view_definitions = get_all_view_definitions
258
+ reflection.Inspector.get_schema_names = get_schema_names_reflection
31
259
 
32
- class DatabricksSource:
260
+
261
+ class DatabricksSource(CommonDbSourceService, MultiDBSource):
33
262
  """
34
263
  Implements the necessary methods to extract
35
- Database metadata from Databricks Source
264
+ Database metadata from Databricks Source using
265
+ the legacy hive metastore method
36
266
  """
37
267
 
268
+ def __init__(self, config: WorkflowSource, metadata: OpenMetadata):
269
+ super().__init__(config, metadata)
270
+ self.is_older_version = False
271
+ self._init_version()
272
+ self.catalog_tags = {}
273
+ self.schema_tags = {}
274
+ self.table_tags = {}
275
+ self.column_tags = {}
276
+
277
+ def _init_version(self):
278
+ try:
279
+ self.connection.execute(DATABRICKS_GET_CATALOGS).fetchone()
280
+ self.is_older_version = False
281
+ except DatabaseError as soe:
282
+ logger.debug(f"Failed to fetch catalogs due to: {soe}")
283
+ self.is_older_version = True
284
+
38
285
  @classmethod
39
286
  def create(cls, config_dict, metadata: OpenMetadata):
40
287
  config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
@@ -43,6 +290,282 @@ class DatabricksSource:
43
290
  raise InvalidSourceException(
44
291
  f"Expected DatabricksConnection, but got {connection}"
45
292
  )
46
- if not connection.useUnityCatalog:
47
- return DatabricksLegacySource(config, metadata)
48
- return DatabricksUnityCatalogSource(config, metadata)
293
+ return cls(config, metadata)
294
+
295
+ def set_inspector(self, database_name: str) -> None:
296
+ """
297
+ When sources override `get_database_names`, they will need
298
+ to setup multiple inspectors. They can use this function.
299
+ :param database_name: new database to set
300
+ """
301
+ logger.info(f"Ingesting from catalog: {database_name}")
302
+
303
+ new_service_connection = deepcopy(self.service_connection)
304
+ new_service_connection.catalog = database_name
305
+ self.engine = get_connection(new_service_connection)
306
+ self.inspector = inspect(self.engine)
307
+ self._connection = None # Lazy init as well
308
+
309
+ def get_configured_database(self) -> Optional[str]:
310
+ return self.service_connection.catalog
311
+
312
+ def get_database_names_raw(self) -> Iterable[str]:
313
+ if not self.is_older_version:
314
+ results = self.connection.execute(DATABRICKS_GET_CATALOGS)
315
+ for res in results:
316
+ if res:
317
+ row = list(res)
318
+ yield row[0]
319
+ else:
320
+ yield DEFAULT_DATABASE
321
+
322
+ def _clear_tag_cache(self) -> None:
323
+ """
324
+ Method to clean any existing tags available in memory
325
+ """
326
+ self.catalog_tags.clear()
327
+ self.table_tags.clear()
328
+ self.schema_tags.clear()
329
+ self.column_tags.clear()
330
+
331
+ def _add_to_tag_cache(
332
+ self, tag_dict: dict, key: Union[str, Tuple], value: Tuple[str, str]
333
+ ):
334
+ if tag_dict.get(key):
335
+ tag_dict.get(key).append(value)
336
+ else:
337
+ tag_dict[key] = [value]
338
+
339
+ def populate_tags_cache(self, database_name: str) -> None:
340
+ """
341
+ Method to fetch all the tags and populate the relevant caches
342
+ """
343
+ self._clear_tag_cache()
344
+ if self.source_config.includeTags is False:
345
+ return
346
+ try:
347
+ tags = self.connection.execute(
348
+ DATABRICKS_GET_CATALOGS_TAGS.format(database_name=database_name)
349
+ )
350
+
351
+ for tag in tags:
352
+ self._add_to_tag_cache(
353
+ self.catalog_tags,
354
+ tag.catalog_name,
355
+ # tag value is an optional field, if tag value is not available use default tag value
356
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
357
+ )
358
+ except Exception as exc:
359
+ logger.debug(f"Failed to fetch catalog tags due to - {exc}")
360
+
361
+ try:
362
+ tags = self.connection.execute(
363
+ DATABRICKS_GET_SCHEMA_TAGS.format(database_name=database_name)
364
+ )
365
+ for tag in tags:
366
+ self._add_to_tag_cache(
367
+ self.schema_tags,
368
+ (tag.catalog_name, tag.schema_name),
369
+ # tag value is an optional field, if tag value is not available use default tag value
370
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
371
+ )
372
+ except Exception as exc:
373
+ logger.debug(f"Failed to fetch schema tags due to - {exc}")
374
+
375
+ try:
376
+ tags = self.connection.execute(
377
+ DATABRICKS_GET_TABLE_TAGS.format(database_name=database_name)
378
+ )
379
+ for tag in tags:
380
+ self._add_to_tag_cache(
381
+ self.table_tags,
382
+ (tag.catalog_name, tag.schema_name, tag.table_name),
383
+ # tag value is an optional field, if tag value is not available use default tag value
384
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
385
+ )
386
+ except Exception as exc:
387
+ logger.debug(f"Failed to fetch table tags due to - {exc}")
388
+
389
+ try:
390
+ tags = self.connection.execute(
391
+ DATABRICKS_GET_COLUMN_TAGS.format(database_name=database_name)
392
+ )
393
+ for tag in tags:
394
+ tag_table_id = (tag.catalog_name, tag.schema_name, tag.table_name)
395
+ if self.column_tags.get(tag_table_id):
396
+ self._add_to_tag_cache(
397
+ self.column_tags.get(tag_table_id),
398
+ tag.column_name,
399
+ # tag value is an optional field, if tag value is not available use default tag value
400
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
401
+ )
402
+ else:
403
+ self.column_tags[tag_table_id] = {
404
+ tag.column_name: [
405
+ (
406
+ tag.tag_name,
407
+ tag.tag_value or DEFAULT_TAG_VALUE,
408
+ )
409
+ ]
410
+ }
411
+ except Exception as exc:
412
+ logger.debug(f"Failed to fetch column tags due to - {exc}")
413
+
414
+ def get_database_names(self) -> Iterable[str]:
415
+ configured_catalog = self.service_connection.catalog
416
+ if configured_catalog:
417
+ self.set_inspector(database_name=configured_catalog)
418
+ self.populate_tags_cache(database_name=configured_catalog)
419
+ yield configured_catalog
420
+ else:
421
+ for new_catalog in self.get_database_names_raw():
422
+ database_fqn = fqn.build(
423
+ self.metadata,
424
+ entity_type=Database,
425
+ service_name=self.context.database_service,
426
+ database_name=new_catalog,
427
+ )
428
+ if filter_by_database(
429
+ self.source_config.databaseFilterPattern,
430
+ database_fqn
431
+ if self.source_config.useFqnForFiltering
432
+ else new_catalog,
433
+ ):
434
+ self.status.filter(database_fqn, "Database Filtered Out")
435
+ continue
436
+ try:
437
+ self.set_inspector(database_name=new_catalog)
438
+ self.populate_tags_cache(database_name=new_catalog)
439
+ yield new_catalog
440
+ except Exception as exc:
441
+ logger.error(traceback.format_exc())
442
+ logger.warning(
443
+ f"Error trying to process database {new_catalog}: {exc}"
444
+ )
445
+
446
+ def get_raw_database_schema_names(self) -> Iterable[str]:
447
+ if self.service_connection.__dict__.get("databaseSchema"):
448
+ yield self.service_connection.databaseSchema
449
+ else:
450
+ for schema_name in self.inspector.get_schema_names(
451
+ database=self.context.database,
452
+ is_old_version=self.is_older_version,
453
+ ):
454
+ yield schema_name
455
+
456
+ def yield_database_tag(
457
+ self, database_name: str
458
+ ) -> Iterable[Either[OMetaTagAndClassification]]:
459
+ """
460
+ Method to yield database tags
461
+ """
462
+ try:
463
+ catalog_tags = self.catalog_tags.get(database_name, [])
464
+ for tag_name, tag_value in catalog_tags:
465
+ yield from get_ometa_tag_and_classification(
466
+ tag_fqn=fqn.build(
467
+ self.metadata,
468
+ Database,
469
+ service_name=self.context.database_service,
470
+ database_name=database_name,
471
+ ),
472
+ tags=[tag_value],
473
+ classification_name=tag_name,
474
+ tag_description=DATABRICKS_TAG,
475
+ classification_description=DATABRICKS_TAG_CLASSIFICATION,
476
+ )
477
+
478
+ except Exception as exc:
479
+ yield Either(
480
+ left=StackTraceError(
481
+ name="Tags and Classifications",
482
+ error=f"Failed to fetch database tags due to [{exc}]",
483
+ stackTrace=traceback.format_exc(),
484
+ )
485
+ )
486
+
487
+ def yield_tag(
488
+ self, schema_name: str
489
+ ) -> Iterable[Either[OMetaTagAndClassification]]:
490
+ """
491
+ Method to yield schema tags
492
+ """
493
+ try:
494
+ schema_tags = self.schema_tags.get((self.context.database, schema_name), [])
495
+ for tag_name, tag_value in schema_tags:
496
+ yield from get_ometa_tag_and_classification(
497
+ tag_fqn=fqn.build(
498
+ self.metadata,
499
+ DatabaseSchema,
500
+ service_name=self.context.database_service,
501
+ database_name=self.context.database,
502
+ schema_name=schema_name,
503
+ ),
504
+ tags=[tag_value],
505
+ classification_name=tag_name,
506
+ tag_description=DATABRICKS_TAG,
507
+ classification_description=DATABRICKS_TAG_CLASSIFICATION,
508
+ )
509
+
510
+ except Exception as exc:
511
+ yield Either(
512
+ left=StackTraceError(
513
+ name="Tags and Classifications",
514
+ error=f"Failed to fetch schema tags due to [{exc}]",
515
+ stackTrace=traceback.format_exc(),
516
+ )
517
+ )
518
+
519
+ def yield_table_tags(
520
+ self, table_name_and_type: Tuple[str, TableType]
521
+ ) -> Iterable[Either[OMetaTagAndClassification]]:
522
+ table_name, _ = table_name_and_type
523
+ try:
524
+ table_tags = self.table_tags.get(
525
+ (self.context.database, self.context.database_schema, table_name), []
526
+ )
527
+ for tag_name, tag_value in table_tags:
528
+ yield from get_ometa_tag_and_classification(
529
+ tag_fqn=fqn.build(
530
+ self.metadata,
531
+ Table,
532
+ service_name=self.context.database_service,
533
+ database_name=self.context.database,
534
+ schema_name=self.context.database_schema,
535
+ table_name=table_name,
536
+ ),
537
+ tags=[tag_value],
538
+ classification_name=tag_name,
539
+ tag_description=DATABRICKS_TAG,
540
+ classification_description=DATABRICKS_TAG_CLASSIFICATION,
541
+ )
542
+
543
+ column_tags = self.column_tags.get(
544
+ (self.context.database, self.context.database_schema, table_name), {}
545
+ )
546
+ for column_name, tags in column_tags.items():
547
+ for tag_name, tag_value in tags or []:
548
+ yield from get_ometa_tag_and_classification(
549
+ tag_fqn=fqn.build(
550
+ self.metadata,
551
+ Column,
552
+ service_name=self.context.database_service,
553
+ database_name=self.context.database,
554
+ schema_name=self.context.database_schema,
555
+ table_name=table_name,
556
+ column_name=column_name,
557
+ ),
558
+ tags=[tag_value],
559
+ classification_name=tag_name,
560
+ tag_description=DATABRICKS_TAG,
561
+ classification_description=DATABRICKS_TAG_CLASSIFICATION,
562
+ )
563
+
564
+ except Exception as exc:
565
+ yield Either(
566
+ left=StackTraceError(
567
+ name="Tags and Classifications",
568
+ error=f"Failed to fetch table/column tags due to [{exc}]",
569
+ stackTrace=traceback.format_exc(),
570
+ )
571
+ )
@@ -28,3 +28,30 @@ DATABRICKS_VIEW_DEFINITIONS = textwrap.dedent(
28
28
  DATABRICKS_GET_TABLE_COMMENTS = "DESCRIBE TABLE EXTENDED {schema_name}.{table_name}"
29
29
 
30
30
  DATABRICKS_GET_CATALOGS = "SHOW CATALOGS"
31
+
32
+ DATABRICKS_GET_CATALOGS_TAGS = textwrap.dedent(
33
+ """SELECT * FROM {database_name}.information_schema.catalog_tags;"""
34
+ )
35
+
36
+ DATABRICKS_GET_SCHEMA_TAGS = textwrap.dedent(
37
+ """
38
+ SELECT
39
+ *
40
+ FROM {database_name}.information_schema.schema_tags"""
41
+ )
42
+
43
+ DATABRICKS_GET_TABLE_TAGS = textwrap.dedent(
44
+ """
45
+ SELECT
46
+ *
47
+ FROM {database_name}.information_schema.table_tags
48
+ """
49
+ )
50
+
51
+ DATABRICKS_GET_COLUMN_TAGS = textwrap.dedent(
52
+ """
53
+ SELECT
54
+ *
55
+ FROM {database_name}.information_schema.column_tags
56
+ """
57
+ )
@@ -35,8 +35,12 @@ class DatabricksQueryParserSource(QueryParserSource, ABC):
35
35
 
36
36
  filters: str
37
37
 
38
- def __init__(self, config: WorkflowSource, metadata: OpenMetadata):
38
+ def _init_super(self, config: WorkflowSource, metadata: OpenMetadata):
39
39
  super().__init__(config, metadata, False)
40
+
41
+ # pylint: disable=super-init-not-called
42
+ def __init__(self, config: WorkflowSource, metadata: OpenMetadata):
43
+ self._init_super(config=config, metadata=metadata)
40
44
  self.client = DatabricksClient(self.service_connection)
41
45
 
42
46
  @classmethod
@@ -13,7 +13,7 @@ Databricks usage module
13
13
  """
14
14
  import traceback
15
15
  from datetime import datetime
16
- from typing import Iterable, Optional
16
+ from typing import Iterable
17
17
 
18
18
  from metadata.generated.schema.type.tableQuery import TableQueries, TableQuery
19
19
  from metadata.ingestion.source.database.databricks.query_parser import (
@@ -30,7 +30,7 @@ class DatabricksUsageSource(DatabricksQueryParserSource, UsageSource):
30
30
  Databricks Usage Source
31
31
  """
32
32
 
33
- def yield_table_queries(self) -> Optional[Iterable[TableQuery]]:
33
+ def yield_table_queries(self) -> Iterable[TableQuery]:
34
34
  """
35
35
  Method to yield TableQueries
36
36
  """
@@ -39,7 +39,7 @@ class DatabricksUsageSource(DatabricksQueryParserSource, UsageSource):
39
39
  start_date=self.start,
40
40
  end_date=self.end,
41
41
  )
42
- for row in data:
42
+ for row in data or []:
43
43
  try:
44
44
  if self.client.is_query_valid(row):
45
45
  queries.append(