openmetadata-ingestion 1.4.7.2__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 (1085) 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 +12 -2
  684. metadata/ingestion/lineage/models.py +9 -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/connections.py +19 -0
  723. metadata/ingestion/source/dashboard/dashboard_service.py +45 -45
  724. metadata/ingestion/source/dashboard/domodashboard/metadata.py +31 -19
  725. metadata/ingestion/source/dashboard/lightdash/client.py +1 -1
  726. metadata/ingestion/source/dashboard/lightdash/metadata.py +26 -14
  727. metadata/ingestion/source/dashboard/lightdash/models.py +11 -11
  728. metadata/ingestion/source/dashboard/looker/bulk_parser.py +3 -3
  729. metadata/ingestion/source/dashboard/looker/connection.py +1 -1
  730. metadata/ingestion/source/dashboard/looker/metadata.py +67 -42
  731. metadata/ingestion/source/dashboard/looker/parser.py +3 -3
  732. metadata/ingestion/source/dashboard/looker/utils.py +8 -5
  733. metadata/ingestion/source/dashboard/metabase/client.py +19 -2
  734. metadata/ingestion/source/dashboard/metabase/metadata.py +45 -14
  735. metadata/ingestion/source/dashboard/metabase/models.py +46 -28
  736. metadata/ingestion/source/dashboard/mode/client.py +1 -1
  737. metadata/ingestion/source/dashboard/mode/metadata.py +24 -14
  738. metadata/ingestion/source/dashboard/mstr/client.py +1 -1
  739. metadata/ingestion/source/dashboard/mstr/metadata.py +18 -11
  740. metadata/ingestion/source/dashboard/mstr/models.py +4 -4
  741. metadata/ingestion/source/dashboard/powerbi/client.py +2 -3
  742. metadata/ingestion/source/dashboard/powerbi/metadata.py +52 -31
  743. metadata/ingestion/source/dashboard/powerbi/models.py +25 -22
  744. metadata/ingestion/source/dashboard/qlikcloud/client.py +2 -2
  745. metadata/ingestion/source/dashboard/qlikcloud/metadata.py +28 -16
  746. metadata/ingestion/source/dashboard/qlikcloud/models.py +4 -4
  747. metadata/ingestion/source/dashboard/qliksense/client.py +3 -3
  748. metadata/ingestion/source/dashboard/qliksense/metadata.py +35 -19
  749. metadata/ingestion/source/dashboard/qliksense/models.py +8 -8
  750. metadata/ingestion/source/dashboard/quicksight/metadata.py +26 -18
  751. metadata/ingestion/source/dashboard/quicksight/models.py +16 -16
  752. metadata/ingestion/source/dashboard/redash/client.py +1 -1
  753. metadata/ingestion/source/dashboard/redash/metadata.py +31 -19
  754. metadata/ingestion/source/dashboard/superset/api_source.py +46 -18
  755. metadata/ingestion/source/dashboard/superset/client.py +2 -2
  756. metadata/ingestion/source/dashboard/superset/db_source.py +44 -18
  757. metadata/ingestion/source/dashboard/superset/metadata.py +2 -2
  758. metadata/ingestion/source/dashboard/superset/mixin.py +12 -13
  759. metadata/ingestion/source/dashboard/superset/models.py +68 -68
  760. metadata/ingestion/source/dashboard/tableau/connection.py +2 -2
  761. metadata/ingestion/source/dashboard/tableau/metadata.py +406 -99
  762. metadata/ingestion/source/dashboard/tableau/models.py +33 -35
  763. metadata/ingestion/source/dashboard/tableau/queries.py +14 -0
  764. metadata/ingestion/source/database/athena/connection.py +34 -5
  765. metadata/ingestion/source/database/athena/metadata.py +43 -168
  766. metadata/ingestion/source/database/athena/models.py +10 -10
  767. metadata/ingestion/source/database/athena/query_parser.py +2 -2
  768. metadata/ingestion/source/database/athena/utils.py +191 -0
  769. metadata/ingestion/source/database/azuresql/metadata.py +4 -4
  770. metadata/ingestion/source/database/azuresql/query_parser.py +2 -2
  771. metadata/ingestion/source/database/bigquery/connection.py +17 -5
  772. metadata/ingestion/source/database/bigquery/helper.py +1 -1
  773. metadata/ingestion/source/database/bigquery/metadata.py +91 -52
  774. metadata/ingestion/source/database/bigquery/query_parser.py +3 -3
  775. metadata/ingestion/source/database/bigtable/connection.py +2 -2
  776. metadata/ingestion/source/database/bigtable/metadata.py +2 -2
  777. metadata/ingestion/source/database/clickhouse/connection.py +3 -3
  778. metadata/ingestion/source/database/clickhouse/metadata.py +11 -8
  779. metadata/ingestion/source/database/clickhouse/query_parser.py +4 -4
  780. metadata/ingestion/source/database/column_type_parser.py +20 -12
  781. metadata/ingestion/source/database/common_db_source.py +112 -49
  782. metadata/ingestion/source/database/common_nosql_source.py +22 -17
  783. metadata/ingestion/source/database/couchbase/connection.py +1 -1
  784. metadata/ingestion/source/database/couchbase/metadata.py +3 -3
  785. metadata/ingestion/source/database/database_service.py +30 -17
  786. metadata/ingestion/source/database/databricks/connection.py +1 -1
  787. metadata/ingestion/source/database/databricks/lineage.py +4 -3
  788. metadata/ingestion/source/database/databricks/metadata.py +125 -25
  789. metadata/ingestion/source/database/databricks/queries.py +5 -1
  790. metadata/ingestion/source/database/databricks/query_parser.py +2 -2
  791. metadata/ingestion/source/database/databricks/usage.py +4 -3
  792. metadata/ingestion/source/database/datalake/clients/azure_blob.py +72 -0
  793. metadata/ingestion/source/database/datalake/clients/base.py +47 -0
  794. metadata/ingestion/source/database/datalake/clients/gcs.py +136 -0
  795. metadata/ingestion/source/database/datalake/clients/s3.py +79 -0
  796. metadata/ingestion/source/database/datalake/connection.py +12 -70
  797. metadata/ingestion/source/database/datalake/metadata.py +75 -219
  798. metadata/ingestion/source/database/db2/metadata.py +13 -13
  799. metadata/ingestion/source/database/dbt/constants.py +1 -7
  800. metadata/ingestion/source/database/dbt/dbt_config.py +21 -21
  801. metadata/ingestion/source/database/dbt/dbt_service.py +19 -9
  802. metadata/ingestion/source/database/dbt/metadata.py +135 -86
  803. metadata/ingestion/source/database/dbt/models.py +9 -9
  804. metadata/ingestion/source/database/deltalake/clients/__init__.py +0 -0
  805. metadata/ingestion/source/database/deltalake/clients/base.py +82 -0
  806. metadata/ingestion/source/database/deltalake/clients/pyspark.py +304 -0
  807. metadata/ingestion/source/database/deltalake/clients/s3.py +200 -0
  808. metadata/ingestion/source/database/deltalake/connection.py +56 -84
  809. metadata/ingestion/source/database/deltalake/metadata.py +67 -193
  810. metadata/ingestion/source/database/domodatabase/metadata.py +83 -38
  811. metadata/ingestion/source/database/domodatabase/models.py +6 -6
  812. metadata/ingestion/source/database/doris/metadata.py +3 -3
  813. metadata/ingestion/source/database/druid/metadata.py +2 -2
  814. metadata/ingestion/source/database/dynamodb/metadata.py +5 -5
  815. metadata/ingestion/source/database/dynamodb/models.py +2 -2
  816. metadata/ingestion/source/database/extended_sample_data.py +41 -41
  817. metadata/ingestion/source/database/external_table_lineage_mixin.py +58 -3
  818. metadata/ingestion/source/database/glue/metadata.py +23 -18
  819. metadata/ingestion/source/database/glue/models.py +6 -6
  820. metadata/ingestion/source/database/greenplum/metadata.py +4 -4
  821. metadata/ingestion/source/database/hive/connection.py +2 -2
  822. metadata/ingestion/source/database/hive/metadata.py +2 -2
  823. metadata/ingestion/source/database/iceberg/catalog/hive.py +1 -1
  824. metadata/ingestion/source/database/iceberg/catalog/rest.py +1 -1
  825. metadata/ingestion/source/database/iceberg/fs/__init__.py +1 -1
  826. metadata/ingestion/source/database/iceberg/fs/s3.py +1 -1
  827. metadata/ingestion/source/database/iceberg/helper.py +4 -4
  828. metadata/ingestion/source/database/iceberg/metadata.py +28 -22
  829. metadata/ingestion/source/database/iceberg/models.py +6 -6
  830. metadata/ingestion/source/database/impala/connection.py +3 -3
  831. metadata/ingestion/source/database/impala/metadata.py +2 -2
  832. metadata/ingestion/source/database/incremental_metadata_extraction.py +1 -1
  833. metadata/ingestion/source/database/life_cycle_query_mixin.py +12 -8
  834. metadata/ingestion/source/database/lineage_source.py +25 -13
  835. metadata/ingestion/source/database/mariadb/metadata.py +2 -2
  836. metadata/ingestion/source/database/mongodb/connection.py +1 -1
  837. metadata/ingestion/source/database/mongodb/metadata.py +2 -2
  838. metadata/ingestion/source/database/mssql/constants.py +23 -0
  839. metadata/ingestion/source/database/mssql/lineage.py +25 -0
  840. metadata/ingestion/source/database/mssql/metadata.py +30 -10
  841. metadata/ingestion/source/database/mssql/queries.py +2 -0
  842. metadata/ingestion/source/database/mssql/query_parser.py +2 -2
  843. metadata/ingestion/source/database/mssql/usage.py +42 -0
  844. metadata/ingestion/source/database/mssql/utils.py +16 -1
  845. metadata/ingestion/source/database/mysql/metadata.py +2 -2
  846. metadata/ingestion/source/database/oracle/metadata.py +23 -13
  847. metadata/ingestion/source/database/oracle/models.py +1 -1
  848. metadata/ingestion/source/database/oracle/queries.py +45 -11
  849. metadata/ingestion/source/database/oracle/query_parser.py +2 -2
  850. metadata/ingestion/source/database/oracle/utils.py +33 -0
  851. metadata/ingestion/source/database/pinotdb/metadata.py +2 -2
  852. metadata/ingestion/source/database/postgres/converter_orm.py +52 -0
  853. metadata/ingestion/source/database/postgres/lineage.py +2 -1
  854. metadata/ingestion/source/database/postgres/metadata.py +34 -6
  855. metadata/ingestion/source/database/postgres/metrics.py +42 -0
  856. metadata/ingestion/source/database/postgres/pgspider/lineage.py +2 -2
  857. metadata/ingestion/source/database/postgres/queries.py +7 -0
  858. metadata/ingestion/source/database/postgres/query_parser.py +4 -4
  859. metadata/ingestion/source/database/postgres/types/money.py +37 -0
  860. metadata/ingestion/source/database/postgres/usage.py +15 -2
  861. metadata/ingestion/source/database/presto/connection.py +2 -2
  862. metadata/ingestion/source/database/presto/metadata.py +2 -2
  863. metadata/ingestion/source/database/query/lineage.py +1 -1
  864. metadata/ingestion/source/database/query/usage.py +5 -3
  865. metadata/ingestion/source/database/query_parser_source.py +1 -1
  866. metadata/ingestion/source/database/redshift/connection.py +37 -9
  867. metadata/ingestion/source/database/redshift/metadata.py +7 -7
  868. metadata/ingestion/source/database/redshift/models.py +1 -1
  869. metadata/ingestion/source/database/redshift/queries.py +30 -7
  870. metadata/ingestion/source/database/redshift/query_parser.py +2 -2
  871. metadata/ingestion/source/database/salesforce/connection.py +1 -3
  872. metadata/ingestion/source/database/salesforce/metadata.py +22 -17
  873. metadata/ingestion/source/database/sample_data.py +198 -98
  874. metadata/ingestion/source/database/sample_usage.py +5 -7
  875. metadata/ingestion/source/database/saperp/__init__.py +0 -0
  876. metadata/ingestion/source/database/saperp/client.py +170 -0
  877. metadata/ingestion/source/database/saperp/connection.py +50 -0
  878. metadata/ingestion/source/database/saperp/constants.py +27 -0
  879. metadata/ingestion/source/database/saperp/metadata.py +322 -0
  880. metadata/ingestion/source/database/saperp/models.py +100 -0
  881. metadata/ingestion/source/database/saphana/metadata.py +2 -2
  882. metadata/ingestion/source/database/sas/client.py +2 -2
  883. metadata/ingestion/source/database/sas/metadata.py +35 -44
  884. metadata/ingestion/source/database/singlestore/metadata.py +2 -2
  885. metadata/ingestion/source/database/snowflake/connection.py +3 -3
  886. metadata/ingestion/source/database/snowflake/metadata.py +39 -12
  887. metadata/ingestion/source/database/snowflake/models.py +7 -7
  888. metadata/ingestion/source/database/snowflake/query_parser.py +2 -2
  889. metadata/ingestion/source/database/sql_column_handler.py +4 -3
  890. metadata/ingestion/source/database/sqlite/metadata.py +2 -2
  891. metadata/ingestion/source/database/stored_procedures_mixin.py +10 -11
  892. metadata/ingestion/source/database/teradata/metadata.py +4 -4
  893. metadata/ingestion/source/database/trino/connection.py +5 -7
  894. metadata/ingestion/source/database/trino/metadata.py +2 -2
  895. metadata/ingestion/source/database/trino/query_parser.py +2 -2
  896. metadata/ingestion/source/database/unitycatalog/client.py +21 -0
  897. metadata/ingestion/source/database/unitycatalog/lineage.py +7 -7
  898. metadata/ingestion/source/database/unitycatalog/metadata.py +82 -42
  899. metadata/ingestion/source/database/unitycatalog/models.py +16 -16
  900. metadata/ingestion/source/database/unitycatalog/query_parser.py +2 -2
  901. metadata/ingestion/source/database/usage_source.py +51 -34
  902. metadata/ingestion/source/database/vertica/metadata.py +3 -3
  903. metadata/ingestion/source/database/vertica/query_parser.py +4 -4
  904. metadata/ingestion/source/messaging/common_broker_source.py +18 -4
  905. metadata/ingestion/source/messaging/kafka/connection.py +1 -1
  906. metadata/ingestion/source/messaging/kafka/metadata.py +7 -9
  907. metadata/ingestion/source/messaging/kinesis/metadata.py +10 -5
  908. metadata/ingestion/source/messaging/kinesis/models.py +3 -5
  909. metadata/ingestion/source/messaging/messaging_service.py +12 -7
  910. metadata/ingestion/source/messaging/redpanda/metadata.py +2 -2
  911. metadata/ingestion/source/metadata/alationsink/__init__.py +0 -0
  912. metadata/ingestion/source/metadata/alationsink/client.py +213 -0
  913. metadata/ingestion/source/metadata/alationsink/connection.py +53 -0
  914. metadata/ingestion/source/metadata/alationsink/constants.py +60 -0
  915. metadata/ingestion/source/metadata/alationsink/metadata.py +397 -0
  916. metadata/ingestion/source/metadata/alationsink/models.py +148 -0
  917. metadata/ingestion/source/metadata/amundsen/connection.py +1 -1
  918. metadata/ingestion/source/metadata/amundsen/metadata.py +14 -10
  919. metadata/ingestion/source/metadata/atlas/client.py +1 -1
  920. metadata/ingestion/source/metadata/atlas/metadata.py +11 -12
  921. metadata/ingestion/source/mlmodel/mlflow/metadata.py +12 -6
  922. metadata/ingestion/source/mlmodel/mlmodel_service.py +13 -6
  923. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +34 -21
  924. metadata/ingestion/source/pipeline/airbyte/client.py +1 -1
  925. metadata/ingestion/source/pipeline/airbyte/metadata.py +15 -11
  926. metadata/ingestion/source/pipeline/airflow/lineage_parser.py +3 -4
  927. metadata/ingestion/source/pipeline/airflow/metadata.py +28 -17
  928. metadata/ingestion/source/pipeline/airflow/models.py +21 -24
  929. metadata/ingestion/source/pipeline/dagster/client.py +3 -3
  930. metadata/ingestion/source/pipeline/dagster/metadata.py +31 -17
  931. metadata/ingestion/source/pipeline/dagster/models.py +14 -14
  932. metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +120 -126
  933. metadata/ingestion/source/pipeline/databrickspipeline/models.py +72 -0
  934. metadata/ingestion/source/pipeline/dbtcloud/__init__.py +0 -0
  935. metadata/ingestion/source/pipeline/dbtcloud/client.py +143 -0
  936. metadata/ingestion/source/pipeline/dbtcloud/connection.py +60 -0
  937. metadata/ingestion/source/pipeline/dbtcloud/metadata.py +345 -0
  938. metadata/ingestion/source/pipeline/dbtcloud/models.py +72 -0
  939. metadata/ingestion/source/pipeline/dbtcloud/queries.py +45 -0
  940. metadata/ingestion/source/pipeline/domopipeline/metadata.py +21 -12
  941. metadata/ingestion/source/pipeline/fivetran/client.py +20 -6
  942. metadata/ingestion/source/pipeline/fivetran/metadata.py +124 -50
  943. metadata/ingestion/source/pipeline/fivetran/models.py +20 -0
  944. metadata/ingestion/source/pipeline/flink/client.py +53 -0
  945. metadata/ingestion/source/pipeline/flink/connection.py +52 -0
  946. metadata/ingestion/source/pipeline/flink/metadata.py +188 -0
  947. metadata/ingestion/source/pipeline/flink/models.py +44 -0
  948. metadata/ingestion/source/pipeline/gluepipeline/metadata.py +23 -11
  949. metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +7 -8
  950. metadata/ingestion/source/pipeline/nifi/metadata.py +17 -8
  951. metadata/ingestion/source/pipeline/openlineage/connection.py +12 -3
  952. metadata/ingestion/source/pipeline/openlineage/metadata.py +3 -27
  953. metadata/ingestion/source/pipeline/pipeline_service.py +52 -8
  954. metadata/ingestion/source/pipeline/spline/client.py +1 -1
  955. metadata/ingestion/source/pipeline/spline/metadata.py +3 -3
  956. metadata/ingestion/source/pipeline/spline/models.py +12 -12
  957. metadata/ingestion/source/search/elasticsearch/connection.py +2 -2
  958. metadata/ingestion/source/search/elasticsearch/metadata.py +5 -4
  959. metadata/ingestion/source/search/search_service.py +13 -6
  960. metadata/ingestion/source/storage/gcs/client.py +58 -0
  961. metadata/ingestion/source/storage/gcs/connection.py +159 -0
  962. metadata/ingestion/source/storage/gcs/metadata.py +465 -0
  963. metadata/ingestion/source/storage/gcs/models.py +86 -0
  964. metadata/ingestion/source/storage/s3/metadata.py +268 -18
  965. metadata/ingestion/source/storage/s3/models.py +30 -11
  966. metadata/ingestion/source/storage/storage_service.py +43 -7
  967. metadata/ingestion/stage/table_usage.py +3 -3
  968. metadata/mixins/pandas/pandas_mixin.py +2 -2
  969. metadata/mixins/sqalchemy/sqa_mixin.py +1 -1
  970. metadata/parsers/avro_parser.py +12 -10
  971. metadata/parsers/json_schema_parser.py +4 -4
  972. metadata/parsers/protobuf_parser.py +4 -5
  973. metadata/pii/processor.py +4 -6
  974. metadata/profiler/adaptors/dynamodb.py +2 -2
  975. metadata/profiler/adaptors/mongodb.py +5 -17
  976. metadata/profiler/api/models.py +9 -9
  977. metadata/profiler/interface/nosql/profiler_interface.py +5 -8
  978. metadata/profiler/interface/pandas/profiler_interface.py +8 -10
  979. metadata/profiler/interface/profiler_interface.py +3 -3
  980. metadata/profiler/interface/profiler_interface_factory.py +46 -51
  981. metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +28 -17
  982. metadata/profiler/interface/sqlalchemy/profiler_interface.py +26 -6
  983. metadata/profiler/metrics/composed/null_ratio.py +5 -8
  984. metadata/profiler/metrics/hybrid/histogram.py +9 -3
  985. metadata/profiler/metrics/static/mean.py +16 -8
  986. metadata/profiler/metrics/static/null_count.py +4 -2
  987. metadata/profiler/metrics/system/queries/snowflake.py +1 -1
  988. metadata/profiler/metrics/window/percentille_mixin.py +1 -1
  989. metadata/profiler/orm/converter/base.py +21 -13
  990. metadata/profiler/orm/converter/common.py +3 -4
  991. metadata/profiler/orm/functions/datetime.py +1 -1
  992. metadata/profiler/orm/functions/median.py +11 -4
  993. metadata/profiler/orm/functions/sum.py +8 -1
  994. metadata/profiler/orm/functions/table_metric_computer.py +6 -7
  995. metadata/profiler/orm/registry.py +19 -1
  996. metadata/profiler/orm/types/custom_hex_byte_string.py +5 -3
  997. metadata/profiler/orm/types/undetermined_type.py +38 -0
  998. metadata/profiler/processor/core.py +19 -13
  999. metadata/profiler/processor/default.py +4 -1
  1000. metadata/profiler/processor/processor.py +4 -4
  1001. metadata/profiler/processor/sample_data_handler.py +5 -5
  1002. metadata/profiler/processor/sampler/nosql/sampler.py +9 -4
  1003. metadata/profiler/processor/sampler/sampler_factory.py +36 -6
  1004. metadata/profiler/processor/sampler/sqlalchemy/azuresql/sampler.py +40 -0
  1005. metadata/profiler/processor/sampler/sqlalchemy/sampler.py +33 -62
  1006. metadata/profiler/processor/sampler/sqlalchemy/snowflake/sampler.py +60 -0
  1007. metadata/profiler/source/base/profiler_source.py +12 -14
  1008. metadata/profiler/source/bigquery/profiler_source.py +2 -2
  1009. metadata/profiler/source/bigquery/type_mapper.py +2 -2
  1010. metadata/profiler/source/metadata.py +14 -16
  1011. metadata/profiler/source/metadata_ext.py +3 -3
  1012. metadata/readers/dataframe/avro.py +1 -3
  1013. metadata/readers/dataframe/models.py +29 -12
  1014. metadata/readers/dataframe/parquet.py +3 -3
  1015. metadata/readers/dataframe/reader_factory.py +6 -0
  1016. metadata/readers/file/api_reader.py +5 -2
  1017. metadata/readers/file/bitbucket.py +4 -4
  1018. metadata/readers/file/credentials.py +5 -5
  1019. metadata/readers/file/github.py +6 -6
  1020. metadata/readers/file/gitlab.py +172 -0
  1021. metadata/utils/class_helper.py +3 -5
  1022. metadata/utils/credentials.py +2 -2
  1023. metadata/utils/datalake/datalake_utils.py +4 -2
  1024. metadata/utils/entity_link.py +8 -0
  1025. metadata/utils/execution_time_tracker.py +2 -2
  1026. metadata/utils/filters.py +25 -17
  1027. metadata/utils/fqn.py +59 -14
  1028. metadata/utils/helpers.py +15 -12
  1029. metadata/utils/importer.py +29 -2
  1030. metadata/utils/life_cycle_utils.py +3 -3
  1031. metadata/utils/logger.py +9 -24
  1032. metadata/utils/lru_cache.py +3 -0
  1033. metadata/utils/metadata_service_helper.py +3 -1
  1034. metadata/utils/secrets/gcp_secrets_manager.py +128 -0
  1035. metadata/utils/secrets/secrets_manager_factory.py +3 -0
  1036. metadata/utils/source_hash.py +1 -1
  1037. metadata/utils/ssl_manager.py +20 -26
  1038. metadata/utils/ssl_registry.py +5 -1
  1039. metadata/utils/storage_metadata_config.py +6 -5
  1040. metadata/utils/tag_utils.py +21 -13
  1041. metadata/utils/time_utils.py +45 -5
  1042. metadata/workflow/application.py +4 -4
  1043. metadata/workflow/application_output_handler.py +6 -19
  1044. metadata/workflow/base.py +42 -5
  1045. metadata/workflow/data_quality.py +5 -5
  1046. metadata/workflow/ingestion.py +4 -6
  1047. metadata/workflow/metadata.py +4 -4
  1048. metadata/workflow/output_handler.py +35 -214
  1049. metadata/workflow/profiler.py +5 -5
  1050. metadata/workflow/usage.py +8 -6
  1051. metadata/workflow/workflow_init_error_handler.py +154 -0
  1052. metadata/workflow/workflow_output_handler.py +189 -98
  1053. metadata/workflow/workflow_status_mixin.py +20 -11
  1054. {openmetadata_ingestion-1.4.7.2.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/METADATA +388 -313
  1055. openmetadata_ingestion-1.5.0.0.dist-info/RECORD +1595 -0
  1056. {openmetadata_ingestion-1.4.7.2.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/top_level.txt +1 -0
  1057. metadata/cli/insight.py +0 -51
  1058. metadata/data_insight/processor/kpi/kpi_runner.py +0 -156
  1059. metadata/data_insight/processor/kpi/run_result_registry.py +0 -162
  1060. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +0 -253
  1061. metadata/data_insight/processor/reports/data_processor.py +0 -72
  1062. metadata/data_insight/processor/reports/entity_report_data_processor.py +0 -262
  1063. metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +0 -384
  1064. metadata/data_insight/producer/cost_analysis_producer.py +0 -126
  1065. metadata/data_insight/producer/entity_producer.py +0 -63
  1066. metadata/data_insight/producer/producer_factory.py +0 -53
  1067. metadata/data_insight/producer/web_analytics_producer.py +0 -84
  1068. metadata/data_insight/source/metadata.py +0 -175
  1069. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +0 -30
  1070. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +0 -30
  1071. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +0 -30
  1072. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +0 -30
  1073. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +0 -27
  1074. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +0 -27
  1075. metadata/workflow/data_insight.py +0 -78
  1076. openmetadata_ingestion-1.4.7.2.dist-info/RECORD +0 -1509
  1077. {metadata/cli → _openmetadata_testutils}/__init__.py +0 -0
  1078. {metadata/data_insight/processor → _openmetadata_testutils/helpers}/__init__.py +0 -0
  1079. {metadata/data_insight/processor/kpi → _openmetadata_testutils/kafka}/__init__.py +0 -0
  1080. {metadata/data_insight/processor/reports → _openmetadata_testutils/postgres}/__init__.py +0 -0
  1081. {metadata/data_insight/producer → _openmetadata_testutils/pydantic}/__init__.py +0 -0
  1082. /metadata/{data_insight/source → ingestion/source/database/datalake/clients}/__init__.py +0 -0
  1083. {openmetadata_ingestion-1.4.7.2.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/LICENSE +0 -0
  1084. {openmetadata_ingestion-1.4.7.2.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/WHEEL +0 -0
  1085. {openmetadata_ingestion-1.4.7.2.dist-info → openmetadata_ingestion-1.5.0.0.dist-info}/entry_points.txt +0 -0
@@ -41,7 +41,6 @@ from metadata.generated.schema.metadataIngestion.dbtconfig.dbtS3Config import (
41
41
  )
42
42
  from metadata.ingestion.source.database.dbt.constants import (
43
43
  DBT_CATALOG_FILE_NAME,
44
- DBT_FILE_NAMES_LIST,
45
44
  DBT_MANIFEST_FILE_NAME,
46
45
  DBT_RUN_RESULTS_FILE_NAME,
47
46
  )
@@ -129,7 +128,7 @@ def _(config: DbtHttpConfig):
129
128
  yield DbtFiles(
130
129
  dbt_catalog=dbt_catalog.json() if dbt_catalog else None,
131
130
  dbt_manifest=dbt_manifest.json(),
132
- dbt_run_results=dbt_run_results.json() if dbt_run_results else None,
131
+ dbt_run_results=[dbt_run_results.json()] if dbt_run_results else None,
133
132
  )
134
133
  except DBTConfigException as exc:
135
134
  raise exc
@@ -152,7 +151,7 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
152
151
  expiry = 0
153
152
  auth_token = config.dbtCloudAuthToken.get_secret_value(), expiry
154
153
  client_config = ClientConfig(
155
- base_url=config.dbtCloudUrl,
154
+ base_url=str(config.dbtCloudUrl),
156
155
  api_version="api/v2",
157
156
  auth_token=lambda: auth_token,
158
157
  auth_header="Authorization",
@@ -183,7 +182,8 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
183
182
  last_run = runs_data[0]
184
183
  run_id = last_run["id"]
185
184
  logger.info(
186
- f"Retrieved last successful run [{run_id}] finished {last_run['finished_at_humanized']} (duration: {last_run['duration_humanized']})"
185
+ f"Retrieved last successful run [{str(run_id)}]: "
186
+ f"Finished {str(last_run['finished_at_humanized'])} (duration: {str(last_run['duration_humanized'])})"
187
187
  )
188
188
  try:
189
189
  logger.debug("Requesting [dbt_catalog]")
@@ -215,7 +215,7 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
215
215
  yield DbtFiles(
216
216
  dbt_catalog=dbt_catalog,
217
217
  dbt_manifest=dbt_manifest,
218
- dbt_run_results=dbt_run_results,
218
+ dbt_run_results=[dbt_run_results] if dbt_run_results else None,
219
219
  )
220
220
  except DBTConfigException as exc:
221
221
  raise exc
@@ -232,13 +232,12 @@ def get_blobs_grouped_by_dir(blobs: List[str]) -> Dict[str, List[str]]:
232
232
  for blob in blobs:
233
233
  subdirectory = blob.rsplit("/", 1)[0] if "/" in blob else ""
234
234
  blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
235
- if next(
236
- (
237
- file_name
238
- for file_name in DBT_FILE_NAMES_LIST
239
- if file_name.lower() == blob_file_name.lower()
240
- ),
241
- None,
235
+ # We'll be processing multiple run_result files from a single dir
236
+ # Grouping them together to process them in a single go
237
+ if (
238
+ DBT_MANIFEST_FILE_NAME == blob_file_name.lower()
239
+ or DBT_CATALOG_FILE_NAME == blob_file_name.lower()
240
+ or DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower()
242
241
  ):
243
242
  blob_grouped_by_directory[subdirectory].append(blob)
244
243
  return blob_grouped_by_directory
@@ -256,7 +255,7 @@ def download_dbt_files(
256
255
  ) in blob_grouped_by_directory.items():
257
256
  dbt_catalog = None
258
257
  dbt_manifest = None
259
- dbt_run_results = None
258
+ dbt_run_results = []
260
259
  kwargs = {}
261
260
  if bucket_name:
262
261
  kwargs = {"bucket_name": bucket_name}
@@ -264,10 +263,11 @@ def download_dbt_files(
264
263
  for blob in blobs:
265
264
  if blob:
266
265
  reader = get_reader(config_source=config, client=client)
267
- if DBT_MANIFEST_FILE_NAME in blob:
266
+ blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
267
+ if DBT_MANIFEST_FILE_NAME == blob_file_name.lower():
268
268
  logger.debug(f"{DBT_MANIFEST_FILE_NAME} found in {key}")
269
269
  dbt_manifest = reader.read(path=blob, **kwargs)
270
- if DBT_CATALOG_FILE_NAME in blob:
270
+ if DBT_CATALOG_FILE_NAME == blob_file_name.lower():
271
271
  try:
272
272
  logger.debug(f"{DBT_CATALOG_FILE_NAME} found in {key}")
273
273
  dbt_catalog = reader.read(path=blob, **kwargs)
@@ -275,10 +275,12 @@ def download_dbt_files(
275
275
  logger.warning(
276
276
  f"{DBT_CATALOG_FILE_NAME} not found in {key}: {exc}"
277
277
  )
278
- if DBT_RUN_RESULTS_FILE_NAME in blob:
278
+ if DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower():
279
279
  try:
280
- logger.debug(f"{DBT_RUN_RESULTS_FILE_NAME} found in {key}")
281
- dbt_run_results = reader.read(path=blob, **kwargs)
280
+ logger.debug(f"{blob_file_name} found in {key}")
281
+ dbt_run_result = reader.read(path=blob, **kwargs)
282
+ if dbt_run_result:
283
+ dbt_run_results.append(json.loads(dbt_run_result))
282
284
  except Exception as exc:
283
285
  logger.warning(
284
286
  f"{DBT_RUN_RESULTS_FILE_NAME} not found in {key}: {exc}"
@@ -288,9 +290,7 @@ def download_dbt_files(
288
290
  yield DbtFiles(
289
291
  dbt_catalog=json.loads(dbt_catalog) if dbt_catalog else None,
290
292
  dbt_manifest=json.loads(dbt_manifest),
291
- dbt_run_results=json.loads(dbt_run_results)
292
- if dbt_run_results
293
- else None,
293
+ dbt_run_results=dbt_run_results if dbt_run_results else None,
294
294
  )
295
295
  except DBTConfigException as exc:
296
296
  logger.warning(exc)
@@ -16,6 +16,8 @@ from abc import ABC, abstractmethod
16
16
  from typing import Iterable
17
17
 
18
18
  from dbt_artifacts_parser.parser import parse_catalog, parse_manifest, parse_run_results
19
+ from pydantic import Field
20
+ from typing_extensions import Annotated
19
21
 
20
22
  from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
21
23
  from metadata.generated.schema.api.tests.createTestCase import CreateTestCaseRequest
@@ -54,7 +56,9 @@ class DbtServiceTopology(ServiceTopology):
54
56
  dbt files -> dbt tags -> data models -> descriptions -> lineage -> tests.
55
57
  """
56
58
 
57
- root = TopologyNode(
59
+ root: Annotated[
60
+ TopologyNode, Field(description="Root node for the topology")
61
+ ] = TopologyNode(
58
62
  producer="get_dbt_files",
59
63
  stages=[
60
64
  NodeStage(
@@ -69,7 +73,9 @@ class DbtServiceTopology(ServiceTopology):
69
73
  "process_dbt_tests",
70
74
  ],
71
75
  )
72
- process_dbt_data_model = TopologyNode(
76
+ process_dbt_data_model: Annotated[
77
+ TopologyNode, Field(description="Process dbt data models")
78
+ ] = TopologyNode(
73
79
  producer="get_dbt_objects",
74
80
  stages=[
75
81
  NodeStage(
@@ -87,7 +93,9 @@ class DbtServiceTopology(ServiceTopology):
87
93
  ),
88
94
  ],
89
95
  )
90
- process_dbt_entities = TopologyNode(
96
+ process_dbt_entities: Annotated[
97
+ TopologyNode, Field(description="Process dbt entities")
98
+ ] = TopologyNode(
91
99
  producer="get_data_model",
92
100
  stages=[
93
101
  NodeStage(
@@ -106,7 +114,9 @@ class DbtServiceTopology(ServiceTopology):
106
114
  ),
107
115
  ],
108
116
  )
109
- process_dbt_tests = TopologyNode(
117
+ process_dbt_tests: Annotated[
118
+ TopologyNode, Field(description="Process dbt tests")
119
+ ] = TopologyNode(
110
120
  producer="get_dbt_tests",
111
121
  stages=[
112
122
  NodeStage(
@@ -174,9 +184,10 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
174
184
  if self.context.get().dbt_file.dbt_catalog
175
185
  else None,
176
186
  dbt_manifest=parse_manifest(self.context.get().dbt_file.dbt_manifest),
177
- dbt_run_results=parse_run_results(
178
- self.context.get().dbt_file.dbt_run_results
179
- )
187
+ dbt_run_results=[
188
+ parse_run_results(run_result_file)
189
+ for run_result_file in self.context.get().dbt_file.dbt_run_results
190
+ ]
180
191
  if self.context.get().dbt_file.dbt_run_results
181
192
  else None,
182
193
  )
@@ -206,8 +217,7 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
206
217
  """
207
218
  Prepare the data models
208
219
  """
209
- for data_model_link in self.context.get().data_model_links:
210
- yield data_model_link
220
+ yield from self.context.get().data_model_links
211
221
 
212
222
  @abstractmethod
213
223
  def create_dbt_lineage(self, data_model_link: DataModelLink) -> AddLineageRequest:
@@ -1,3 +1,4 @@
1
+ # pylint: disable=too-many-lines
1
2
  # Copyright 2021 Collate
2
3
  # Licensed under the Apache License, Version 2.0 (the "License");
3
4
  # you may not use this file except in compliance with the License.
@@ -13,7 +14,7 @@ DBT source methods.
13
14
  """
14
15
  import traceback
15
16
  from datetime import datetime
16
- from typing import Iterable, List, Optional, Union
17
+ from typing import Any, Iterable, List, Optional, Union
17
18
 
18
19
  from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
19
20
  from metadata.generated.schema.api.tests.createTestCase import CreateTestCaseRequest
@@ -45,10 +46,16 @@ from metadata.generated.schema.tests.testDefinition import (
45
46
  TestDefinition,
46
47
  TestPlatform,
47
48
  )
48
- from metadata.generated.schema.type.basic import FullyQualifiedEntityName
49
+ from metadata.generated.schema.type.basic import (
50
+ FullyQualifiedEntityName,
51
+ SqlQuery,
52
+ Timestamp,
53
+ Uuid,
54
+ )
49
55
  from metadata.generated.schema.type.entityLineage import EntitiesEdge, LineageDetails
50
56
  from metadata.generated.schema.type.entityLineage import Source as LineageSource
51
57
  from metadata.generated.schema.type.entityReference import EntityReference
58
+ from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
52
59
  from metadata.ingestion.api.models import Either
53
60
  from metadata.ingestion.lineage.models import ConnectionTypeDialectMapper
54
61
  from metadata.ingestion.lineage.sql_lineage import get_lineage_by_query
@@ -86,6 +93,7 @@ from metadata.ingestion.source.database.dbt.dbt_utils import (
86
93
  from metadata.ingestion.source.database.dbt.models import DbtMeta
87
94
  from metadata.utils import fqn
88
95
  from metadata.utils.elasticsearch import get_entity_from_es_result
96
+ from metadata.utils.entity_link import get_table_fqn
89
97
  from metadata.utils.logger import ingestion_logger
90
98
  from metadata.utils.tag_utils import get_ometa_tag_and_classification, get_tag_labels
91
99
  from metadata.utils.time_utils import convert_timestamp_to_milliseconds
@@ -119,7 +127,7 @@ class DbtSource(DbtServiceSource):
119
127
  def create(
120
128
  cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
121
129
  ):
122
- config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
130
+ config: WorkflowSource = WorkflowSource.model_validate(config_dict)
123
131
  return cls(config, metadata)
124
132
 
125
133
  def test_connection(self) -> None:
@@ -131,11 +139,10 @@ class DbtSource(DbtServiceSource):
131
139
  """
132
140
  By default for DBT nothing is required to be prepared
133
141
  """
134
- pass
135
142
 
136
143
  def get_dbt_owner(
137
- self, manifest_node: dict, catalog_node: Optional[dict]
138
- ) -> Optional[EntityReference]:
144
+ self, manifest_node: Any, catalog_node: Optional[Any]
145
+ ) -> Optional[EntityReferenceList]:
139
146
  """
140
147
  Returns dbt owner
141
148
  """
@@ -147,7 +154,16 @@ class DbtSource(DbtServiceSource):
147
154
  if manifest_node:
148
155
  dbt_owner = manifest_node.meta.get(DbtCommonEnum.OWNER.value)
149
156
  if dbt_owner:
150
- owner = self.metadata.get_reference_by_name(name=dbt_owner)
157
+ owner = self.metadata.get_reference_by_name(
158
+ name=dbt_owner, is_owner=True
159
+ )
160
+
161
+ if owner:
162
+ return owner
163
+
164
+ # If owner is not found, try to find the owner in OMD using email
165
+ owner = self.metadata.get_reference_by_email(name=dbt_owner)
166
+
151
167
  if not owner:
152
168
  logger.warning(
153
169
  "Unable to ingest owner from DBT since no user or"
@@ -184,6 +200,7 @@ class DbtSource(DbtServiceSource):
184
200
  **dbt_files.dbt_manifest[DbtCommonEnum.NODES.value],
185
201
  **dbt_files.dbt_manifest[DbtCommonEnum.SOURCES.value],
186
202
  }
203
+ catalog_entities = None
187
204
  if dbt_files.dbt_catalog:
188
205
  catalog_entities = {
189
206
  **dbt_files.dbt_catalog[DbtCommonEnum.NODES.value],
@@ -208,7 +225,7 @@ class DbtSource(DbtServiceSource):
208
225
  )
209
226
 
210
227
  # Validate the catalog file if it is passed
211
- if dbt_files.dbt_catalog:
228
+ if catalog_entities:
212
229
  catalog_node = catalog_entities.get(key)
213
230
  if catalog_node and "columns" in catalog_node:
214
231
  self.check_columns(catalog_node=catalog_node)
@@ -303,7 +320,8 @@ class DbtSource(DbtServiceSource):
303
320
  self.context.get().dbt_tests[key][DbtCommonEnum.RESULTS.value] = next(
304
321
  (
305
322
  item
306
- for item in dbt_objects.dbt_run_results.results
323
+ for run_result in dbt_objects.dbt_run_results
324
+ for item in run_result.results
307
325
  if item.unique_id == key
308
326
  ),
309
327
  None,
@@ -322,6 +340,7 @@ class DbtSource(DbtServiceSource):
322
340
  **dbt_objects.dbt_manifest.sources,
323
341
  **dbt_objects.dbt_manifest.nodes,
324
342
  }
343
+ catalog_entities = None
325
344
  if dbt_objects.dbt_catalog:
326
345
  catalog_entities = {
327
346
  **dbt_objects.dbt_catalog.sources,
@@ -330,12 +349,14 @@ class DbtSource(DbtServiceSource):
330
349
  self.context.get().data_model_links = []
331
350
  self.context.get().dbt_tests = {}
332
351
  self.context.get().run_results_generate_time = None
352
+ # Since we'll be processing multiple run_results for a single project
353
+ # we'll only consider the first run_results generated_at time
333
354
  if (
334
355
  dbt_objects.dbt_run_results
335
- and dbt_objects.dbt_run_results.metadata.generated_at
356
+ and dbt_objects.dbt_run_results[0].metadata.generated_at
336
357
  ):
337
358
  self.context.get().run_results_generate_time = (
338
- dbt_objects.dbt_run_results.metadata.generated_at
359
+ dbt_objects.dbt_run_results[0].metadata.generated_at
339
360
  )
340
361
  for key, manifest_node in manifest_entities.items():
341
362
  try:
@@ -383,7 +404,7 @@ class DbtSource(DbtServiceSource):
383
404
  logger.debug(f"Processing DBT node: {model_name}")
384
405
 
385
406
  catalog_node = None
386
- if dbt_objects.dbt_catalog:
407
+ if catalog_entities:
387
408
  catalog_node = catalog_entities.get(key)
388
409
 
389
410
  dbt_table_tags_list = []
@@ -407,7 +428,6 @@ class DbtSource(DbtServiceSource):
407
428
  dbt_raw_query = get_dbt_raw_query(manifest_node)
408
429
 
409
430
  # Get the table entity from ES
410
- # TODO: Change to get_by_name once the postgres case sensitive calls is fixed
411
431
  table_fqn = fqn.build(
412
432
  self.metadata,
413
433
  entity_type=Table,
@@ -438,15 +458,19 @@ class DbtSource(DbtServiceSource):
438
458
  if manifest_node.description
439
459
  else None,
440
460
  path=get_data_model_path(manifest_node=manifest_node),
441
- rawSql=dbt_raw_query if dbt_raw_query else "",
442
- sql=dbt_compiled_query if dbt_compiled_query else "",
461
+ rawSql=SqlQuery(dbt_raw_query)
462
+ if dbt_raw_query
463
+ else None,
464
+ sql=SqlQuery(dbt_compiled_query)
465
+ if dbt_compiled_query
466
+ else None,
443
467
  columns=self.parse_data_model_columns(
444
468
  manifest_node, catalog_node
445
469
  ),
446
470
  upstream=self.parse_upstream_nodes(
447
471
  manifest_entities, manifest_node
448
472
  ),
449
- owner=self.get_dbt_owner(
473
+ owners=self.get_dbt_owner(
450
474
  manifest_node=manifest_node,
451
475
  catalog_node=catalog_node,
452
476
  ),
@@ -512,7 +536,6 @@ class DbtSource(DbtServiceSource):
512
536
  )
513
537
 
514
538
  # check if the parent table exists in OM before adding it to the upstream list
515
- # TODO: Change to get_by_name once the postgres case sensitive calls is fixed
516
539
  parent_table_entity: Optional[
517
540
  Union[Table, List[Table]]
518
541
  ] = get_entity_from_es_result(
@@ -532,7 +555,7 @@ class DbtSource(DbtServiceSource):
532
555
  return upstream_nodes
533
556
 
534
557
  def parse_data_model_columns(
535
- self, manifest_node: dict, catalog_node: dict
558
+ self, manifest_node: Any, catalog_node: Any
536
559
  ) -> List[Column]:
537
560
  """
538
561
  Method to parse the DBT columns
@@ -542,7 +565,7 @@ class DbtSource(DbtServiceSource):
542
565
  for key, manifest_column in manifest_columns.items():
543
566
  try:
544
567
  logger.debug(f"Processing DBT column: {key}")
545
- # If catalog file is passed pass the column information from catalog file
568
+ # If catalog file is passed, pass the column information from catalog file
546
569
  catalog_column = None
547
570
  if catalog_node and catalog_node.columns:
548
571
  catalog_column = catalog_node.columns.get(key)
@@ -614,9 +637,7 @@ class DbtSource(DbtServiceSource):
614
637
  Method to process DBT lineage from upstream nodes
615
638
  """
616
639
  to_entity: Table = data_model_link.table_entity
617
- logger.debug(
618
- f"Processing DBT lineage for: {to_entity.fullyQualifiedName.__root__}"
619
- )
640
+ logger.debug(f"Processing DBT lineage for: {to_entity.fullyQualifiedName.root}")
620
641
 
621
642
  for upstream_node in data_model_link.datamodel.upstream:
622
643
  try:
@@ -634,11 +655,11 @@ class DbtSource(DbtServiceSource):
634
655
  right=AddLineageRequest(
635
656
  edge=EntitiesEdge(
636
657
  fromEntity=EntityReference(
637
- id=from_entity.id.__root__,
658
+ id=Uuid(from_entity.id.root),
638
659
  type="table",
639
660
  ),
640
661
  toEntity=EntityReference(
641
- id=to_entity.id.__root__,
662
+ id=Uuid(to_entity.id.root),
642
663
  type="table",
643
664
  ),
644
665
  lineageDetails=LineageDetails(
@@ -660,48 +681,48 @@ class DbtSource(DbtServiceSource):
660
681
  """
661
682
  Method to process DBT lineage from queries
662
683
  """
663
- to_entity: Table = data_model_link.table_entity
664
- logger.debug(
665
- f"Processing DBT Query lineage for: {to_entity.fullyQualifiedName.__root__}"
666
- )
667
-
668
- try:
669
- source_elements = fqn.split(to_entity.fullyQualifiedName.__root__)
670
- # remove service name from fqn to make it parseable in format db.schema.table
671
- query_fqn = fqn._build( # pylint: disable=protected-access
672
- *source_elements[-3:]
673
- )
674
- query = (
675
- f"create table {query_fqn} as {data_model_link.datamodel.sql.__root__}"
676
- )
677
- connection_type = str(
678
- self.config.serviceConnection.__root__.config.type.value
684
+ if data_model_link.datamodel.sql:
685
+ to_entity: Table = data_model_link.table_entity
686
+ logger.debug(
687
+ f"Processing DBT Query lineage for: {to_entity.fullyQualifiedName.root}"
679
688
  )
680
- dialect = ConnectionTypeDialectMapper.dialect_of(connection_type)
681
- lineages = get_lineage_by_query(
682
- self.metadata,
683
- query=query,
684
- service_name=source_elements[0],
685
- database_name=source_elements[1],
686
- schema_name=source_elements[2],
687
- dialect=dialect,
688
- timeout_seconds=self.source_config.parsingTimeoutLimit,
689
- lineage_source=LineageSource.DbtLineage,
690
- )
691
- for lineage_request in lineages or []:
692
- yield lineage_request
693
689
 
694
- except Exception as exc: # pylint: disable=broad-except
695
- yield Either(
696
- left=StackTraceError(
697
- name=data_model_link.datamodel.sql.__root__,
698
- error=(
699
- f"Failed to parse the query {data_model_link.datamodel.sql.__root__}"
700
- f" to capture lineage: {exc}"
701
- ),
702
- stackTrace=traceback.format_exc(),
690
+ try:
691
+ source_elements = fqn.split(to_entity.fullyQualifiedName.root)
692
+ # remove service name from fqn to make it parseable in format db.schema.table
693
+ query_fqn = fqn._build( # pylint: disable=protected-access
694
+ *source_elements[-3:]
695
+ )
696
+ query = (
697
+ f"create table {query_fqn} as {data_model_link.datamodel.sql.root}"
698
+ )
699
+ connection_type = str(
700
+ self.config.serviceConnection.root.config.type.value
701
+ )
702
+ dialect = ConnectionTypeDialectMapper.dialect_of(connection_type)
703
+ lineages = get_lineage_by_query(
704
+ self.metadata,
705
+ query=query,
706
+ service_name=source_elements[0],
707
+ database_name=source_elements[1],
708
+ schema_name=source_elements[2],
709
+ dialect=dialect,
710
+ timeout_seconds=self.source_config.parsingTimeoutLimit,
711
+ lineage_source=LineageSource.DbtLineage,
712
+ )
713
+ yield from lineages or []
714
+
715
+ except Exception as exc: # pylint: disable=broad-except
716
+ yield Either(
717
+ left=StackTraceError(
718
+ name=data_model_link.datamodel.sql.root,
719
+ error=(
720
+ f"Failed to parse the query {data_model_link.datamodel.sql.root}"
721
+ f" to capture lineage: {exc}"
722
+ ),
723
+ stackTrace=traceback.format_exc(),
724
+ )
703
725
  )
704
- )
705
726
 
706
727
  def process_dbt_meta(self, manifest_meta):
707
728
  """
@@ -715,7 +736,7 @@ class DbtSource(DbtServiceSource):
715
736
  get_tag_labels(
716
737
  metadata=self.metadata,
717
738
  tags=dbt_meta_info.openmetadata.glossary,
718
- include_tags=self.source_config.includeTags,
739
+ include_tags=True,
719
740
  tag_type=GlossaryTerm,
720
741
  )
721
742
  or []
@@ -728,7 +749,7 @@ class DbtSource(DbtServiceSource):
728
749
  metadata=self.metadata,
729
750
  tags=[tier_fqn.split(fqn.FQN_SEPARATOR)[-1]],
730
751
  classification_name=tier_fqn.split(fqn.FQN_SEPARATOR)[0],
731
- include_tags=self.source_config.includeTags,
752
+ include_tags=True,
732
753
  )
733
754
  or []
734
755
  )
@@ -745,12 +766,12 @@ class DbtSource(DbtServiceSource):
745
766
  """
746
767
  table_entity: Table = data_model_link.table_entity
747
768
  logger.debug(
748
- f"Processing DBT Descriptions for: {table_entity.fullyQualifiedName.__root__}"
769
+ f"Processing DBT Descriptions for: {table_entity.fullyQualifiedName.root}"
749
770
  )
750
771
  if table_entity:
751
772
  try:
752
773
  service_name, database_name, schema_name, table_name = fqn.split(
753
- table_entity.fullyQualifiedName.__root__
774
+ table_entity.fullyQualifiedName.root
754
775
  )
755
776
  data_model = data_model_link.datamodel
756
777
  force_override = False
@@ -765,7 +786,7 @@ class DbtSource(DbtServiceSource):
765
786
  self.metadata.patch_description(
766
787
  entity=Table,
767
788
  source=table_entity,
768
- description=data_model.description.__root__,
789
+ description=data_model.description.root,
769
790
  force=force_override,
770
791
  )
771
792
 
@@ -782,7 +803,7 @@ class DbtSource(DbtServiceSource):
782
803
  database_name=database_name,
783
804
  schema_name=schema_name,
784
805
  table_name=table_name,
785
- column_name=column.name.__root__,
806
+ column_name=column.name.root,
786
807
  ),
787
808
  description=column.description,
788
809
  )
@@ -795,7 +816,7 @@ class DbtSource(DbtServiceSource):
795
816
  except Exception as exc: # pylint: disable=broad-except
796
817
  logger.debug(traceback.format_exc())
797
818
  logger.warning(
798
- f"Failed to parse the node {table_entity.fullyQualifiedName.__root__} "
819
+ f"Failed to parse the node {table_entity.fullyQualifiedName.root} "
799
820
  f"to update dbt description: {exc}"
800
821
  )
801
822
 
@@ -832,7 +853,7 @@ class DbtSource(DbtServiceSource):
832
853
  manifest_node
833
854
  ),
834
855
  displayName=None,
835
- owner=None,
856
+ owners=None,
836
857
  )
837
858
  )
838
859
  except Exception as err: # pylint: disable=broad-except
@@ -859,20 +880,42 @@ class DbtSource(DbtServiceSource):
859
880
  test_suite = check_or_create_test_suite(
860
881
  self.metadata, entity_link_str
861
882
  )
862
- yield Either(
863
- right=CreateTestCaseRequest(
864
- name=manifest_node.name,
865
- description=manifest_node.description,
866
- testDefinition=FullyQualifiedEntityName(
867
- __root__=manifest_node.name
868
- ),
869
- entityLink=entity_link_str,
870
- testSuite=test_suite.fullyQualifiedName,
871
- parameterValues=create_test_case_parameter_values(dbt_test),
872
- displayName=None,
873
- owner=None,
874
- )
883
+ table_fqn = get_table_fqn(entity_link_str)
884
+ source_elements = table_fqn.split(fqn.FQN_SEPARATOR)
885
+ test_case_fqn = fqn.build(
886
+ self.metadata,
887
+ entity_type=TestCase,
888
+ service_name=source_elements[0],
889
+ database_name=source_elements[1],
890
+ schema_name=source_elements[2],
891
+ table_name=source_elements[3],
892
+ column_name=manifest_node.column_name
893
+ if hasattr(manifest_node, "column_name")
894
+ else None,
895
+ test_case_name=manifest_node.name,
896
+ )
897
+
898
+ test_case = self.metadata.get_by_name(
899
+ TestCase, test_case_fqn, fields=["testDefinition,testSuite"]
875
900
  )
901
+ if test_case is None:
902
+ # Create the test case only if it does not exist
903
+ yield Either(
904
+ right=CreateTestCaseRequest(
905
+ name=manifest_node.name,
906
+ description=manifest_node.description,
907
+ testDefinition=FullyQualifiedEntityName(
908
+ manifest_node.name
909
+ ),
910
+ entityLink=entity_link_str,
911
+ testSuite=test_suite.fullyQualifiedName,
912
+ parameterValues=create_test_case_parameter_values(
913
+ dbt_test
914
+ ),
915
+ displayName=None,
916
+ owners=None,
917
+ )
918
+ )
876
919
  except Exception as err: # pylint: disable=broad-except
877
920
  yield Either(
878
921
  left=StackTraceError(
@@ -894,6 +937,12 @@ class DbtSource(DbtServiceSource):
894
937
  f"Adding DBT Test Case Results for node: {manifest_node.name}"
895
938
  )
896
939
  dbt_test_result = dbt_test.get(DbtCommonEnum.RESULTS.value)
940
+ if not dbt_test_result:
941
+ logger.warning(
942
+ f"DBT Test Case Results not found for node: {manifest_node.name}"
943
+ )
944
+ return
945
+
897
946
  test_case_status = TestCaseStatus.Aborted
898
947
  test_result_value = 0
899
948
  if dbt_test_result.status.value in [
@@ -927,8 +976,8 @@ class DbtSource(DbtServiceSource):
927
976
 
928
977
  # Create the test case result object
929
978
  test_case_result = TestCaseResult(
930
- timestamp=convert_timestamp_to_milliseconds(
931
- dbt_timestamp.timestamp()
979
+ timestamp=Timestamp(
980
+ convert_timestamp_to_milliseconds(dbt_timestamp.timestamp())
932
981
  ),
933
982
  testCaseStatus=test_case_status,
934
983
  testResultValue=[