openmetadata-ingestion 1.4.8.0__py3-none-any.whl → 1.5.0.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (1079) hide show
  1. _openmetadata_testutils/data/dvdrental.zip +0 -0
  2. _openmetadata_testutils/helpers/assumption.py +118 -0
  3. _openmetadata_testutils/helpers/docker.py +38 -0
  4. _openmetadata_testutils/helpers/markers.py +5 -0
  5. _openmetadata_testutils/kafka/load_csv_data.py +133 -0
  6. _openmetadata_testutils/kafka/schema_registry_container.py +31 -0
  7. _openmetadata_testutils/ometa.py +23 -0
  8. _openmetadata_testutils/postgres/conftest.py +75 -0
  9. _openmetadata_testutils/pydantic/test_utils.py +79 -0
  10. airflow_provider_openmetadata/lineage/callback.py +3 -3
  11. airflow_provider_openmetadata/lineage/config/loader.py +1 -1
  12. airflow_provider_openmetadata/lineage/runner.py +5 -5
  13. airflow_provider_openmetadata/lineage/status.py +2 -2
  14. metadata/automations/runner.py +1 -1
  15. metadata/cli/app.py +1 -3
  16. metadata/cli/dataquality.py +8 -8
  17. metadata/cli/ingest.py +8 -8
  18. metadata/cli/lineage.py +10 -5
  19. metadata/cli/profile.py +8 -8
  20. metadata/cli/usage.py +6 -8
  21. metadata/clients/aws_client.py +4 -4
  22. metadata/clients/azure_client.py +1 -1
  23. metadata/clients/domo_client.py +12 -18
  24. metadata/cmd.py +16 -20
  25. metadata/config/common.py +3 -4
  26. metadata/data_quality/api/models.py +2 -2
  27. metadata/data_quality/builders/i_validator_builder.py +100 -0
  28. metadata/{data_insight/producer/producer_interface.py → data_quality/builders/pandas_validator_builder.py} +12 -12
  29. metadata/data_quality/{validations/validator.py → builders/sqa_validator_builder.py} +7 -8
  30. metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +9 -42
  31. metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +7 -40
  32. metadata/data_quality/interface/test_suite_interface.py +84 -2
  33. metadata/data_quality/processor/test_case_runner.py +76 -40
  34. metadata/data_quality/runner/base_test_suite_source.py +1 -1
  35. metadata/data_quality/runner/core.py +2 -2
  36. metadata/data_quality/source/test_suite.py +17 -15
  37. metadata/data_quality/validations/base_test_handler.py +25 -5
  38. metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +2 -0
  39. metadata/data_quality/validations/column/base/columnValueMaxToBeBetween.py +2 -0
  40. metadata/data_quality/validations/column/base/columnValueMeanToBeBetween.py +2 -0
  41. metadata/data_quality/validations/column/base/columnValueMedianToBeBetween.py +2 -0
  42. metadata/data_quality/validations/column/base/columnValueMinToBeBetween.py +2 -0
  43. metadata/data_quality/validations/column/base/columnValueStdDevToBeBetween.py +2 -0
  44. metadata/data_quality/validations/column/base/columnValuesSumToBeBetween.py +2 -0
  45. metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +24 -14
  46. metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +13 -1
  47. metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +1 -1
  48. metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +1 -1
  49. metadata/data_quality/validations/column/pandas/columnValueMaxToBeBetween.py +1 -1
  50. metadata/data_quality/validations/column/pandas/columnValueMeanToBeBetween.py +1 -1
  51. metadata/data_quality/validations/column/pandas/columnValueMedianToBeBetween.py +1 -1
  52. metadata/data_quality/validations/column/pandas/columnValueMinToBeBetween.py +1 -1
  53. metadata/data_quality/validations/column/pandas/columnValueStdDevToBeBetween.py +1 -1
  54. metadata/data_quality/validations/column/pandas/columnValuesMissingCount.py +1 -1
  55. metadata/data_quality/validations/column/pandas/columnValuesSumToBeBetween.py +1 -1
  56. metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +1 -1
  57. metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +1 -1
  58. metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +1 -1
  59. metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +1 -1
  60. metadata/data_quality/validations/column/pandas/columnValuesToBeUnique.py +1 -1
  61. metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +1 -1
  62. metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +1 -1
  63. metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +8 -7
  64. metadata/data_quality/validations/column/sqlalchemy/columnValueMaxToBeBetween.py +1 -1
  65. metadata/data_quality/validations/column/sqlalchemy/columnValueMeanToBeBetween.py +1 -1
  66. metadata/data_quality/validations/column/sqlalchemy/columnValueMedianToBeBetween.py +1 -1
  67. metadata/data_quality/validations/column/sqlalchemy/columnValueMinToBeBetween.py +1 -1
  68. metadata/data_quality/validations/column/sqlalchemy/columnValueStdDevToBeBetween.py +1 -1
  69. metadata/data_quality/validations/column/sqlalchemy/columnValuesMissingCount.py +1 -1
  70. metadata/data_quality/validations/column/sqlalchemy/columnValuesSumToBeBetween.py +1 -1
  71. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +8 -3
  72. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +1 -1
  73. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +1 -1
  74. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +1 -1
  75. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeUnique.py +1 -1
  76. metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +1 -1
  77. metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +1 -1
  78. metadata/data_quality/validations/models.py +21 -0
  79. metadata/data_quality/validations/runtime_param_setter/param_setter.py +42 -0
  80. metadata/data_quality/validations/runtime_param_setter/param_setter_factory.py +54 -0
  81. metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +190 -0
  82. metadata/data_quality/validations/table/base/tableRowCountToBeBetween.py +4 -13
  83. metadata/data_quality/validations/table/pandas/tableRowInsertedCountToBeBetween.py +2 -2
  84. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +434 -0
  85. metadata/examples/workflows/alationsink.yaml +34 -0
  86. metadata/examples/workflows/bigquery_profiler.yaml +1 -1
  87. metadata/examples/workflows/dbtcloud.yaml +26 -0
  88. metadata/examples/workflows/deltalake.yaml +6 -5
  89. metadata/examples/workflows/flink.yaml +33 -0
  90. metadata/examples/workflows/saperp.yaml +24 -0
  91. metadata/examples/workflows/synapse.yaml +24 -0
  92. metadata/generated/antlr/EntityLinkLexer.py +380 -352
  93. metadata/generated/schema/analytics/__init__.py +1 -1
  94. metadata/generated/schema/analytics/basic.py +19 -16
  95. metadata/generated/schema/analytics/reportData.py +26 -18
  96. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  97. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +64 -43
  98. metadata/generated/schema/analytics/reportDataType/entityReportData.py +35 -24
  99. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +18 -11
  100. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +24 -16
  101. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +23 -12
  102. metadata/generated/schema/analytics/webAnalyticEvent.py +75 -42
  103. metadata/generated/schema/analytics/webAnalyticEventData.py +17 -12
  104. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  105. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +24 -16
  106. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +31 -21
  107. metadata/generated/schema/api/__init__.py +1 -1
  108. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +28 -18
  109. metadata/generated/schema/api/analytics/__init__.py +1 -1
  110. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +33 -20
  111. metadata/generated/schema/api/automations/__init__.py +1 -1
  112. metadata/generated/schema/api/automations/createWorkflow.py +46 -27
  113. metadata/generated/schema/api/bulkAssets.py +14 -8
  114. metadata/generated/schema/api/classification/__init__.py +1 -1
  115. metadata/generated/schema/api/classification/createClassification.py +28 -15
  116. metadata/generated/schema/api/classification/createTag.py +43 -24
  117. metadata/generated/schema/api/classification/loadTags.py +11 -6
  118. metadata/generated/schema/api/createBot.py +30 -14
  119. metadata/generated/schema/api/createEventPublisherJob.py +42 -26
  120. metadata/generated/schema/api/createType.py +33 -21
  121. metadata/generated/schema/api/data/__init__.py +1 -1
  122. metadata/generated/schema/api/data/createAPICollection.py +97 -0
  123. metadata/generated/schema/api/data/createAPIEndpoint.py +107 -0
  124. metadata/generated/schema/api/data/createChart.py +71 -39
  125. metadata/generated/schema/api/data/createContainer.py +105 -68
  126. metadata/generated/schema/api/data/createCustomProperty.py +22 -14
  127. metadata/generated/schema/api/data/createDashboard.py +95 -58
  128. metadata/generated/schema/api/data/createDashboardDataModel.py +88 -51
  129. metadata/generated/schema/api/data/createDatabase.py +85 -53
  130. metadata/generated/schema/api/data/createDatabaseSchema.py +81 -50
  131. metadata/generated/schema/api/data/createGlossary.py +51 -34
  132. metadata/generated/schema/api/data/createGlossaryTerm.py +75 -48
  133. metadata/generated/schema/api/data/createMlModel.py +105 -68
  134. metadata/generated/schema/api/data/createPipeline.py +95 -58
  135. metadata/generated/schema/api/data/createQuery.py +85 -54
  136. metadata/generated/schema/api/data/createSearchIndex.py +76 -49
  137. metadata/generated/schema/api/data/createStoredProcedure.py +70 -46
  138. metadata/generated/schema/api/data/createTable.py +87 -58
  139. metadata/generated/schema/api/data/createTableProfile.py +16 -11
  140. metadata/generated/schema/api/data/createTopic.py +120 -75
  141. metadata/generated/schema/api/data/loadGlossary.py +12 -8
  142. metadata/generated/schema/api/data/restoreEntity.py +11 -7
  143. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  144. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +41 -26
  145. metadata/generated/schema/api/dataInsight/custom/__init__.py +3 -0
  146. metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +53 -0
  147. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  148. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +49 -21
  149. metadata/generated/schema/api/docStore/__init__.py +1 -1
  150. metadata/generated/schema/api/docStore/createDocument.py +24 -12
  151. metadata/generated/schema/api/domains/__init__.py +1 -1
  152. metadata/generated/schema/api/domains/createDataProduct.py +50 -30
  153. metadata/generated/schema/api/domains/createDomain.py +38 -25
  154. metadata/generated/schema/api/feed/__init__.py +1 -1
  155. metadata/generated/schema/api/feed/closeTask.py +17 -10
  156. metadata/generated/schema/api/feed/createPost.py +16 -11
  157. metadata/generated/schema/api/feed/createSuggestion.py +56 -16
  158. metadata/generated/schema/api/feed/createThread.py +55 -34
  159. metadata/generated/schema/api/feed/resolveTask.py +21 -14
  160. metadata/generated/schema/api/feed/threadCount.py +29 -19
  161. metadata/generated/schema/api/lineage/__init__.py +1 -1
  162. metadata/generated/schema/api/lineage/addLineage.py +11 -6
  163. metadata/generated/schema/api/openMetadataServerVersion.py +18 -11
  164. metadata/generated/schema/api/policies/__init__.py +1 -1
  165. metadata/generated/schema/api/policies/createPolicy.py +38 -18
  166. metadata/generated/schema/api/services/__init__.py +1 -1
  167. metadata/generated/schema/api/services/createApiService.py +60 -0
  168. metadata/generated/schema/api/services/createDashboardService.py +42 -28
  169. metadata/generated/schema/api/services/createDatabaseService.py +42 -28
  170. metadata/generated/schema/api/services/createMessagingService.py +45 -29
  171. metadata/generated/schema/api/services/createMetadataService.py +34 -20
  172. metadata/generated/schema/api/services/createMlModelService.py +42 -28
  173. metadata/generated/schema/api/services/createPipelineService.py +50 -34
  174. metadata/generated/schema/api/services/createSearchService.py +45 -29
  175. metadata/generated/schema/api/services/createStorageService.py +45 -29
  176. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  177. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +45 -24
  178. metadata/generated/schema/api/setOwner.py +17 -8
  179. metadata/generated/schema/api/teams/__init__.py +1 -1
  180. metadata/generated/schema/api/teams/createPersona.py +32 -15
  181. metadata/generated/schema/api/teams/createRole.py +31 -16
  182. metadata/generated/schema/api/teams/createTeam.py +72 -46
  183. metadata/generated/schema/api/teams/createUser.py +75 -47
  184. metadata/generated/schema/api/tests/__init__.py +1 -1
  185. metadata/generated/schema/api/tests/createCustomMetric.py +38 -26
  186. metadata/generated/schema/api/tests/createLogicalTestCases.py +14 -10
  187. metadata/generated/schema/api/tests/createTestCase.py +46 -26
  188. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +25 -17
  189. metadata/generated/schema/api/tests/createTestDefinition.py +29 -15
  190. metadata/generated/schema/api/tests/createTestSuite.py +50 -27
  191. metadata/generated/schema/api/voteRequest.py +12 -6
  192. metadata/generated/schema/auth/__init__.py +1 -1
  193. metadata/generated/schema/auth/basicAuth.py +9 -6
  194. metadata/generated/schema/auth/basicLoginRequest.py +10 -7
  195. metadata/generated/schema/auth/changePasswordRequest.py +18 -13
  196. metadata/generated/schema/auth/createPersonalToken.py +9 -6
  197. metadata/generated/schema/auth/emailRequest.py +9 -6
  198. metadata/generated/schema/auth/emailVerificationToken.py +17 -13
  199. metadata/generated/schema/auth/generateToken.py +7 -5
  200. metadata/generated/schema/auth/jwtAuth.py +15 -9
  201. metadata/generated/schema/auth/loginRequest.py +10 -7
  202. metadata/generated/schema/auth/logoutRequest.py +14 -9
  203. metadata/generated/schema/auth/passwordResetRequest.py +16 -12
  204. metadata/generated/schema/auth/passwordResetToken.py +27 -18
  205. metadata/generated/schema/auth/personalAccessToken.py +21 -16
  206. metadata/generated/schema/auth/refreshToken.py +21 -16
  207. metadata/generated/schema/auth/registrationRequest.py +13 -10
  208. metadata/generated/schema/auth/revokePersonalToken.py +11 -7
  209. metadata/generated/schema/auth/revokeToken.py +7 -5
  210. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  211. metadata/generated/schema/auth/ssoAuth.py +24 -17
  212. metadata/generated/schema/auth/tokenRefreshRequest.py +11 -6
  213. metadata/generated/schema/configuration/__init__.py +1 -1
  214. metadata/generated/schema/configuration/appsPrivateConfiguration.py +23 -17
  215. metadata/generated/schema/configuration/authConfig.py +31 -22
  216. metadata/generated/schema/configuration/authenticationConfiguration.py +46 -33
  217. metadata/generated/schema/configuration/authorizerConfiguration.py +43 -37
  218. metadata/generated/schema/configuration/changeEventConfiguration.py +7 -5
  219. metadata/generated/schema/configuration/dataQualityConfiguration.py +10 -7
  220. metadata/generated/schema/configuration/elasticSearchConfiguration.py +52 -34
  221. metadata/generated/schema/configuration/eventHandlerConfiguration.py +10 -7
  222. metadata/generated/schema/configuration/fernetConfiguration.py +9 -6
  223. metadata/generated/schema/configuration/jwtTokenConfiguration.py +15 -12
  224. metadata/generated/schema/configuration/kafkaEventConfiguration.py +50 -36
  225. metadata/generated/schema/configuration/ldapConfiguration.py +72 -57
  226. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  227. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +23 -17
  228. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +13 -8
  229. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +10 -7
  230. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +11 -7
  231. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +23 -16
  232. metadata/generated/schema/configuration/limitsConfiguration.py +30 -0
  233. metadata/generated/schema/configuration/loginConfiguration.py +21 -14
  234. metadata/generated/schema/configuration/logoConfiguration.py +16 -13
  235. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +80 -49
  236. metadata/generated/schema/configuration/profilerConfiguration.py +18 -11
  237. metadata/generated/schema/configuration/slackAppConfiguration.py +27 -11
  238. metadata/generated/schema/configuration/taskNotificationConfiguration.py +11 -6
  239. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +21 -14
  240. metadata/generated/schema/configuration/themeConfiguration.py +42 -23
  241. metadata/generated/schema/configuration/uiThemePreference.py +19 -12
  242. metadata/generated/schema/dataInsight/__init__.py +1 -1
  243. metadata/generated/schema/dataInsight/custom/__init__.py +3 -0
  244. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +111 -0
  245. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +21 -0
  246. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +25 -0
  247. metadata/generated/schema/dataInsight/custom/formulaHolder.py +24 -0
  248. metadata/generated/schema/dataInsight/custom/lineChart.py +76 -0
  249. metadata/generated/schema/dataInsight/custom/summaryCard.py +49 -0
  250. metadata/generated/schema/dataInsight/dataInsightChart.py +79 -48
  251. metadata/generated/schema/dataInsight/dataInsightChartResult.py +34 -45
  252. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  253. metadata/generated/schema/dataInsight/kpi/basic.py +43 -32
  254. metadata/generated/schema/dataInsight/kpi/kpi.py +81 -52
  255. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  256. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +19 -12
  257. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +19 -12
  258. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +32 -19
  259. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +32 -18
  260. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +16 -8
  261. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +28 -19
  262. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +18 -13
  263. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +17 -9
  264. metadata/generated/schema/dataInsight/type/unusedAssets.py +17 -9
  265. metadata/generated/schema/email/__init__.py +1 -1
  266. metadata/generated/schema/email/emailRequest.py +26 -18
  267. metadata/generated/schema/email/emailTemplate.py +25 -0
  268. metadata/generated/schema/email/emailTemplatePlaceholder.py +20 -0
  269. metadata/generated/schema/email/smtpSettings.py +34 -18
  270. metadata/generated/schema/email/templateValidationReponse.py +29 -0
  271. metadata/generated/schema/entity/__init__.py +1 -1
  272. metadata/generated/schema/entity/applications/__init__.py +1 -1
  273. metadata/generated/schema/entity/applications/app.py +164 -107
  274. metadata/generated/schema/entity/applications/appRunRecord.py +42 -30
  275. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  276. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +24 -7
  277. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  278. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  279. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +28 -18
  280. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +22 -13
  281. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +23 -14
  282. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +28 -18
  283. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +20 -13
  284. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +19 -12
  285. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +11 -7
  286. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +19 -12
  287. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +11 -7
  288. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +11 -7
  289. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +20 -13
  290. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +11 -7
  291. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +68 -39
  292. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +47 -19
  293. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  294. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +65 -6
  295. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +17 -11
  296. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +34 -24
  297. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  298. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +19 -16
  299. metadata/generated/schema/entity/applications/createAppRequest.py +35 -23
  300. metadata/generated/schema/entity/applications/jobStatus.py +10 -6
  301. metadata/generated/schema/entity/applications/liveExecutionContext.py +15 -6
  302. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  303. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +144 -89
  304. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +95 -64
  305. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +8 -3
  306. metadata/generated/schema/entity/automations/__init__.py +1 -1
  307. metadata/generated/schema/entity/automations/testServiceConnection.py +47 -29
  308. metadata/generated/schema/entity/automations/workflow.py +82 -48
  309. metadata/generated/schema/entity/bot.py +64 -37
  310. metadata/generated/schema/entity/classification/__init__.py +1 -1
  311. metadata/generated/schema/entity/classification/classification.py +90 -50
  312. metadata/generated/schema/entity/classification/tag.py +104 -53
  313. metadata/generated/schema/entity/data/__init__.py +1 -1
  314. metadata/generated/schema/entity/data/apiCollection.py +145 -0
  315. metadata/generated/schema/entity/data/apiEndpoint.py +173 -0
  316. metadata/generated/schema/entity/data/chart.py +120 -72
  317. metadata/generated/schema/entity/data/container.py +178 -116
  318. metadata/generated/schema/entity/data/dashboard.py +141 -89
  319. metadata/generated/schema/entity/data/dashboardDataModel.py +129 -77
  320. metadata/generated/schema/entity/data/database.py +167 -104
  321. metadata/generated/schema/entity/data/databaseSchema.py +157 -98
  322. metadata/generated/schema/entity/data/glossary.py +118 -64
  323. metadata/generated/schema/entity/data/glossaryTerm.py +173 -105
  324. metadata/generated/schema/entity/data/metrics.py +93 -55
  325. metadata/generated/schema/entity/data/mlmodel.py +213 -148
  326. metadata/generated/schema/entity/data/pipeline.py +227 -150
  327. metadata/generated/schema/entity/data/query.py +126 -80
  328. metadata/generated/schema/entity/data/report.py +90 -49
  329. metadata/generated/schema/entity/data/searchIndex.py +171 -114
  330. metadata/generated/schema/entity/data/storedProcedure.py +140 -86
  331. metadata/generated/schema/entity/data/table.py +637 -436
  332. metadata/generated/schema/entity/data/topic.py +175 -111
  333. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  334. metadata/generated/schema/entity/docStore/document.py +52 -31
  335. metadata/generated/schema/entity/domains/__init__.py +1 -1
  336. metadata/generated/schema/entity/domains/dataProduct.py +72 -43
  337. metadata/generated/schema/entity/domains/domain.py +69 -45
  338. metadata/generated/schema/entity/events/__init__.py +1 -1
  339. metadata/generated/schema/entity/events/webhook.py +46 -25
  340. metadata/generated/schema/entity/feed/__init__.py +1 -1
  341. metadata/generated/schema/entity/feed/assets.py +7 -5
  342. metadata/generated/schema/entity/feed/customProperty.py +14 -7
  343. metadata/generated/schema/entity/feed/description.py +21 -13
  344. metadata/generated/schema/entity/feed/domain.py +15 -10
  345. metadata/generated/schema/entity/feed/entityInfo.py +14 -8
  346. metadata/generated/schema/entity/feed/owner.py +16 -11
  347. metadata/generated/schema/entity/feed/suggestion.py +112 -35
  348. metadata/generated/schema/entity/feed/tag.py +15 -10
  349. metadata/generated/schema/entity/feed/testCaseResult.py +19 -13
  350. metadata/generated/schema/entity/feed/thread.py +226 -148
  351. metadata/generated/schema/entity/policies/__init__.py +1 -1
  352. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  353. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +25 -12
  354. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +42 -28
  355. metadata/generated/schema/entity/policies/accessControl/rule.py +36 -23
  356. metadata/generated/schema/entity/policies/filters.py +14 -12
  357. metadata/generated/schema/entity/policies/policy.py +107 -67
  358. metadata/generated/schema/entity/services/__init__.py +1 -1
  359. metadata/generated/schema/entity/services/apiService.py +114 -0
  360. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  361. metadata/generated/schema/entity/services/connections/apiService/__init__.py +5 -0
  362. metadata/generated/schema/entity/services/connections/apiService/restConnection.py +38 -0
  363. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -3
  364. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +21 -13
  365. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +30 -19
  366. metadata/generated/schema/entity/services/connections/common/sslConfig.py +14 -8
  367. metadata/generated/schema/entity/services/connections/connectionBasicType.py +71 -55
  368. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  369. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +23 -15
  370. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +44 -30
  371. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +50 -36
  372. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +51 -37
  373. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +31 -24
  374. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +35 -27
  375. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +35 -27
  376. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +97 -63
  377. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  378. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +25 -18
  379. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +23 -14
  380. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +25 -18
  381. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +25 -18
  382. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +27 -19
  383. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +53 -36
  384. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +38 -23
  385. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +30 -21
  386. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +30 -22
  387. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +46 -35
  388. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  389. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +70 -52
  390. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +131 -89
  391. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +83 -56
  392. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +31 -22
  393. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +109 -72
  394. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  395. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +11 -7
  396. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +10 -8
  397. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +11 -7
  398. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +10 -8
  399. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +46 -32
  400. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +23 -15
  401. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +87 -60
  402. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  403. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +11 -7
  404. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +11 -7
  405. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +11 -7
  406. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +59 -43
  407. metadata/generated/schema/entity/services/connections/database/db2Connection.py +64 -48
  408. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +41 -85
  409. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +3 -0
  410. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +109 -0
  411. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +42 -0
  412. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +52 -33
  413. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +73 -52
  414. metadata/generated/schema/entity/services/connections/database/druidConnection.py +66 -47
  415. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +38 -27
  416. metadata/generated/schema/entity/services/connections/database/glueConnection.py +34 -24
  417. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +85 -56
  418. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +108 -75
  419. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  420. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +11 -6
  421. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +7 -5
  422. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +14 -9
  423. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +36 -25
  424. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +7 -5
  425. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +67 -46
  426. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +23 -15
  427. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +102 -67
  428. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +75 -52
  429. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +56 -38
  430. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +89 -60
  431. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +88 -60
  432. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +105 -74
  433. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +78 -54
  434. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +97 -65
  435. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +90 -61
  436. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +78 -55
  437. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +75 -47
  438. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +84 -0
  439. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  440. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +15 -9
  441. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +33 -24
  442. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +53 -38
  443. metadata/generated/schema/entity/services/connections/database/sasConnection.py +45 -31
  444. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +82 -54
  445. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +121 -80
  446. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +82 -56
  447. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +168 -0
  448. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +92 -62
  449. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +108 -72
  450. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +89 -60
  451. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +71 -50
  452. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  453. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +23 -15
  454. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +101 -61
  455. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +18 -13
  456. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +15 -10
  457. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +85 -54
  458. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  459. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  460. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +117 -74
  461. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +72 -0
  462. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +43 -28
  463. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +40 -27
  464. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +50 -40
  465. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +151 -92
  466. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  467. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +23 -15
  468. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +29 -20
  469. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +20 -13
  470. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +15 -10
  471. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  472. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +25 -18
  473. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +34 -26
  474. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +11 -7
  475. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +23 -15
  476. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +29 -20
  477. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +37 -27
  478. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +43 -0
  479. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +44 -28
  480. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +37 -27
  481. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +35 -0
  482. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +18 -13
  483. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +62 -40
  484. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +71 -45
  485. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +71 -41
  486. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +11 -7
  487. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +28 -18
  488. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  489. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +23 -15
  490. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  491. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +22 -15
  492. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +14 -11
  493. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +48 -31
  494. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +54 -35
  495. metadata/generated/schema/entity/services/connections/serviceConnection.py +38 -22
  496. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  497. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +27 -19
  498. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +23 -15
  499. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +34 -20
  500. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +32 -22
  501. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +96 -57
  502. metadata/generated/schema/entity/services/connections/testConnectionResult.py +40 -26
  503. metadata/generated/schema/entity/services/dashboardService.py +93 -62
  504. metadata/generated/schema/entity/services/databaseService.py +101 -63
  505. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  506. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +198 -122
  507. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +24 -13
  508. metadata/generated/schema/entity/services/ingestionPipelines/status.py +47 -37
  509. metadata/generated/schema/entity/services/messagingService.py +103 -69
  510. metadata/generated/schema/entity/services/metadataService.py +96 -56
  511. metadata/generated/schema/entity/services/mlmodelService.py +96 -63
  512. metadata/generated/schema/entity/services/pipelineService.py +102 -63
  513. metadata/generated/schema/entity/services/searchService.py +92 -62
  514. metadata/generated/schema/entity/services/serviceType.py +2 -1
  515. metadata/generated/schema/entity/services/storageService.py +93 -62
  516. metadata/generated/schema/entity/teams/__init__.py +1 -1
  517. metadata/generated/schema/entity/teams/persona.py +59 -35
  518. metadata/generated/schema/entity/teams/role.py +82 -51
  519. metadata/generated/schema/entity/teams/team.py +128 -82
  520. metadata/generated/schema/entity/teams/teamHierarchy.py +52 -35
  521. metadata/generated/schema/entity/teams/user.py +122 -81
  522. metadata/generated/schema/entity/type.py +94 -48
  523. metadata/generated/schema/entity/utils/__init__.py +1 -1
  524. metadata/generated/schema/entity/utils/entitiesCount.py +25 -18
  525. metadata/generated/schema/entity/utils/servicesCount.py +25 -22
  526. metadata/generated/schema/entity/utils/supersetApiConnection.py +19 -14
  527. metadata/generated/schema/events/__init__.py +1 -1
  528. metadata/generated/schema/events/alertMetrics.py +22 -14
  529. metadata/generated/schema/events/api/__init__.py +1 -1
  530. metadata/generated/schema/events/api/createEventSubscription.py +63 -35
  531. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +27 -0
  532. metadata/generated/schema/events/emailAlertConfig.py +20 -12
  533. metadata/generated/schema/events/eventFilterRule.py +40 -24
  534. metadata/generated/schema/events/eventSubscription.py +220 -142
  535. metadata/generated/schema/events/eventSubscriptionOffset.py +12 -8
  536. metadata/generated/schema/events/failedEvent.py +25 -13
  537. metadata/generated/schema/events/filterResourceDescriptor.py +24 -14
  538. metadata/generated/schema/events/subscriptionResourceDescriptor.py +20 -11
  539. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  540. metadata/generated/schema/metadataIngestion/application.py +39 -25
  541. metadata/generated/schema/metadataIngestion/applicationPipeline.py +23 -16
  542. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +125 -67
  543. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +9 -6
  544. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +182 -106
  545. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +117 -73
  546. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +75 -47
  547. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +51 -32
  548. metadata/generated/schema/metadataIngestion/dbtPipeline.py +75 -51
  549. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  550. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +37 -25
  551. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +23 -14
  552. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +36 -27
  553. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +37 -25
  554. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +31 -20
  555. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +31 -20
  556. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +37 -25
  557. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +45 -22
  558. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +65 -43
  559. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +35 -17
  560. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +99 -50
  561. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +51 -27
  562. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  563. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +60 -33
  564. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +59 -38
  565. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +22 -14
  566. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +15 -10
  567. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +15 -10
  568. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +14 -9
  569. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +14 -9
  570. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +14 -10
  571. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +57 -28
  572. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +32 -17
  573. metadata/generated/schema/metadataIngestion/workflow.py +114 -62
  574. metadata/generated/schema/monitoring/__init__.py +1 -1
  575. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  576. metadata/generated/schema/security/__init__.py +1 -1
  577. metadata/generated/schema/security/client/__init__.py +1 -1
  578. metadata/generated/schema/security/client/auth0SSOClientConfig.py +10 -9
  579. metadata/generated/schema/security/client/azureSSOClientConfig.py +12 -11
  580. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +11 -10
  581. metadata/generated/schema/security/client/googleSSOClientConfig.py +17 -12
  582. metadata/generated/schema/security/client/oidcClientConfig.py +45 -30
  583. metadata/generated/schema/security/client/oktaSSOClientConfig.py +14 -11
  584. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +9 -8
  585. metadata/generated/schema/security/client/samlSSOClientConfig.py +104 -67
  586. metadata/generated/schema/security/credentials/__init__.py +1 -1
  587. metadata/generated/schema/security/credentials/accessTokenAuth.py +17 -13
  588. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +10 -8
  589. metadata/generated/schema/security/credentials/awsCredentials.py +57 -38
  590. metadata/generated/schema/security/credentials/azureCredentials.py +47 -29
  591. metadata/generated/schema/security/credentials/basicAuth.py +13 -11
  592. metadata/generated/schema/security/credentials/bitbucketCredentials.py +22 -14
  593. metadata/generated/schema/security/credentials/gcpCredentials.py +66 -33
  594. metadata/generated/schema/security/credentials/gcpExternalAccount.py +55 -26
  595. metadata/generated/schema/security/credentials/gcpValues.py +70 -49
  596. metadata/generated/schema/security/credentials/gitCredentials.py +32 -25
  597. metadata/generated/schema/security/credentials/githubCredentials.py +13 -7
  598. metadata/generated/schema/security/credentials/gitlabCredentials.py +34 -0
  599. metadata/generated/schema/security/sasl/__init__.py +3 -0
  600. metadata/generated/schema/security/sasl/saslClientConfig.py +40 -0
  601. metadata/generated/schema/security/secrets/__init__.py +1 -1
  602. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  603. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +39 -24
  604. metadata/generated/schema/security/secrets/secretsManagerProvider.py +2 -1
  605. metadata/generated/schema/security/securityConfiguration.py +15 -9
  606. metadata/generated/schema/security/ssl/__init__.py +1 -1
  607. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +30 -20
  608. metadata/generated/schema/security/ssl/verifySSLConfig.py +16 -18
  609. metadata/generated/schema/settings/__init__.py +1 -1
  610. metadata/generated/schema/settings/settings.py +10 -5
  611. metadata/generated/schema/system/__init__.py +1 -1
  612. metadata/generated/schema/system/entityError.py +7 -5
  613. metadata/generated/schema/system/eventPublisherJob.py +58 -37
  614. metadata/generated/schema/system/indexingError.py +7 -5
  615. metadata/generated/schema/system/limitsResponse.py +20 -0
  616. metadata/generated/schema/system/ui/__init__.py +1 -1
  617. metadata/generated/schema/system/ui/knowledgePanel.py +12 -8
  618. metadata/generated/schema/system/ui/page.py +24 -18
  619. metadata/generated/schema/system/validationResponse.py +40 -28
  620. metadata/generated/schema/tests/__init__.py +1 -1
  621. metadata/generated/schema/tests/assigned.py +11 -7
  622. metadata/generated/schema/tests/basic.py +98 -55
  623. metadata/generated/schema/tests/customMetric.py +41 -29
  624. metadata/generated/schema/tests/dataQualityReport.py +40 -0
  625. metadata/generated/schema/tests/resolved.py +17 -13
  626. metadata/generated/schema/tests/testCase.py +137 -76
  627. metadata/generated/schema/tests/testCaseResolutionStatus.py +49 -33
  628. metadata/generated/schema/tests/testDefinition.py +129 -67
  629. metadata/generated/schema/tests/testSuite.py +137 -75
  630. metadata/generated/schema/type/__init__.py +1 -1
  631. metadata/generated/schema/type/apiSchema.py +27 -0
  632. metadata/generated/schema/type/auditLog.py +29 -20
  633. metadata/generated/schema/type/basic.py +177 -110
  634. metadata/generated/schema/type/bulkOperationResult.py +45 -30
  635. metadata/generated/schema/type/changeEvent.py +72 -40
  636. metadata/generated/schema/type/changeEventType.py +1 -1
  637. metadata/generated/schema/type/collectionDescriptor.py +24 -15
  638. metadata/generated/schema/type/csvDocumentation.py +11 -8
  639. metadata/generated/schema/type/csvErrorType.py +1 -1
  640. metadata/generated/schema/type/csvFile.py +25 -17
  641. metadata/generated/schema/type/csvImportResult.py +34 -21
  642. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  643. metadata/generated/schema/type/customProperties/complexTypes.py +110 -64
  644. metadata/generated/schema/type/customProperties/enumConfig.py +7 -5
  645. metadata/generated/schema/type/customProperty.py +34 -25
  646. metadata/generated/schema/type/dailyCount.py +10 -7
  647. metadata/generated/schema/type/databaseConnectionConfig.py +69 -42
  648. metadata/generated/schema/type/entityHierarchy.py +35 -26
  649. metadata/generated/schema/type/entityHistory.py +71 -45
  650. metadata/generated/schema/type/entityLineage.py +89 -57
  651. metadata/generated/schema/type/entityReference.py +51 -30
  652. metadata/generated/schema/type/entityReferenceList.py +11 -8
  653. metadata/generated/schema/type/entityRelationship.py +68 -39
  654. metadata/generated/schema/type/entityUsage.py +15 -10
  655. metadata/generated/schema/type/filterPattern.py +21 -12
  656. metadata/generated/schema/type/function.py +30 -21
  657. metadata/generated/schema/type/include.py +1 -1
  658. metadata/generated/schema/type/jdbcConnection.py +24 -19
  659. metadata/generated/schema/type/lifeCycle.py +47 -26
  660. metadata/generated/schema/type/paging.py +32 -21
  661. metadata/generated/schema/type/profile.py +13 -11
  662. metadata/generated/schema/type/queryParserData.py +47 -32
  663. metadata/generated/schema/type/reaction.py +13 -8
  664. metadata/generated/schema/type/schedule.py +18 -11
  665. metadata/generated/schema/type/schema.py +64 -44
  666. metadata/generated/schema/type/tableQuery.py +53 -40
  667. metadata/generated/schema/type/tableUsageCount.py +46 -33
  668. metadata/generated/schema/type/tagLabel.py +36 -24
  669. metadata/generated/schema/type/usageDetails.py +40 -24
  670. metadata/generated/schema/type/usageRequest.py +10 -7
  671. metadata/generated/schema/type/votes.py +21 -12
  672. metadata/great_expectations/action.py +14 -12
  673. metadata/great_expectations/utils/ometa_config_handler.py +1 -1
  674. metadata/ingestion/api/common.py +3 -4
  675. metadata/ingestion/api/delete.py +1 -1
  676. metadata/ingestion/api/models.py +6 -8
  677. metadata/ingestion/api/parser.py +13 -17
  678. metadata/ingestion/api/status.py +35 -13
  679. metadata/ingestion/api/topology_runner.py +2 -1
  680. metadata/ingestion/bulksink/metadata_usage.py +17 -14
  681. metadata/ingestion/connections/builders.py +18 -12
  682. metadata/ingestion/connections/secrets.py +8 -6
  683. metadata/ingestion/connections/test_connections.py +7 -2
  684. metadata/ingestion/lineage/models.py +5 -4
  685. metadata/ingestion/lineage/sql_lineage.py +43 -13
  686. metadata/ingestion/models/custom_properties.py +9 -9
  687. metadata/ingestion/models/custom_pydantic.py +70 -44
  688. metadata/ingestion/models/lf_tags_model.py +3 -3
  689. metadata/ingestion/models/ometa_classification.py +1 -1
  690. metadata/ingestion/models/ometa_lineage.py +24 -0
  691. metadata/ingestion/models/patch_request.py +96 -56
  692. metadata/ingestion/models/table_metadata.py +2 -2
  693. metadata/ingestion/models/topology.py +18 -12
  694. metadata/ingestion/ometa/client.py +34 -8
  695. metadata/ingestion/ometa/client_utils.py +6 -7
  696. metadata/ingestion/ometa/mixins/custom_property_mixin.py +2 -4
  697. metadata/ingestion/ometa/mixins/dashboard_mixin.py +2 -2
  698. metadata/ingestion/ometa/mixins/data_insight_mixin.py +10 -6
  699. metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +5 -3
  700. metadata/ingestion/ometa/mixins/lineage_mixin.py +36 -15
  701. metadata/ingestion/ometa/mixins/mlmodel_mixin.py +2 -2
  702. metadata/ingestion/ometa/mixins/patch_mixin.py +32 -30
  703. metadata/ingestion/ometa/mixins/pipeline_mixin.py +3 -3
  704. metadata/ingestion/ometa/mixins/query_mixin.py +4 -4
  705. metadata/ingestion/ometa/mixins/role_policy_mixin.py +13 -13
  706. metadata/ingestion/ometa/mixins/search_index_mixin.py +5 -5
  707. metadata/ingestion/ometa/mixins/server_mixin.py +4 -5
  708. metadata/ingestion/ometa/mixins/service_mixin.py +2 -2
  709. metadata/ingestion/ometa/mixins/suggestions_mixin.py +2 -2
  710. metadata/ingestion/ometa/mixins/table_mixin.py +20 -20
  711. metadata/ingestion/ometa/mixins/tests_mixin.py +21 -18
  712. metadata/ingestion/ometa/mixins/topic_mixin.py +2 -2
  713. metadata/ingestion/ometa/mixins/user_mixin.py +44 -23
  714. metadata/ingestion/ometa/models.py +1 -1
  715. metadata/ingestion/ometa/ometa_api.py +6 -7
  716. metadata/ingestion/ometa/routes.py +18 -0
  717. metadata/ingestion/ometa/ttl_cache.py +47 -0
  718. metadata/ingestion/ometa/utils.py +3 -3
  719. metadata/ingestion/processor/query_parser.py +3 -3
  720. metadata/ingestion/sink/file.py +2 -2
  721. metadata/ingestion/sink/metadata_rest.py +59 -29
  722. metadata/ingestion/source/dashboard/dashboard_service.py +45 -45
  723. metadata/ingestion/source/dashboard/domodashboard/metadata.py +31 -19
  724. metadata/ingestion/source/dashboard/lightdash/client.py +1 -1
  725. metadata/ingestion/source/dashboard/lightdash/metadata.py +26 -14
  726. metadata/ingestion/source/dashboard/lightdash/models.py +11 -11
  727. metadata/ingestion/source/dashboard/looker/bulk_parser.py +3 -3
  728. metadata/ingestion/source/dashboard/looker/connection.py +1 -1
  729. metadata/ingestion/source/dashboard/looker/metadata.py +67 -42
  730. metadata/ingestion/source/dashboard/looker/parser.py +3 -3
  731. metadata/ingestion/source/dashboard/looker/utils.py +8 -5
  732. metadata/ingestion/source/dashboard/metabase/client.py +19 -2
  733. metadata/ingestion/source/dashboard/metabase/metadata.py +45 -14
  734. metadata/ingestion/source/dashboard/metabase/models.py +46 -28
  735. metadata/ingestion/source/dashboard/mode/client.py +1 -1
  736. metadata/ingestion/source/dashboard/mode/metadata.py +24 -14
  737. metadata/ingestion/source/dashboard/mstr/client.py +1 -1
  738. metadata/ingestion/source/dashboard/mstr/metadata.py +18 -11
  739. metadata/ingestion/source/dashboard/mstr/models.py +4 -4
  740. metadata/ingestion/source/dashboard/powerbi/client.py +2 -3
  741. metadata/ingestion/source/dashboard/powerbi/metadata.py +52 -31
  742. metadata/ingestion/source/dashboard/powerbi/models.py +25 -22
  743. metadata/ingestion/source/dashboard/qlikcloud/client.py +2 -2
  744. metadata/ingestion/source/dashboard/qlikcloud/metadata.py +28 -16
  745. metadata/ingestion/source/dashboard/qlikcloud/models.py +4 -4
  746. metadata/ingestion/source/dashboard/qliksense/client.py +3 -3
  747. metadata/ingestion/source/dashboard/qliksense/metadata.py +35 -19
  748. metadata/ingestion/source/dashboard/qliksense/models.py +8 -8
  749. metadata/ingestion/source/dashboard/quicksight/metadata.py +26 -18
  750. metadata/ingestion/source/dashboard/quicksight/models.py +16 -16
  751. metadata/ingestion/source/dashboard/redash/client.py +1 -1
  752. metadata/ingestion/source/dashboard/redash/metadata.py +31 -19
  753. metadata/ingestion/source/dashboard/superset/api_source.py +46 -18
  754. metadata/ingestion/source/dashboard/superset/client.py +2 -2
  755. metadata/ingestion/source/dashboard/superset/db_source.py +44 -18
  756. metadata/ingestion/source/dashboard/superset/metadata.py +2 -2
  757. metadata/ingestion/source/dashboard/superset/mixin.py +12 -13
  758. metadata/ingestion/source/dashboard/superset/models.py +68 -68
  759. metadata/ingestion/source/dashboard/tableau/connection.py +2 -2
  760. metadata/ingestion/source/dashboard/tableau/metadata.py +406 -99
  761. metadata/ingestion/source/dashboard/tableau/models.py +33 -35
  762. metadata/ingestion/source/dashboard/tableau/queries.py +14 -0
  763. metadata/ingestion/source/database/athena/connection.py +34 -5
  764. metadata/ingestion/source/database/athena/metadata.py +43 -168
  765. metadata/ingestion/source/database/athena/models.py +10 -10
  766. metadata/ingestion/source/database/athena/query_parser.py +2 -2
  767. metadata/ingestion/source/database/athena/utils.py +191 -0
  768. metadata/ingestion/source/database/azuresql/metadata.py +4 -4
  769. metadata/ingestion/source/database/azuresql/query_parser.py +2 -2
  770. metadata/ingestion/source/database/bigquery/connection.py +17 -5
  771. metadata/ingestion/source/database/bigquery/helper.py +1 -1
  772. metadata/ingestion/source/database/bigquery/metadata.py +91 -52
  773. metadata/ingestion/source/database/bigquery/query_parser.py +3 -3
  774. metadata/ingestion/source/database/bigtable/connection.py +2 -2
  775. metadata/ingestion/source/database/bigtable/metadata.py +2 -2
  776. metadata/ingestion/source/database/clickhouse/connection.py +3 -3
  777. metadata/ingestion/source/database/clickhouse/metadata.py +11 -8
  778. metadata/ingestion/source/database/clickhouse/query_parser.py +4 -4
  779. metadata/ingestion/source/database/column_type_parser.py +20 -12
  780. metadata/ingestion/source/database/common_db_source.py +106 -48
  781. metadata/ingestion/source/database/common_nosql_source.py +22 -17
  782. metadata/ingestion/source/database/couchbase/connection.py +1 -1
  783. metadata/ingestion/source/database/couchbase/metadata.py +3 -3
  784. metadata/ingestion/source/database/database_service.py +30 -17
  785. metadata/ingestion/source/database/databricks/connection.py +1 -1
  786. metadata/ingestion/source/database/databricks/lineage.py +4 -3
  787. metadata/ingestion/source/database/databricks/metadata.py +93 -24
  788. metadata/ingestion/source/database/databricks/queries.py +5 -1
  789. metadata/ingestion/source/database/databricks/query_parser.py +2 -2
  790. metadata/ingestion/source/database/databricks/usage.py +4 -3
  791. metadata/ingestion/source/database/datalake/clients/azure_blob.py +72 -0
  792. metadata/ingestion/source/database/datalake/clients/base.py +47 -0
  793. metadata/ingestion/source/database/datalake/clients/gcs.py +136 -0
  794. metadata/ingestion/source/database/datalake/clients/s3.py +79 -0
  795. metadata/ingestion/source/database/datalake/connection.py +12 -70
  796. metadata/ingestion/source/database/datalake/metadata.py +75 -219
  797. metadata/ingestion/source/database/db2/metadata.py +13 -13
  798. metadata/ingestion/source/database/dbt/dbt_config.py +3 -2
  799. metadata/ingestion/source/database/dbt/dbt_service.py +15 -6
  800. metadata/ingestion/source/database/dbt/metadata.py +128 -83
  801. metadata/ingestion/source/database/dbt/models.py +9 -9
  802. metadata/ingestion/source/database/deltalake/clients/__init__.py +0 -0
  803. metadata/ingestion/source/database/deltalake/clients/base.py +82 -0
  804. metadata/ingestion/source/database/deltalake/clients/pyspark.py +304 -0
  805. metadata/ingestion/source/database/deltalake/clients/s3.py +200 -0
  806. metadata/ingestion/source/database/deltalake/connection.py +56 -84
  807. metadata/ingestion/source/database/deltalake/metadata.py +67 -193
  808. metadata/ingestion/source/database/domodatabase/metadata.py +83 -38
  809. metadata/ingestion/source/database/domodatabase/models.py +6 -6
  810. metadata/ingestion/source/database/doris/metadata.py +3 -3
  811. metadata/ingestion/source/database/druid/metadata.py +2 -2
  812. metadata/ingestion/source/database/dynamodb/metadata.py +5 -5
  813. metadata/ingestion/source/database/dynamodb/models.py +2 -2
  814. metadata/ingestion/source/database/extended_sample_data.py +41 -41
  815. metadata/ingestion/source/database/external_table_lineage_mixin.py +58 -3
  816. metadata/ingestion/source/database/glue/metadata.py +23 -18
  817. metadata/ingestion/source/database/glue/models.py +6 -6
  818. metadata/ingestion/source/database/greenplum/metadata.py +4 -4
  819. metadata/ingestion/source/database/hive/connection.py +2 -2
  820. metadata/ingestion/source/database/hive/metadata.py +2 -2
  821. metadata/ingestion/source/database/iceberg/catalog/hive.py +1 -1
  822. metadata/ingestion/source/database/iceberg/catalog/rest.py +1 -1
  823. metadata/ingestion/source/database/iceberg/fs/__init__.py +1 -1
  824. metadata/ingestion/source/database/iceberg/fs/s3.py +1 -1
  825. metadata/ingestion/source/database/iceberg/helper.py +4 -4
  826. metadata/ingestion/source/database/iceberg/metadata.py +28 -22
  827. metadata/ingestion/source/database/iceberg/models.py +6 -6
  828. metadata/ingestion/source/database/impala/connection.py +3 -3
  829. metadata/ingestion/source/database/impala/metadata.py +2 -2
  830. metadata/ingestion/source/database/incremental_metadata_extraction.py +1 -1
  831. metadata/ingestion/source/database/life_cycle_query_mixin.py +12 -8
  832. metadata/ingestion/source/database/lineage_source.py +25 -13
  833. metadata/ingestion/source/database/mariadb/metadata.py +2 -2
  834. metadata/ingestion/source/database/mongodb/connection.py +1 -1
  835. metadata/ingestion/source/database/mongodb/metadata.py +2 -2
  836. metadata/ingestion/source/database/mssql/constants.py +23 -0
  837. metadata/ingestion/source/database/mssql/lineage.py +25 -0
  838. metadata/ingestion/source/database/mssql/metadata.py +30 -10
  839. metadata/ingestion/source/database/mssql/queries.py +2 -0
  840. metadata/ingestion/source/database/mssql/query_parser.py +2 -2
  841. metadata/ingestion/source/database/mssql/usage.py +42 -0
  842. metadata/ingestion/source/database/mssql/utils.py +16 -1
  843. metadata/ingestion/source/database/mysql/metadata.py +2 -2
  844. metadata/ingestion/source/database/oracle/metadata.py +16 -13
  845. metadata/ingestion/source/database/oracle/models.py +1 -1
  846. metadata/ingestion/source/database/oracle/query_parser.py +2 -2
  847. metadata/ingestion/source/database/pinotdb/metadata.py +2 -2
  848. metadata/ingestion/source/database/postgres/converter_orm.py +52 -0
  849. metadata/ingestion/source/database/postgres/lineage.py +2 -1
  850. metadata/ingestion/source/database/postgres/metadata.py +34 -6
  851. metadata/ingestion/source/database/postgres/metrics.py +42 -0
  852. metadata/ingestion/source/database/postgres/pgspider/lineage.py +2 -2
  853. metadata/ingestion/source/database/postgres/queries.py +7 -0
  854. metadata/ingestion/source/database/postgres/query_parser.py +4 -4
  855. metadata/ingestion/source/database/postgres/types/money.py +37 -0
  856. metadata/ingestion/source/database/postgres/usage.py +15 -2
  857. metadata/ingestion/source/database/presto/connection.py +2 -2
  858. metadata/ingestion/source/database/presto/metadata.py +2 -2
  859. metadata/ingestion/source/database/query/lineage.py +1 -1
  860. metadata/ingestion/source/database/query/usage.py +5 -3
  861. metadata/ingestion/source/database/query_parser_source.py +1 -1
  862. metadata/ingestion/source/database/redshift/connection.py +37 -9
  863. metadata/ingestion/source/database/redshift/metadata.py +7 -7
  864. metadata/ingestion/source/database/redshift/models.py +1 -1
  865. metadata/ingestion/source/database/redshift/queries.py +30 -7
  866. metadata/ingestion/source/database/redshift/query_parser.py +2 -2
  867. metadata/ingestion/source/database/salesforce/connection.py +1 -3
  868. metadata/ingestion/source/database/salesforce/metadata.py +22 -17
  869. metadata/ingestion/source/database/sample_data.py +198 -98
  870. metadata/ingestion/source/database/sample_usage.py +5 -7
  871. metadata/ingestion/source/database/saperp/__init__.py +0 -0
  872. metadata/ingestion/source/database/saperp/client.py +170 -0
  873. metadata/ingestion/source/database/saperp/connection.py +50 -0
  874. metadata/ingestion/source/database/saperp/constants.py +27 -0
  875. metadata/ingestion/source/database/saperp/metadata.py +322 -0
  876. metadata/ingestion/source/database/saperp/models.py +100 -0
  877. metadata/ingestion/source/database/saphana/metadata.py +2 -2
  878. metadata/ingestion/source/database/sas/client.py +2 -2
  879. metadata/ingestion/source/database/sas/metadata.py +35 -44
  880. metadata/ingestion/source/database/singlestore/metadata.py +2 -2
  881. metadata/ingestion/source/database/snowflake/connection.py +3 -3
  882. metadata/ingestion/source/database/snowflake/metadata.py +39 -12
  883. metadata/ingestion/source/database/snowflake/models.py +7 -7
  884. metadata/ingestion/source/database/snowflake/query_parser.py +2 -2
  885. metadata/ingestion/source/database/sql_column_handler.py +4 -3
  886. metadata/ingestion/source/database/sqlite/metadata.py +2 -2
  887. metadata/ingestion/source/database/stored_procedures_mixin.py +10 -11
  888. metadata/ingestion/source/database/teradata/metadata.py +4 -4
  889. metadata/ingestion/source/database/trino/connection.py +5 -7
  890. metadata/ingestion/source/database/trino/metadata.py +2 -2
  891. metadata/ingestion/source/database/trino/query_parser.py +2 -2
  892. metadata/ingestion/source/database/unitycatalog/client.py +21 -0
  893. metadata/ingestion/source/database/unitycatalog/lineage.py +7 -7
  894. metadata/ingestion/source/database/unitycatalog/metadata.py +82 -42
  895. metadata/ingestion/source/database/unitycatalog/models.py +16 -16
  896. metadata/ingestion/source/database/unitycatalog/query_parser.py +2 -2
  897. metadata/ingestion/source/database/usage_source.py +51 -34
  898. metadata/ingestion/source/database/vertica/metadata.py +3 -3
  899. metadata/ingestion/source/database/vertica/query_parser.py +4 -4
  900. metadata/ingestion/source/messaging/common_broker_source.py +18 -4
  901. metadata/ingestion/source/messaging/kafka/connection.py +1 -1
  902. metadata/ingestion/source/messaging/kafka/metadata.py +7 -9
  903. metadata/ingestion/source/messaging/kinesis/metadata.py +10 -5
  904. metadata/ingestion/source/messaging/kinesis/models.py +3 -5
  905. metadata/ingestion/source/messaging/messaging_service.py +12 -7
  906. metadata/ingestion/source/messaging/redpanda/metadata.py +2 -2
  907. metadata/ingestion/source/metadata/alationsink/__init__.py +0 -0
  908. metadata/ingestion/source/metadata/alationsink/client.py +213 -0
  909. metadata/ingestion/source/metadata/alationsink/connection.py +53 -0
  910. metadata/ingestion/source/metadata/alationsink/constants.py +60 -0
  911. metadata/ingestion/source/metadata/alationsink/metadata.py +397 -0
  912. metadata/ingestion/source/metadata/alationsink/models.py +148 -0
  913. metadata/ingestion/source/metadata/amundsen/connection.py +1 -1
  914. metadata/ingestion/source/metadata/amundsen/metadata.py +14 -10
  915. metadata/ingestion/source/metadata/atlas/client.py +1 -1
  916. metadata/ingestion/source/metadata/atlas/metadata.py +11 -12
  917. metadata/ingestion/source/mlmodel/mlflow/metadata.py +12 -6
  918. metadata/ingestion/source/mlmodel/mlmodel_service.py +13 -6
  919. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +34 -21
  920. metadata/ingestion/source/pipeline/airbyte/client.py +1 -1
  921. metadata/ingestion/source/pipeline/airbyte/metadata.py +15 -11
  922. metadata/ingestion/source/pipeline/airflow/lineage_parser.py +3 -4
  923. metadata/ingestion/source/pipeline/airflow/metadata.py +28 -17
  924. metadata/ingestion/source/pipeline/airflow/models.py +21 -24
  925. metadata/ingestion/source/pipeline/dagster/client.py +3 -3
  926. metadata/ingestion/source/pipeline/dagster/metadata.py +31 -17
  927. metadata/ingestion/source/pipeline/dagster/models.py +14 -14
  928. metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +120 -126
  929. metadata/ingestion/source/pipeline/databrickspipeline/models.py +72 -0
  930. metadata/ingestion/source/pipeline/dbtcloud/__init__.py +0 -0
  931. metadata/ingestion/source/pipeline/dbtcloud/client.py +143 -0
  932. metadata/ingestion/source/pipeline/dbtcloud/connection.py +60 -0
  933. metadata/ingestion/source/pipeline/dbtcloud/metadata.py +345 -0
  934. metadata/ingestion/source/pipeline/dbtcloud/models.py +72 -0
  935. metadata/ingestion/source/pipeline/dbtcloud/queries.py +45 -0
  936. metadata/ingestion/source/pipeline/domopipeline/metadata.py +21 -12
  937. metadata/ingestion/source/pipeline/fivetran/client.py +20 -6
  938. metadata/ingestion/source/pipeline/fivetran/metadata.py +124 -50
  939. metadata/ingestion/source/pipeline/fivetran/models.py +20 -0
  940. metadata/ingestion/source/pipeline/flink/client.py +53 -0
  941. metadata/ingestion/source/pipeline/flink/connection.py +52 -0
  942. metadata/ingestion/source/pipeline/flink/metadata.py +188 -0
  943. metadata/ingestion/source/pipeline/flink/models.py +44 -0
  944. metadata/ingestion/source/pipeline/gluepipeline/metadata.py +23 -11
  945. metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +7 -8
  946. metadata/ingestion/source/pipeline/nifi/metadata.py +17 -8
  947. metadata/ingestion/source/pipeline/openlineage/connection.py +12 -3
  948. metadata/ingestion/source/pipeline/openlineage/metadata.py +3 -27
  949. metadata/ingestion/source/pipeline/pipeline_service.py +52 -8
  950. metadata/ingestion/source/pipeline/spline/client.py +1 -1
  951. metadata/ingestion/source/pipeline/spline/metadata.py +3 -3
  952. metadata/ingestion/source/pipeline/spline/models.py +12 -12
  953. metadata/ingestion/source/search/elasticsearch/connection.py +2 -2
  954. metadata/ingestion/source/search/elasticsearch/metadata.py +5 -4
  955. metadata/ingestion/source/search/search_service.py +13 -6
  956. metadata/ingestion/source/storage/gcs/client.py +58 -0
  957. metadata/ingestion/source/storage/gcs/connection.py +159 -0
  958. metadata/ingestion/source/storage/gcs/metadata.py +465 -0
  959. metadata/ingestion/source/storage/gcs/models.py +86 -0
  960. metadata/ingestion/source/storage/s3/metadata.py +268 -18
  961. metadata/ingestion/source/storage/s3/models.py +30 -11
  962. metadata/ingestion/source/storage/storage_service.py +43 -7
  963. metadata/ingestion/stage/table_usage.py +3 -3
  964. metadata/mixins/pandas/pandas_mixin.py +2 -2
  965. metadata/mixins/sqalchemy/sqa_mixin.py +1 -1
  966. metadata/parsers/avro_parser.py +12 -10
  967. metadata/parsers/json_schema_parser.py +4 -4
  968. metadata/parsers/protobuf_parser.py +4 -5
  969. metadata/pii/processor.py +4 -6
  970. metadata/profiler/adaptors/dynamodb.py +2 -2
  971. metadata/profiler/adaptors/mongodb.py +5 -17
  972. metadata/profiler/api/models.py +9 -9
  973. metadata/profiler/interface/nosql/profiler_interface.py +5 -8
  974. metadata/profiler/interface/pandas/profiler_interface.py +8 -10
  975. metadata/profiler/interface/profiler_interface.py +3 -3
  976. metadata/profiler/interface/profiler_interface_factory.py +46 -51
  977. metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +28 -17
  978. metadata/profiler/interface/sqlalchemy/profiler_interface.py +25 -14
  979. metadata/profiler/metrics/composed/null_ratio.py +5 -4
  980. metadata/profiler/metrics/static/mean.py +16 -8
  981. metadata/profiler/metrics/system/queries/snowflake.py +1 -1
  982. metadata/profiler/metrics/window/percentille_mixin.py +1 -1
  983. metadata/profiler/orm/converter/base.py +21 -13
  984. metadata/profiler/orm/converter/common.py +3 -4
  985. metadata/profiler/orm/functions/datetime.py +1 -1
  986. metadata/profiler/orm/functions/median.py +11 -4
  987. metadata/profiler/orm/functions/sum.py +8 -1
  988. metadata/profiler/orm/functions/table_metric_computer.py +4 -5
  989. metadata/profiler/orm/registry.py +8 -1
  990. metadata/profiler/orm/types/custom_hex_byte_string.py +5 -3
  991. metadata/profiler/orm/types/undetermined_type.py +38 -0
  992. metadata/profiler/processor/core.py +19 -13
  993. metadata/profiler/processor/default.py +4 -1
  994. metadata/profiler/processor/processor.py +4 -4
  995. metadata/profiler/processor/sample_data_handler.py +5 -5
  996. metadata/profiler/processor/sampler/nosql/sampler.py +9 -4
  997. metadata/profiler/processor/sampler/sampler_factory.py +36 -6
  998. metadata/profiler/processor/sampler/sqlalchemy/azuresql/sampler.py +40 -0
  999. metadata/profiler/processor/sampler/sqlalchemy/sampler.py +33 -62
  1000. metadata/profiler/processor/sampler/sqlalchemy/snowflake/sampler.py +60 -0
  1001. metadata/profiler/source/base/profiler_source.py +12 -14
  1002. metadata/profiler/source/bigquery/profiler_source.py +2 -2
  1003. metadata/profiler/source/bigquery/type_mapper.py +2 -2
  1004. metadata/profiler/source/metadata.py +14 -16
  1005. metadata/profiler/source/metadata_ext.py +3 -3
  1006. metadata/readers/dataframe/avro.py +1 -3
  1007. metadata/readers/dataframe/models.py +29 -12
  1008. metadata/readers/dataframe/parquet.py +3 -3
  1009. metadata/readers/dataframe/reader_factory.py +6 -0
  1010. metadata/readers/file/api_reader.py +5 -2
  1011. metadata/readers/file/bitbucket.py +4 -4
  1012. metadata/readers/file/credentials.py +5 -5
  1013. metadata/readers/file/github.py +6 -6
  1014. metadata/readers/file/gitlab.py +172 -0
  1015. metadata/utils/class_helper.py +3 -5
  1016. metadata/utils/credentials.py +2 -2
  1017. metadata/utils/datalake/datalake_utils.py +4 -2
  1018. metadata/utils/entity_link.py +8 -0
  1019. metadata/utils/execution_time_tracker.py +2 -2
  1020. metadata/utils/filters.py +25 -17
  1021. metadata/utils/fqn.py +59 -14
  1022. metadata/utils/helpers.py +15 -12
  1023. metadata/utils/importer.py +29 -2
  1024. metadata/utils/life_cycle_utils.py +3 -3
  1025. metadata/utils/logger.py +9 -24
  1026. metadata/utils/lru_cache.py +3 -0
  1027. metadata/utils/metadata_service_helper.py +3 -1
  1028. metadata/utils/secrets/gcp_secrets_manager.py +128 -0
  1029. metadata/utils/secrets/secrets_manager_factory.py +3 -0
  1030. metadata/utils/source_hash.py +1 -1
  1031. metadata/utils/ssl_manager.py +20 -26
  1032. metadata/utils/ssl_registry.py +5 -1
  1033. metadata/utils/storage_metadata_config.py +6 -5
  1034. metadata/utils/tag_utils.py +21 -13
  1035. metadata/utils/time_utils.py +45 -5
  1036. metadata/workflow/application.py +4 -4
  1037. metadata/workflow/application_output_handler.py +6 -19
  1038. metadata/workflow/base.py +42 -5
  1039. metadata/workflow/data_quality.py +5 -5
  1040. metadata/workflow/ingestion.py +4 -6
  1041. metadata/workflow/metadata.py +4 -4
  1042. metadata/workflow/output_handler.py +35 -214
  1043. metadata/workflow/profiler.py +5 -5
  1044. metadata/workflow/usage.py +8 -6
  1045. metadata/workflow/workflow_init_error_handler.py +154 -0
  1046. metadata/workflow/workflow_output_handler.py +189 -98
  1047. metadata/workflow/workflow_status_mixin.py +20 -11
  1048. {openmetadata_ingestion-1.4.8.0.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/METADATA +388 -313
  1049. openmetadata_ingestion-1.5.0.0.dist-info/RECORD +1595 -0
  1050. {openmetadata_ingestion-1.4.8.0.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/top_level.txt +1 -0
  1051. metadata/cli/insight.py +0 -51
  1052. metadata/data_insight/processor/kpi/kpi_runner.py +0 -156
  1053. metadata/data_insight/processor/kpi/run_result_registry.py +0 -162
  1054. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +0 -253
  1055. metadata/data_insight/processor/reports/data_processor.py +0 -72
  1056. metadata/data_insight/processor/reports/entity_report_data_processor.py +0 -262
  1057. metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +0 -384
  1058. metadata/data_insight/producer/cost_analysis_producer.py +0 -126
  1059. metadata/data_insight/producer/entity_producer.py +0 -63
  1060. metadata/data_insight/producer/producer_factory.py +0 -53
  1061. metadata/data_insight/producer/web_analytics_producer.py +0 -84
  1062. metadata/data_insight/source/metadata.py +0 -175
  1063. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +0 -30
  1064. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +0 -30
  1065. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +0 -30
  1066. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +0 -30
  1067. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +0 -27
  1068. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +0 -27
  1069. metadata/workflow/data_insight.py +0 -78
  1070. openmetadata_ingestion-1.4.8.0.dist-info/RECORD +0 -1509
  1071. {metadata/cli → _openmetadata_testutils}/__init__.py +0 -0
  1072. {metadata/data_insight/processor → _openmetadata_testutils/helpers}/__init__.py +0 -0
  1073. {metadata/data_insight/processor/kpi → _openmetadata_testutils/kafka}/__init__.py +0 -0
  1074. {metadata/data_insight/processor/reports → _openmetadata_testutils/postgres}/__init__.py +0 -0
  1075. {metadata/data_insight/producer → _openmetadata_testutils/pydantic}/__init__.py +0 -0
  1076. /metadata/{data_insight/source → ingestion/source/database/datalake/clients}/__init__.py +0 -0
  1077. {openmetadata_ingestion-1.4.8.0.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/LICENSE +0 -0
  1078. {openmetadata_ingestion-1.4.8.0.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/WHEEL +0 -0
  1079. {openmetadata_ingestion-1.4.8.0.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/entry_points.txt +0 -0
@@ -15,8 +15,10 @@ import traceback
15
15
  from copy import deepcopy
16
16
  from typing import Iterable, Optional, Tuple, Union
17
17
 
18
+ from pydantic import EmailStr
19
+ from pydantic_core import PydanticCustomError
18
20
  from pyhive.sqlalchemy_hive import _type_map
19
- from sqlalchemy import types, util
21
+ from sqlalchemy import exc, types, util
20
22
  from sqlalchemy.engine import reflection
21
23
  from sqlalchemy.engine.reflection import Inspector
22
24
  from sqlalchemy.exc import DatabaseError
@@ -35,6 +37,7 @@ from metadata.generated.schema.entity.services.ingestionPipelines.status import
35
37
  from metadata.generated.schema.metadataIngestion.workflow import (
36
38
  Source as WorkflowSource,
37
39
  )
40
+ from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
38
41
  from metadata.ingestion.api.models import Either
39
42
  from metadata.ingestion.api.steps import InvalidSourceException
40
43
  from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
@@ -43,6 +46,7 @@ from metadata.ingestion.source.connections import get_connection
43
46
  from metadata.ingestion.source.database.column_type_parser import create_sqlalchemy_type
44
47
  from metadata.ingestion.source.database.common_db_source import CommonDbSourceService
45
48
  from metadata.ingestion.source.database.databricks.queries import (
49
+ DATABRICKS_DDL,
46
50
  DATABRICKS_GET_CATALOGS,
47
51
  DATABRICKS_GET_CATALOGS_TAGS,
48
52
  DATABRICKS_GET_COLUMN_TAGS,
@@ -60,17 +64,15 @@ from metadata.utils.constants import DEFAULT_DATABASE
60
64
  from metadata.utils.filters import filter_by_database
61
65
  from metadata.utils.logger import ingestion_logger
62
66
  from metadata.utils.sqlalchemy_utils import (
63
- get_all_table_ddls,
64
67
  get_all_view_definitions,
65
- get_table_ddl,
66
68
  get_view_definition_wrapper,
67
69
  )
68
70
  from metadata.utils.tag_utils import get_ometa_tag_and_classification
69
71
 
70
72
  logger = ingestion_logger()
71
73
 
72
- DATABRICKS_TAG = "DATABRICK TAG"
73
- DATABRICKS_TAG_CLASSIFICATION = "DATABRICK TAG CLASSIFICATION"
74
+ DATABRICKS_TAG = "DATABRICKS TAG"
75
+ DATABRICKS_TAG_CLASSIFICATION = "DATABRICKS TAG CLASSIFICATION"
74
76
  DEFAULT_TAG_VALUE = "NONE"
75
77
 
76
78
 
@@ -162,16 +164,20 @@ def get_columns(self, connection, table_name, schema=None, **kw):
162
164
  "system_data_type": raw_col_type,
163
165
  }
164
166
  if col_type in {"array", "struct", "map"}:
165
- rows = dict(
166
- connection.execute(
167
- f"DESCRIBE {schema}.{table_name} {col_name}"
168
- if schema
169
- else f"DESCRIBE {table_name} {col_name}"
170
- ).fetchall()
171
- )
172
-
173
- col_info["system_data_type"] = rows["data_type"]
174
- col_info["is_complex"] = True
167
+ col_name = f"`{col_name}`" if "." in col_name else col_name
168
+ try:
169
+ rows = dict(
170
+ connection.execute(
171
+ f"DESCRIBE TABLE {kw.get('db_name')}.{schema}.{table_name} {col_name}"
172
+ ).fetchall()
173
+ )
174
+ col_info["system_data_type"] = rows["data_type"]
175
+ col_info["is_complex"] = True
176
+ except DatabaseError as err:
177
+ logger.error(
178
+ f"Failed to fetch column details for column {col_name} in table {table_name} due to: {err}"
179
+ )
180
+ logger.debug(traceback.format_exc())
175
181
  result.append(col_info)
176
182
  return result
177
183
 
@@ -221,7 +227,9 @@ def get_table_comment( # pylint: disable=unused-argument
221
227
  """
222
228
  cursor = connection.execute(
223
229
  DATABRICKS_GET_TABLE_COMMENTS.format(
224
- schema_name=schema_name, table_name=table_name
230
+ database_name=self.context.get().database,
231
+ schema_name=schema_name,
232
+ table_name=table_name,
225
233
  )
226
234
  )
227
235
  try:
@@ -250,6 +258,25 @@ def get_view_definition(
250
258
  return None
251
259
 
252
260
 
261
+ @reflection.cache
262
+ def get_table_ddl(
263
+ self, connection, table_name, schema=None, **kw
264
+ ): # pylint: disable=unused-argument
265
+ """
266
+ Gets the Table DDL
267
+ """
268
+ schema = schema or self.default_schema_name
269
+ table_name = f"{schema}.{table_name}" if schema else table_name
270
+ cursor = connection.execute(DATABRICKS_DDL.format(table_name=table_name))
271
+ try:
272
+ result = cursor.fetchone()
273
+ if result:
274
+ return result[0]
275
+ except Exception:
276
+ pass
277
+ return None
278
+
279
+
253
280
  @reflection.cache
254
281
  def get_table_names(
255
282
  self, connection, schema=None, **kw
@@ -264,7 +291,7 @@ def get_table_names(
264
291
  # if it is > 1, we use spark thrift server with 3 columns in the result (schema, table, is_temporary)
265
292
  # else it is hive with 1 column in the result
266
293
  if len(row) > 1:
267
- tables.append(row[1])
294
+ table_name = row[1]
268
295
  else:
269
296
  table_name = row[0]
270
297
  if schema:
@@ -312,7 +339,6 @@ DatabricksDialect.get_view_definition = get_view_definition
312
339
  DatabricksDialect.get_table_names = get_table_names
313
340
  DatabricksDialect.get_all_view_definitions = get_all_view_definitions
314
341
  reflection.Inspector.get_schema_names = get_schema_names_reflection
315
- reflection.Inspector.get_all_table_ddls = get_all_table_ddls
316
342
  reflection.Inspector.get_table_ddl = get_table_ddl
317
343
 
318
344
 
@@ -345,8 +371,8 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
345
371
  def create(
346
372
  cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
347
373
  ):
348
- config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
349
- connection: DatabricksConnection = config.serviceConnection.__root__.config
374
+ config: WorkflowSource = WorkflowSource.model_validate(config_dict)
375
+ connection: DatabricksConnection = config.serviceConnection.root.config
350
376
  if not isinstance(connection, DatabricksConnection):
351
377
  raise InvalidSourceException(
352
378
  f"Expected DatabricksConnection, but got {connection}"
@@ -489,9 +515,11 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
489
515
  )
490
516
  if filter_by_database(
491
517
  self.source_config.databaseFilterPattern,
492
- database_fqn
493
- if self.source_config.useFqnForFiltering
494
- else new_catalog,
518
+ (
519
+ database_fqn
520
+ if self.source_config.useFqnForFiltering
521
+ else new_catalog
522
+ ),
495
523
  ):
496
524
  self.status.filter(database_fqn, "Database Filtered Out")
497
525
  continue
@@ -651,7 +679,9 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
651
679
  try:
652
680
  cursor = self.connection.execute(
653
681
  DATABRICKS_GET_TABLE_COMMENTS.format(
654
- schema_name=schema_name, table_name=table_name
682
+ database_name=self.context.get().database,
683
+ schema_name=schema_name,
684
+ table_name=table_name,
655
685
  )
656
686
  )
657
687
  for result in list(cursor):
@@ -674,3 +704,42 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
674
704
  f"Table description error for table [{schema_name}.{table_name}]: {exc}"
675
705
  )
676
706
  return description
707
+
708
+ def _filter_owner_name(self, owner_name: str) -> str:
709
+ """remove unnecessary keyword from name"""
710
+ pattern = r"\(Unknown\)"
711
+ filtered_name = re.sub(pattern, "", owner_name).strip()
712
+ return filtered_name
713
+
714
+ def get_owner_ref(self, table_name: str) -> Optional[EntityReferenceList]:
715
+ """
716
+ Method to process the table owners
717
+ """
718
+ try:
719
+ query = DATABRICKS_GET_TABLE_COMMENTS.format(
720
+ database_name=self.context.get().database,
721
+ schema_name=self.context.get().database_schema,
722
+ table_name=table_name,
723
+ )
724
+ result = self.connection.engine.execute(query)
725
+ owner = None
726
+ for row in result:
727
+ row_dict = dict(row)
728
+ if row_dict.get("col_name") == "Owner":
729
+ owner = row_dict.get("data_type")
730
+ break
731
+ if not owner:
732
+ return
733
+
734
+ owner = self._filter_owner_name(owner)
735
+ owner_ref = None
736
+ try:
737
+ owner_email = EmailStr._validate(owner)
738
+ owner_ref = self.metadata.get_reference_by_email(email=owner_email)
739
+ except PydanticCustomError:
740
+ owner_ref = self.metadata.get_reference_by_name(name=owner)
741
+ return owner_ref
742
+ except Exception as exc:
743
+ logger.debug(traceback.format_exc())
744
+ logger.warning(f"Error processing owner for table {table_name}: {exc}")
745
+ return
@@ -24,7 +24,9 @@ DATABRICKS_VIEW_DEFINITIONS = textwrap.dedent(
24
24
  """
25
25
  )
26
26
 
27
- DATABRICKS_GET_TABLE_COMMENTS = "DESCRIBE TABLE EXTENDED {schema_name}.{table_name}"
27
+ DATABRICKS_GET_TABLE_COMMENTS = (
28
+ "DESCRIBE TABLE EXTENDED {database_name}.{schema_name}.{table_name}"
29
+ )
28
30
 
29
31
  DATABRICKS_GET_CATALOGS = "SHOW CATALOGS"
30
32
 
@@ -54,3 +56,5 @@ DATABRICKS_GET_COLUMN_TAGS = textwrap.dedent(
54
56
  FROM {database_name}.information_schema.column_tags
55
57
  """
56
58
  )
59
+
60
+ DATABRICKS_DDL = "SHOW CREATE TABLE {table_name}"
@@ -53,8 +53,8 @@ class DatabricksQueryParserSource(QueryParserSource, ABC):
53
53
  cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
54
54
  ):
55
55
  """Create class instance"""
56
- config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
57
- connection: DatabricksConnection = config.serviceConnection.__root__.config
56
+ config: WorkflowSource = WorkflowSource.model_validate(config_dict)
57
+ connection: DatabricksConnection = config.serviceConnection.root.config
58
58
  if not isinstance(connection, DatabricksConnection):
59
59
  raise InvalidSourceException(
60
60
  f"Expected DatabricksConnection, but got {connection}"
@@ -15,6 +15,7 @@ import traceback
15
15
  from datetime import datetime
16
16
  from typing import Iterable
17
17
 
18
+ from metadata.generated.schema.type.basic import DateTime
18
19
  from metadata.generated.schema.type.tableQuery import TableQueries, TableQuery
19
20
  from metadata.ingestion.source.database.databricks.query_parser import (
20
21
  DatabricksQueryParserSource,
@@ -46,9 +47,9 @@ class DatabricksUsageSource(DatabricksQueryParserSource, UsageSource):
46
47
  TableQuery(
47
48
  query=row.get("query_text"),
48
49
  userName=row.get("user_name"),
49
- startTime=row.get("query_start_time_ms"),
50
- endTime=row.get("execution_end_time_ms"),
51
- analysisDate=datetime.now(),
50
+ startTime=str(row.get("query_start_time_ms")),
51
+ endTime=str(row.get("execution_end_time_ms")),
52
+ analysisDate=DateTime(datetime.now()),
52
53
  serviceName=self.config.serviceName,
53
54
  duration=row.get("duration")
54
55
  if row.get("duration")
@@ -0,0 +1,72 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ Datalake Azure Blob Client
14
+ """
15
+ from functools import partial
16
+ from typing import Callable, Iterable, Optional
17
+
18
+ from azure.storage.blob import BlobServiceClient
19
+
20
+ from metadata.clients.azure_client import AzureClient
21
+ from metadata.generated.schema.entity.services.connections.database.datalake.azureConfig import (
22
+ AzureConfig,
23
+ )
24
+ from metadata.ingestion.source.database.datalake.clients.base import DatalakeBaseClient
25
+ from metadata.utils.constants import DEFAULT_DATABASE
26
+
27
+
28
+ class DatalakeAzureBlobClient(DatalakeBaseClient):
29
+ def __init__(self, client: BlobServiceClient):
30
+ self._client = client
31
+
32
+ @classmethod
33
+ def from_config(cls, config: AzureConfig) -> "DatalakeAzureBlobClient":
34
+ try:
35
+ if not config.securityConfig:
36
+ raise RuntimeError("AzureConfig securityConfig can't be None.")
37
+
38
+ client = AzureClient(config.securityConfig).create_blob_client()
39
+ return cls(client=client)
40
+ except Exception as exc:
41
+ raise RuntimeError(
42
+ f"Unknown error connecting with {config.securityConfig}: {exc}."
43
+ )
44
+
45
+ def update_client_database(self, config, database_name):
46
+ # For the AzureBlob Client we don't need to do anything when changing the database
47
+ pass
48
+
49
+ def get_database_names(self, service_connection) -> Iterable[str]:
50
+ yield service_connection.databaseName or DEFAULT_DATABASE
51
+
52
+ def get_database_schema_names(self, bucket_name: Optional[str]) -> Iterable[str]:
53
+ prefix = bucket_name or ""
54
+
55
+ for schema in self._client.list_containers(name_starts_with=prefix):
56
+ yield schema["name"]
57
+
58
+ def get_table_names(self, bucket_name: str, prefix: Optional[str]) -> Iterable[str]:
59
+ container_client = self._client.get_container_client(bucket_name)
60
+
61
+ for file in container_client.list_blobs(name_starts_with=prefix or None):
62
+ yield file.name
63
+
64
+ def close(self, service_connection):
65
+ self._client.close()
66
+
67
+ def get_test_list_buckets_fn(self, bucket_name: Optional[str]) -> Callable:
68
+ def list_buckets(client: BlobServiceClient):
69
+ conn = client.list_containers(name_starts_with="")
70
+ list(conn)
71
+
72
+ return partial(list_buckets, self._client)
@@ -0,0 +1,47 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ Datalake Base Client
14
+ """
15
+ from abc import ABC, abstractmethod
16
+ from typing import Callable, Iterable, Optional
17
+
18
+
19
+ class DatalakeBaseClient(ABC):
20
+ @classmethod
21
+ @abstractmethod
22
+ def from_config(cls, config) -> "DatalakeBaseClient":
23
+ """Returns a Datalake Client based on the DatalakeConfig passed."""
24
+
25
+ @abstractmethod
26
+ def update_client_database(self, config, database_name: str):
27
+ """Updates the Client when changing the Database."""
28
+
29
+ @abstractmethod
30
+ def get_database_names(self, service_connection) -> Iterable[str]:
31
+ """Returns the Database Names, based on the underlying client."""
32
+
33
+ @abstractmethod
34
+ def get_database_schema_names(self, bucket_name: Optional[str]) -> Iterable[str]:
35
+ """Returns the RAW database schema names, based on the underlying client."""
36
+
37
+ @abstractmethod
38
+ def get_table_names(self, bucket_name: str, prefix: Optional[str]) -> Iterable[str]:
39
+ """Returns the Table names, based on the underlying client."""
40
+
41
+ @abstractmethod
42
+ def close(self, service_connection):
43
+ """Closes the Client connection."""
44
+
45
+ @abstractmethod
46
+ def get_test_list_buckets_fn(self, bucket_name: Optional[str]) -> Callable:
47
+ """Returns a Callable used to test the ListBuckets condition."""
@@ -0,0 +1,136 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ Datalake GCS Client
14
+ """
15
+ import os
16
+ from copy import deepcopy
17
+ from functools import partial
18
+ from typing import Callable, Iterable, List, Optional
19
+
20
+ from google.cloud import storage
21
+
22
+ from metadata.generated.schema.entity.services.connections.database.datalake.gcsConfig import (
23
+ GCSConfig,
24
+ )
25
+ from metadata.generated.schema.security.credentials.gcpValues import (
26
+ GcpCredentialsValues,
27
+ MultipleProjectId,
28
+ SingleProjectId,
29
+ )
30
+ from metadata.ingestion.source.database.datalake.clients.base import DatalakeBaseClient
31
+ from metadata.utils.credentials import GOOGLE_CREDENTIALS, set_google_credentials
32
+
33
+
34
+ class DatalakeGcsClient(DatalakeBaseClient):
35
+ def __init__(
36
+ self, client: storage.Client, temp_credentials_file_path_list: List[str]
37
+ ):
38
+ self._client = client
39
+ self._temp_credentials_file_path_list = temp_credentials_file_path_list
40
+
41
+ @property
42
+ def project(self):
43
+ return self._client.project
44
+
45
+ @staticmethod
46
+ def get_gcs_client(config: GCSConfig) -> storage.Client:
47
+ gcs_config = deepcopy(config)
48
+
49
+ if hasattr(config.securityConfig, "gcpConfig") and isinstance(
50
+ config.securityConfig.gcpConfig.projectId, MultipleProjectId
51
+ ):
52
+ gcs_config.securityConfig.gcpConfig.projectId = SingleProjectId.parse_obj(
53
+ gcs_config.securityConfig.gcpConfig.projectId.root[0]
54
+ )
55
+
56
+ if not gcs_config.securityConfig:
57
+ raise RuntimeError("GCSConfig securityConfig can't be None.")
58
+
59
+ set_google_credentials(gcp_credentials=gcs_config.securityConfig)
60
+ return storage.Client()
61
+
62
+ def update_temp_credentials_file_path_list(self):
63
+ credentials = os.environ.get(GOOGLE_CREDENTIALS)
64
+
65
+ if credentials:
66
+ self._temp_credentials_file_path_list.append(credentials)
67
+
68
+ @classmethod
69
+ def from_config(cls, config: GCSConfig) -> "DatalakeGcsClient":
70
+ gcs_client = cls.get_gcs_client(config)
71
+
72
+ client = cls(client=gcs_client, temp_credentials_file_path_list=[])
73
+ client.update_temp_credentials_file_path_list()
74
+
75
+ return client
76
+
77
+ def get_database_names(self, service_connection):
78
+ project_id_list = (
79
+ service_connection.configSource.securityConfig.gcpConfig.projectId.root
80
+ )
81
+
82
+ if not isinstance(project_id_list, list):
83
+ project_id_list = [project_id_list]
84
+
85
+ for project_id in project_id_list:
86
+ yield project_id
87
+
88
+ def update_client_database(self, config: GCSConfig, database_name: str):
89
+ gcs_config = deepcopy(config)
90
+
91
+ if hasattr(gcs_config.securityConfig, "gcpConfig"):
92
+ gcs_config.securityConfig.gcpConfig.projectId = SingleProjectId.parse_obj(
93
+ database_name
94
+ )
95
+
96
+ self._client = self.get_gcs_client(gcs_config)
97
+ self.update_temp_credentials_file_path_list()
98
+
99
+ def get_database_schema_names(self, bucket_name: Optional[str]) -> Iterable[str]:
100
+ if bucket_name:
101
+ yield bucket_name
102
+ else:
103
+ for bucket in self._client.list_buckets():
104
+ yield bucket.name
105
+
106
+ def get_table_names(self, bucket_name: str, prefix: Optional[str]) -> Iterable[str]:
107
+ bucket = self._client.get_bucket(bucket_name)
108
+
109
+ for key in bucket.list_blobs(prefix=prefix):
110
+ yield key.name
111
+
112
+ def close(self, service_connection):
113
+ os.environ.pop("GOOGLE_CLOUD_PROJECT", "")
114
+
115
+ if (
116
+ isinstance(service_connection, GcpCredentialsValues)
117
+ and GOOGLE_CREDENTIALS in os.environ
118
+ ):
119
+ del os.environ[GOOGLE_CREDENTIALS]
120
+ for temp_file_path in self._temp_credentials_file_path_list:
121
+ if os.path.exists(temp_file_path):
122
+ os.remove(temp_file_path)
123
+
124
+ def get_test_list_buckets_fn(self, bucket_name: Optional[str]) -> Callable:
125
+
126
+ if bucket_name:
127
+ fn = partial(self._client.get_bucket, bucket_name)
128
+ else:
129
+ fn = self._client.list_buckets
130
+
131
+ os.environ.pop("GOOGLE_CLOUD_PROJECT", "")
132
+ if GOOGLE_CREDENTIALS in os.environ:
133
+ os.remove(os.environ[GOOGLE_CREDENTIALS])
134
+ del os.environ[GOOGLE_CREDENTIALS]
135
+
136
+ return fn
@@ -0,0 +1,79 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ Datalake S3 Client
14
+ """
15
+ from functools import partial
16
+ from typing import Callable, Iterable, Optional
17
+
18
+ from metadata.clients.aws_client import AWSClient
19
+ from metadata.generated.schema.entity.services.connections.database.datalake.s3Config import (
20
+ S3Config,
21
+ )
22
+ from metadata.ingestion.source.database.datalake.clients.base import DatalakeBaseClient
23
+ from metadata.utils.constants import DEFAULT_DATABASE
24
+ from metadata.utils.s3_utils import list_s3_objects
25
+
26
+
27
+ class DatalakeS3Client(DatalakeBaseClient):
28
+ def __init__(self, client):
29
+ self._client = client
30
+
31
+ @classmethod
32
+ def from_config(cls, config: S3Config) -> "DatalakeS3Client":
33
+ if not config.securityConfig:
34
+ raise RuntimeError("S3Config securityConfig can't be None.")
35
+
36
+ s3_client = AWSClient(config.securityConfig).get_client(service_name="s3")
37
+ return cls(client=s3_client)
38
+
39
+ def update_client_database(self, config, database_name: str):
40
+ # For the S3 Client we don't need to do anything when changing the database
41
+ pass
42
+
43
+ def get_database_names(self, service_connection) -> Iterable[str]:
44
+ yield service_connection.databaseName or DEFAULT_DATABASE
45
+
46
+ def get_database_schema_names(self, bucket_name: Optional[str]) -> Iterable[str]:
47
+ if bucket_name:
48
+ yield bucket_name
49
+ else:
50
+ for bucket in self._client.list_buckets()["Buckets"]:
51
+ yield bucket["Name"]
52
+
53
+ def get_table_names(self, bucket_name: str, prefix: Optional[str]) -> Iterable[str]:
54
+ kwargs = {"Bucket": bucket_name}
55
+
56
+ if prefix:
57
+ kwargs["Prefix"] = prefix if prefix.endswith("/") else f"{prefix}/"
58
+
59
+ for key in list_s3_objects(self._client, **kwargs):
60
+ yield key["Key"]
61
+
62
+ def get_folders_prefix(
63
+ self, bucket_name: str, prefix: Optional[str]
64
+ ) -> Iterable[str]:
65
+ for page in self._client.get_paginator("list_objects_v2").paginate(
66
+ Bucket=bucket_name, Prefix=prefix or "", Delimiter="/"
67
+ ):
68
+ for common_prefix in page.get("CommonPrefixes", []):
69
+ yield common_prefix.get("Prefix")
70
+
71
+ def close(self, service_connection):
72
+ # For the S3 Client we don't need to do anything when closing the connection
73
+ pass
74
+
75
+ def get_test_list_buckets_fn(self, bucket_name: Optional[str]) -> Callable:
76
+
77
+ if bucket_name:
78
+ return partial(self._client.list_objects, Bucket=bucket_name)
79
+ return self._client.list_buckets