openmetadata-ingestion 1.5.13.2__py3-none-any.whl → 1.6.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 (1026) hide show
  1. _openmetadata_testutils/dict.py +23 -0
  2. _openmetadata_testutils/pydantic/test_utils.py +22 -2
  3. _openmetadata_testutils/pytest_openmetadata/plugin.py +86 -0
  4. _openmetadata_testutils/pytest_openmetadata/test_utils.py +99 -0
  5. metadata/cli/app.py +1 -0
  6. metadata/cli/classify.py +52 -0
  7. metadata/cli/dataquality.py +4 -1
  8. metadata/cli/ingest.py +2 -1
  9. metadata/cli/lineage.py +2 -1
  10. metadata/cli/profile.py +4 -1
  11. metadata/cli/usage.py +2 -1
  12. metadata/clients/aws_client.py +2 -2
  13. metadata/cmd.py +9 -0
  14. metadata/config/common.py +3 -1
  15. metadata/data_quality/api/models.py +2 -1
  16. metadata/data_quality/builders/{i_validator_builder.py → validator_builder.py} +45 -31
  17. metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +25 -24
  18. metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +23 -49
  19. metadata/data_quality/interface/test_suite_interface.py +36 -52
  20. metadata/data_quality/processor/test_case_runner.py +9 -9
  21. metadata/data_quality/runner/base_test_suite_source.py +52 -26
  22. metadata/data_quality/source/test_suite.py +1 -1
  23. metadata/data_quality/validations/base_test_handler.py +17 -12
  24. metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +4 -2
  25. metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +1 -1
  26. metadata/data_quality/validations/column/sqlalchemy/columnValueMaxToBeBetween.py +1 -1
  27. metadata/data_quality/validations/column/sqlalchemy/columnValueMeanToBeBetween.py +1 -1
  28. metadata/data_quality/validations/column/sqlalchemy/columnValueMedianToBeBetween.py +1 -1
  29. metadata/data_quality/validations/column/sqlalchemy/columnValueMinToBeBetween.py +1 -1
  30. metadata/data_quality/validations/column/sqlalchemy/columnValueStdDevToBeBetween.py +1 -1
  31. metadata/data_quality/validations/column/sqlalchemy/columnValuesMissingCount.py +1 -1
  32. metadata/data_quality/validations/column/sqlalchemy/columnValuesSumToBeBetween.py +1 -1
  33. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeAtExpectedLocation.py +1 -1
  34. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +1 -1
  35. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +1 -1
  36. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +1 -1
  37. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +1 -1
  38. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeUnique.py +2 -8
  39. metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +1 -1
  40. metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +1 -1
  41. metadata/data_quality/validations/models.py +6 -1
  42. metadata/data_quality/validations/runtime_param_setter/param_setter.py +2 -3
  43. metadata/data_quality/validations/runtime_param_setter/param_setter_factory.py +45 -17
  44. metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +26 -16
  45. metadata/data_quality/validations/table/sqlalchemy/tableCustomSQLQuery.py +7 -1
  46. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +193 -17
  47. metadata/data_quality/validations/table/sqlalchemy/tableRowInsertedCountToBeBetween.py +2 -2
  48. metadata/examples/workflows/bigquery_classifier.yaml +56 -0
  49. metadata/examples/workflows/bigquery_profiler.yaml +1 -2
  50. metadata/examples/workflows/datafactory.yaml +29 -0
  51. metadata/examples/workflows/db2_profiler.yaml +1 -2
  52. metadata/examples/workflows/dbtcloud.yaml +2 -1
  53. metadata/examples/workflows/matillion.yaml +31 -0
  54. metadata/examples/workflows/{mstr.yaml → microstrategy.yaml} +3 -2
  55. metadata/examples/workflows/mysql_profiler.yaml +0 -1
  56. metadata/examples/workflows/redshift_classifier.yaml +38 -0
  57. metadata/examples/workflows/redshift_profiler.yaml +2 -3
  58. metadata/examples/workflows/rest.yaml +20 -0
  59. metadata/examples/workflows/sigma.yaml +25 -0
  60. metadata/examples/workflows/trino_profiler.yaml +20 -0
  61. metadata/generated/antlr/EntityLinkLexer.py +70 -99
  62. metadata/generated/schema/analytics/__init__.py +1 -1
  63. metadata/generated/schema/analytics/basic.py +1 -1
  64. metadata/generated/schema/analytics/reportData.py +1 -1
  65. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  66. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  67. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  68. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  69. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  70. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  71. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  72. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  73. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  74. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  75. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  76. metadata/generated/schema/api/__init__.py +1 -1
  77. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  78. metadata/generated/schema/api/addTagToAssetsRequest.py +43 -0
  79. metadata/generated/schema/api/analytics/__init__.py +1 -1
  80. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  81. metadata/generated/schema/api/automations/__init__.py +1 -1
  82. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  83. metadata/generated/schema/api/bulkAssets.py +1 -1
  84. metadata/generated/schema/api/classification/__init__.py +1 -1
  85. metadata/generated/schema/api/classification/createClassification.py +1 -1
  86. metadata/generated/schema/api/classification/createTag.py +1 -1
  87. metadata/generated/schema/api/classification/loadTags.py +1 -1
  88. metadata/generated/schema/api/createBot.py +1 -1
  89. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  90. metadata/generated/schema/api/createType.py +1 -1
  91. metadata/generated/schema/api/data/__init__.py +1 -1
  92. metadata/generated/schema/api/data/createAPICollection.py +1 -1
  93. metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
  94. metadata/generated/schema/api/data/createChart.py +1 -1
  95. metadata/generated/schema/api/data/createContainer.py +1 -1
  96. metadata/generated/schema/api/data/createCustomProperty.py +1 -1
  97. metadata/generated/schema/api/data/createDashboard.py +1 -1
  98. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  99. metadata/generated/schema/api/data/createDatabase.py +1 -1
  100. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  101. metadata/generated/schema/api/data/createGlossary.py +1 -1
  102. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  103. metadata/generated/schema/api/data/createMetric.py +83 -0
  104. metadata/generated/schema/api/data/createMlModel.py +1 -1
  105. metadata/generated/schema/api/data/createPipeline.py +1 -1
  106. metadata/generated/schema/api/data/createQuery.py +1 -1
  107. metadata/generated/schema/api/data/createSearchIndex.py +8 -1
  108. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  109. metadata/generated/schema/api/data/createTable.py +1 -1
  110. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  111. metadata/generated/schema/api/data/createTopic.py +1 -1
  112. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  113. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  114. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  115. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  116. metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
  117. metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
  118. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  119. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  120. metadata/generated/schema/api/docStore/__init__.py +1 -1
  121. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  122. metadata/generated/schema/api/domains/__init__.py +1 -1
  123. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  124. metadata/generated/schema/api/domains/createDomain.py +1 -1
  125. metadata/generated/schema/api/feed/__init__.py +1 -1
  126. metadata/generated/schema/api/feed/closeTask.py +1 -1
  127. metadata/generated/schema/api/feed/createPost.py +1 -1
  128. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  129. metadata/generated/schema/api/feed/createThread.py +1 -1
  130. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  131. metadata/generated/schema/api/feed/threadCount.py +1 -1
  132. metadata/generated/schema/api/governance/__init__.py +3 -0
  133. metadata/generated/schema/api/governance/createWorkflowDefinition.py +83 -0
  134. metadata/generated/schema/api/governance/createWorkflowInstanceState.py +22 -0
  135. metadata/generated/schema/api/lineage/__init__.py +1 -1
  136. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  137. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  138. metadata/generated/schema/api/policies/__init__.py +1 -1
  139. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  140. metadata/generated/schema/api/services/__init__.py +1 -1
  141. metadata/generated/schema/api/services/createApiService.py +2 -2
  142. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  143. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  144. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  145. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  146. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  147. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  148. metadata/generated/schema/api/services/createSearchService.py +1 -1
  149. metadata/generated/schema/api/services/createStorageService.py +1 -1
  150. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  151. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  152. metadata/generated/schema/api/setOwner.py +1 -1
  153. metadata/generated/schema/api/teams/__init__.py +1 -1
  154. metadata/generated/schema/api/teams/createPersona.py +1 -1
  155. metadata/generated/schema/api/teams/createRole.py +1 -1
  156. metadata/generated/schema/api/teams/createTeam.py +1 -1
  157. metadata/generated/schema/api/teams/createUser.py +1 -1
  158. metadata/generated/schema/api/tests/__init__.py +1 -1
  159. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  160. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  161. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  162. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  163. metadata/generated/schema/api/tests/createTestCaseResult.py +71 -0
  164. metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
  165. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  166. metadata/generated/schema/api/voteRequest.py +1 -1
  167. metadata/generated/schema/auth/__init__.py +1 -1
  168. metadata/generated/schema/auth/basicAuth.py +1 -1
  169. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  170. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  171. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  172. metadata/generated/schema/auth/emailRequest.py +1 -1
  173. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  174. metadata/generated/schema/auth/generateToken.py +1 -1
  175. metadata/generated/schema/auth/jwtAuth.py +1 -1
  176. metadata/generated/schema/auth/loginRequest.py +1 -1
  177. metadata/generated/schema/auth/logoutRequest.py +1 -1
  178. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  179. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  180. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  181. metadata/generated/schema/auth/refreshToken.py +1 -1
  182. metadata/generated/schema/auth/registrationRequest.py +1 -1
  183. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  184. metadata/generated/schema/auth/revokeToken.py +1 -1
  185. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  186. metadata/generated/schema/auth/ssoAuth.py +1 -1
  187. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  188. metadata/generated/schema/configuration/__init__.py +1 -1
  189. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  190. metadata/generated/schema/configuration/assetCertificationSettings.py +22 -0
  191. metadata/generated/schema/configuration/authConfig.py +1 -1
  192. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  193. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  194. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  195. metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
  196. metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
  197. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  198. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  199. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  200. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  201. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  202. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  203. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  204. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  205. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  206. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  207. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  208. metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
  209. metadata/generated/schema/configuration/lineageSettings.py +1 -1
  210. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  211. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  212. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  213. metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
  214. metadata/generated/schema/configuration/searchSettings.py +1 -1
  215. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -14
  216. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  217. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  218. metadata/generated/schema/configuration/themeConfiguration.py +1 -1
  219. metadata/generated/schema/configuration/uiThemePreference.py +1 -1
  220. metadata/generated/schema/dataInsight/__init__.py +1 -1
  221. metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
  222. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
  223. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +9 -1
  224. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
  225. metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
  226. metadata/generated/schema/dataInsight/custom/lineChart.py +23 -8
  227. metadata/generated/schema/dataInsight/custom/summaryCard.py +20 -9
  228. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  229. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  230. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  231. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  232. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  233. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  234. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  235. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  236. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  237. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  238. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  239. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  240. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  241. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  242. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  243. metadata/generated/schema/email/__init__.py +1 -1
  244. metadata/generated/schema/email/emailRequest.py +1 -1
  245. metadata/generated/schema/email/emailTemplate.py +1 -1
  246. metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
  247. metadata/generated/schema/email/smtpSettings.py +1 -1
  248. metadata/generated/schema/email/templateValidationReponse.py +1 -1
  249. metadata/generated/schema/entity/__init__.py +1 -1
  250. metadata/generated/schema/entity/applications/__init__.py +1 -1
  251. metadata/generated/schema/entity/applications/app.py +9 -1
  252. metadata/generated/schema/entity/applications/appExtension.py +1 -1
  253. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  254. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  255. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +4 -2
  256. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  257. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  258. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
  259. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
  260. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
  261. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
  262. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
  263. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +54 -2
  264. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
  265. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
  266. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
  267. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
  268. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
  269. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
  270. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
  271. metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
  272. metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +22 -0
  273. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  274. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  275. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  276. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
  277. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  278. metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
  279. metadata/generated/schema/entity/applications/createAppRequest.py +8 -1
  280. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  281. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  282. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  283. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +8 -1
  284. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +8 -1
  285. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  286. metadata/generated/schema/entity/automations/__init__.py +1 -1
  287. metadata/generated/schema/entity/automations/testServiceConnection.py +3 -1
  288. metadata/generated/schema/entity/automations/workflow.py +1 -1
  289. metadata/generated/schema/entity/bot.py +1 -1
  290. metadata/generated/schema/entity/classification/__init__.py +1 -1
  291. metadata/generated/schema/entity/classification/classification.py +2 -2
  292. metadata/generated/schema/entity/classification/tag.py +2 -2
  293. metadata/generated/schema/entity/data/__init__.py +1 -1
  294. metadata/generated/schema/entity/data/apiCollection.py +4 -2
  295. metadata/generated/schema/entity/data/apiEndpoint.py +4 -2
  296. metadata/generated/schema/entity/data/chart.py +4 -3
  297. metadata/generated/schema/entity/data/container.py +4 -2
  298. metadata/generated/schema/entity/data/dashboard.py +4 -2
  299. metadata/generated/schema/entity/data/dashboardDataModel.py +5 -2
  300. metadata/generated/schema/entity/data/database.py +7 -7
  301. metadata/generated/schema/entity/data/databaseSchema.py +5 -2
  302. metadata/generated/schema/entity/data/glossary.py +2 -2
  303. metadata/generated/schema/entity/data/glossaryTerm.py +3 -2
  304. metadata/generated/schema/entity/data/metric.py +196 -0
  305. metadata/generated/schema/entity/data/mlmodel.py +4 -2
  306. metadata/generated/schema/entity/data/pipeline.py +4 -3
  307. metadata/generated/schema/entity/data/query.py +3 -5
  308. metadata/generated/schema/entity/data/report.py +1 -1
  309. metadata/generated/schema/entity/data/searchIndex.py +16 -2
  310. metadata/generated/schema/entity/data/storedProcedure.py +4 -2
  311. metadata/generated/schema/entity/data/table.py +36 -3
  312. metadata/generated/schema/entity/data/topic.py +4 -3
  313. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  314. metadata/generated/schema/entity/docStore/document.py +1 -1
  315. metadata/generated/schema/entity/domains/__init__.py +1 -1
  316. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  317. metadata/generated/schema/entity/domains/domain.py +1 -1
  318. metadata/generated/schema/entity/events/__init__.py +1 -1
  319. metadata/generated/schema/entity/events/webhook.py +19 -2
  320. metadata/generated/schema/entity/feed/__init__.py +1 -1
  321. metadata/generated/schema/entity/feed/assets.py +1 -1
  322. metadata/generated/schema/entity/feed/customProperty.py +1 -1
  323. metadata/generated/schema/entity/feed/description.py +1 -1
  324. metadata/generated/schema/entity/feed/domain.py +1 -1
  325. metadata/generated/schema/entity/feed/entityInfo.py +1 -1
  326. metadata/generated/schema/entity/feed/owner.py +1 -1
  327. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  328. metadata/generated/schema/entity/feed/tag.py +1 -1
  329. metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
  330. metadata/generated/schema/entity/feed/thread.py +1 -1
  331. metadata/generated/schema/entity/policies/__init__.py +1 -1
  332. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  333. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +4 -1
  334. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  335. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  336. metadata/generated/schema/entity/policies/filters.py +1 -1
  337. metadata/generated/schema/entity/policies/policy.py +1 -1
  338. metadata/generated/schema/entity/services/__init__.py +1 -1
  339. metadata/generated/schema/entity/services/apiService.py +7 -7
  340. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  341. metadata/generated/schema/entity/services/connections/{apiService → api}/__init__.py +1 -1
  342. metadata/generated/schema/entity/services/connections/{apiService → api}/restConnection.py +15 -7
  343. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  344. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  345. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  346. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  347. metadata/generated/schema/entity/services/connections/connectionBasicType.py +29 -1
  348. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  349. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  350. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  352. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  353. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  354. metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +67 -0
  355. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  356. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  357. metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
  358. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  359. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
  360. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
  361. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
  362. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
  363. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  365. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  367. metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +41 -0
  368. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  369. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  370. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  371. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +5 -1
  372. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  373. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +9 -1
  374. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
  375. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  376. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  377. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
  378. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  379. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  380. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  381. metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +11 -0
  382. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  383. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  384. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  385. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  386. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  387. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  388. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  389. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  390. metadata/generated/schema/entity/services/connections/database/db2Connection.py +16 -1
  391. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  392. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
  393. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
  394. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
  395. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  396. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  397. metadata/generated/schema/entity/services/connections/database/druidConnection.py +4 -1
  398. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  399. metadata/generated/schema/entity/services/connections/database/exasolConnection.py +84 -0
  400. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  401. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +4 -1
  402. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +4 -1
  403. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  404. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  405. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  406. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  407. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  408. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  409. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  410. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  411. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +4 -1
  412. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +4 -1
  413. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +3 -2
  414. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -1
  415. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +11 -7
  416. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +5 -1
  417. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +4 -1
  418. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +5 -1
  419. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  420. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +9 -1
  421. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  422. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
  423. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  424. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
  425. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
  426. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +5 -1
  427. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  428. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +4 -1
  429. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +9 -1
  430. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +4 -1
  431. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
  432. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +4 -1
  433. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +7 -2
  434. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  435. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  436. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  437. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  438. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  439. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  440. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  441. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  442. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  443. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  444. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  445. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
  446. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  447. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  448. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  449. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  450. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  451. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  452. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  453. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  454. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  455. metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
  456. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  457. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  458. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  459. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  460. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  461. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  462. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  463. metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +69 -0
  464. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +17 -5
  465. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  466. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  467. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
  468. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  469. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
  470. metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +65 -0
  471. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  472. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
  473. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  474. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  475. metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +43 -0
  476. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  477. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  478. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  479. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  480. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  481. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  482. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  483. metadata/generated/schema/entity/services/connections/serviceConnection.py +3 -3
  484. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  485. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  486. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  487. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  488. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  489. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  490. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  491. metadata/generated/schema/entity/services/dashboardService.py +8 -5
  492. metadata/generated/schema/entity/services/databaseService.py +5 -2
  493. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  494. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +2 -1
  495. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  496. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  497. metadata/generated/schema/entity/services/messagingService.py +2 -2
  498. metadata/generated/schema/entity/services/metadataService.py +2 -2
  499. metadata/generated/schema/entity/services/mlmodelService.py +2 -2
  500. metadata/generated/schema/entity/services/pipelineService.py +11 -2
  501. metadata/generated/schema/entity/services/searchService.py +2 -2
  502. metadata/generated/schema/entity/services/serviceType.py +2 -2
  503. metadata/generated/schema/entity/services/storageService.py +2 -2
  504. metadata/generated/schema/entity/teams/__init__.py +1 -1
  505. metadata/generated/schema/entity/teams/persona.py +1 -1
  506. metadata/generated/schema/entity/teams/role.py +1 -1
  507. metadata/generated/schema/entity/teams/team.py +1 -1
  508. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  509. metadata/generated/schema/entity/teams/user.py +1 -1
  510. metadata/generated/schema/entity/type.py +1 -1
  511. metadata/generated/schema/entity/utils/__init__.py +1 -1
  512. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  513. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  514. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  515. metadata/generated/schema/events/__init__.py +1 -1
  516. metadata/generated/schema/events/alertMetrics.py +1 -1
  517. metadata/generated/schema/events/api/__init__.py +1 -1
  518. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  519. metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +69 -0
  520. metadata/generated/schema/events/api/eventsRecord.py +37 -0
  521. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -4
  522. metadata/generated/schema/events/api/typedEvent.py +46 -0
  523. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  524. metadata/generated/schema/events/eventFilterRule.py +1 -1
  525. metadata/generated/schema/events/eventSubscription.py +15 -46
  526. metadata/generated/schema/events/eventSubscriptionOffset.py +7 -2
  527. metadata/generated/schema/events/failedEvent.py +1 -1
  528. metadata/generated/schema/events/failedEventResponse.py +38 -0
  529. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  530. metadata/generated/schema/events/statusContext.py +43 -0
  531. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  532. metadata/generated/schema/events/subscriptionStatus.py +78 -0
  533. metadata/generated/schema/events/testDestinationStatus.py +88 -0
  534. metadata/generated/schema/governance/workflows/__init__.py +3 -0
  535. metadata/generated/schema/governance/workflows/elements/__init__.py +5 -0
  536. metadata/generated/schema/governance/workflows/elements/edge.py +29 -0
  537. metadata/generated/schema/governance/workflows/elements/nodeSubType.py +16 -0
  538. metadata/generated/schema/governance/workflows/elements/nodeType.py +14 -0
  539. metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +3 -0
  540. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +5 -0
  541. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +44 -0
  542. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +49 -0
  543. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +42 -0
  544. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +3 -0
  545. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +30 -0
  546. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +3 -0
  547. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +30 -0
  548. metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +3 -0
  549. metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +57 -0
  550. metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +3 -0
  551. metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +43 -0
  552. metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +44 -0
  553. metadata/generated/schema/{entity/data/metrics.py → governance/workflows/workflowDefinition.py} +36 -49
  554. metadata/generated/schema/governance/workflows/workflowInstance.py +50 -0
  555. metadata/generated/schema/governance/workflows/workflowInstanceState.py +73 -0
  556. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  557. metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +53 -0
  558. metadata/generated/schema/metadataIngestion/application.py +1 -1
  559. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  560. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  561. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  562. metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +111 -0
  563. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -9
  564. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +27 -24
  565. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +42 -1
  566. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  567. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  568. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  569. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  570. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  571. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  572. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  573. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +9 -1
  574. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +9 -1
  575. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  576. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  577. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  578. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  579. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  580. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +9 -1
  581. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  582. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  583. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  584. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  585. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  586. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  587. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  588. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  589. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  590. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  591. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +4 -1
  592. metadata/generated/schema/metadataIngestion/workflow.py +15 -1
  593. metadata/generated/schema/monitoring/__init__.py +1 -1
  594. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  595. metadata/generated/schema/security/__init__.py +1 -1
  596. metadata/generated/schema/security/client/__init__.py +1 -1
  597. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  598. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  599. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  600. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  601. metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
  602. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  603. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  604. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  605. metadata/generated/schema/security/credentials/__init__.py +1 -1
  606. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  607. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  608. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  609. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  610. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  611. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  612. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  613. metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
  614. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  615. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  616. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  617. metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
  618. metadata/generated/schema/security/sasl/__init__.py +1 -1
  619. metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
  620. metadata/generated/schema/security/secrets/__init__.py +1 -1
  621. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  622. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  623. metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
  624. metadata/generated/schema/security/securityConfiguration.py +1 -1
  625. metadata/generated/schema/security/ssl/__init__.py +1 -1
  626. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  627. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  628. metadata/generated/schema/settings/__init__.py +1 -1
  629. metadata/generated/schema/settings/settings.py +7 -1
  630. metadata/generated/schema/system/__init__.py +1 -1
  631. metadata/generated/schema/system/entityError.py +1 -1
  632. metadata/generated/schema/system/eventPublisherJob.py +2 -1
  633. metadata/generated/schema/system/indexingError.py +1 -1
  634. metadata/generated/schema/system/limitsResponse.py +1 -1
  635. metadata/generated/schema/system/ui/__init__.py +1 -1
  636. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  637. metadata/generated/schema/system/ui/page.py +1 -1
  638. metadata/generated/schema/system/validationResponse.py +1 -1
  639. metadata/generated/schema/tests/__init__.py +1 -1
  640. metadata/generated/schema/tests/assigned.py +1 -1
  641. metadata/generated/schema/tests/basic.py +19 -4
  642. metadata/generated/schema/tests/customMetric.py +1 -1
  643. metadata/generated/schema/tests/dataQualityReport.py +1 -1
  644. metadata/generated/schema/tests/resolved.py +1 -1
  645. metadata/generated/schema/tests/testCase.py +6 -2
  646. metadata/generated/schema/tests/testCaseResolutionStatus.py +17 -2
  647. metadata/generated/schema/tests/testDefinition.py +1 -1
  648. metadata/generated/schema/tests/testSuite.py +9 -2
  649. metadata/generated/schema/type/__init__.py +1 -1
  650. metadata/generated/schema/type/apiSchema.py +1 -1
  651. metadata/generated/schema/type/assetCertification.py +26 -0
  652. metadata/generated/schema/type/auditLog.py +1 -1
  653. metadata/generated/schema/type/basic.py +1 -1
  654. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  655. metadata/generated/schema/type/changeEvent.py +1 -1
  656. metadata/generated/schema/type/changeEventType.py +1 -1
  657. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  658. metadata/generated/schema/type/csvDocumentation.py +1 -1
  659. metadata/generated/schema/type/csvErrorType.py +1 -1
  660. metadata/generated/schema/type/csvFile.py +1 -1
  661. metadata/generated/schema/type/csvImportResult.py +1 -1
  662. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  663. metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
  664. metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
  665. metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
  666. metadata/generated/schema/type/customProperty.py +8 -1
  667. metadata/generated/schema/type/dailyCount.py +1 -1
  668. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  669. metadata/generated/schema/type/entityHierarchy.py +1 -1
  670. metadata/generated/schema/type/entityHistory.py +1 -1
  671. metadata/generated/schema/type/entityLineage.py +1 -1
  672. metadata/generated/schema/type/entityReference.py +1 -1
  673. metadata/generated/schema/type/entityReferenceList.py +1 -1
  674. metadata/generated/schema/type/entityRelationship.py +2 -1
  675. metadata/generated/schema/type/entityUsage.py +1 -1
  676. metadata/generated/schema/type/filterPattern.py +1 -1
  677. metadata/generated/schema/type/function.py +1 -1
  678. metadata/generated/schema/type/include.py +1 -1
  679. metadata/generated/schema/type/jdbcConnection.py +1 -1
  680. metadata/generated/schema/type/lifeCycle.py +1 -1
  681. metadata/generated/schema/type/paging.py +1 -1
  682. metadata/generated/schema/type/profile.py +1 -1
  683. metadata/generated/schema/type/queryParserData.py +1 -1
  684. metadata/generated/schema/type/reaction.py +1 -1
  685. metadata/generated/schema/type/schedule.py +1 -1
  686. metadata/generated/schema/type/schema.py +1 -1
  687. metadata/generated/schema/type/tableQuery.py +1 -1
  688. metadata/generated/schema/type/tableUsageCount.py +1 -1
  689. metadata/generated/schema/type/tagLabel.py +1 -1
  690. metadata/generated/schema/type/usageDetails.py +1 -1
  691. metadata/generated/schema/type/usageRequest.py +1 -1
  692. metadata/generated/schema/type/votes.py +1 -1
  693. metadata/ingestion/api/models.py +9 -5
  694. metadata/ingestion/api/parser.py +14 -0
  695. metadata/ingestion/lineage/parser.py +1 -1
  696. metadata/ingestion/lineage/sql_lineage.py +135 -62
  697. metadata/ingestion/models/custom_basemodel_validation.py +80 -0
  698. metadata/ingestion/models/custom_pydantic.py +33 -1
  699. metadata/ingestion/models/custom_types.py +2 -0
  700. metadata/ingestion/models/entity_interface.py +71 -0
  701. metadata/ingestion/ometa/mixins/data_insight_mixin.py +3 -2
  702. metadata/ingestion/ometa/mixins/es_mixin.py +66 -8
  703. metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +5 -3
  704. metadata/ingestion/ometa/mixins/suggestions_mixin.py +3 -3
  705. metadata/ingestion/ometa/mixins/table_mixin.py +1 -1
  706. metadata/ingestion/ometa/models.py +1 -0
  707. metadata/ingestion/ometa/ometa_api.py +6 -3
  708. metadata/ingestion/ometa/routes.py +4 -2
  709. metadata/ingestion/processor/query_parser.py +2 -2
  710. metadata/ingestion/sink/metadata_rest.py +23 -18
  711. metadata/ingestion/source/api/api_service.py +212 -0
  712. metadata/ingestion/source/api/rest/connection.py +93 -0
  713. metadata/ingestion/source/api/rest/metadata.py +278 -0
  714. metadata/ingestion/source/api/rest/models.py +41 -0
  715. metadata/ingestion/source/api/rest/service_spec.py +4 -0
  716. metadata/ingestion/source/dashboard/dashboard_service.py +2 -0
  717. metadata/ingestion/source/dashboard/domodashboard/service_spec.py +6 -0
  718. metadata/ingestion/source/dashboard/lightdash/service_spec.py +4 -0
  719. metadata/ingestion/source/dashboard/looker/metadata.py +33 -4
  720. metadata/ingestion/source/dashboard/looker/service_spec.py +4 -0
  721. metadata/ingestion/source/dashboard/metabase/service_spec.py +4 -0
  722. metadata/ingestion/source/dashboard/microstrategy/__init__.py +0 -0
  723. metadata/ingestion/source/dashboard/{mstr → microstrategy}/client.py +19 -23
  724. metadata/ingestion/source/dashboard/{mstr → microstrategy}/connection.py +9 -11
  725. metadata/ingestion/source/dashboard/{mstr → microstrategy}/metadata.py +18 -14
  726. metadata/ingestion/source/dashboard/{mstr → microstrategy}/models.py +1 -1
  727. metadata/ingestion/source/dashboard/microstrategy/service_spec.py +6 -0
  728. metadata/ingestion/source/dashboard/mode/service_spec.py +4 -0
  729. metadata/ingestion/source/dashboard/powerbi/service_spec.py +4 -0
  730. metadata/ingestion/source/dashboard/qlikcloud/service_spec.py +4 -0
  731. metadata/ingestion/source/dashboard/qliksense/service_spec.py +4 -0
  732. metadata/ingestion/source/dashboard/quicksight/service_spec.py +4 -0
  733. metadata/ingestion/source/dashboard/redash/service_spec.py +4 -0
  734. metadata/ingestion/source/dashboard/sigma/__init__.py +0 -0
  735. metadata/ingestion/source/dashboard/sigma/client.py +186 -0
  736. metadata/ingestion/source/dashboard/sigma/connection.py +67 -0
  737. metadata/ingestion/source/dashboard/sigma/metadata.py +331 -0
  738. metadata/ingestion/source/dashboard/sigma/models.py +97 -0
  739. metadata/ingestion/source/dashboard/sigma/service_spec.py +4 -0
  740. metadata/ingestion/source/dashboard/superset/service_spec.py +4 -0
  741. metadata/ingestion/source/dashboard/tableau/metadata.py +29 -12
  742. metadata/ingestion/source/dashboard/tableau/models.py +10 -0
  743. metadata/ingestion/source/dashboard/tableau/service_spec.py +4 -0
  744. metadata/ingestion/source/database/athena/service_spec.py +10 -0
  745. metadata/ingestion/source/database/azuresql/service_spec.py +12 -0
  746. metadata/ingestion/source/database/bigquery/connection.py +28 -2
  747. metadata/ingestion/source/database/bigquery/lineage.py +29 -2
  748. metadata/ingestion/source/database/bigquery/metadata.py +1 -25
  749. metadata/ingestion/source/database/bigquery/profiler/__init__.py +0 -0
  750. metadata/ingestion/source/database/bigquery/profiler/profiler.py +30 -0
  751. metadata/ingestion/source/database/bigquery/profiler/system.py +166 -0
  752. metadata/ingestion/source/database/bigquery/queries.py +69 -1
  753. metadata/ingestion/source/database/bigquery/service_spec.py +16 -0
  754. metadata/ingestion/source/database/bigtable/service_spec.py +4 -0
  755. metadata/ingestion/source/database/clickhouse/service_spec.py +12 -0
  756. metadata/ingestion/source/database/common_db_source.py +150 -147
  757. metadata/ingestion/source/database/common_nosql_source.py +0 -14
  758. metadata/ingestion/source/database/couchbase/metadata.py +62 -2
  759. metadata/{data_quality/builders/sqa_validator_builder.py → ingestion/source/database/couchbase/models.py} +15 -9
  760. metadata/ingestion/source/database/couchbase/queries.py +6 -1
  761. metadata/ingestion/source/database/couchbase/service_spec.py +4 -0
  762. metadata/ingestion/source/database/database_service.py +15 -22
  763. metadata/ingestion/source/database/databricks/metadata.py +12 -1
  764. metadata/ingestion/source/database/databricks/service_spec.py +20 -0
  765. metadata/ingestion/source/database/datalake/clients/azure_blob.py +0 -3
  766. metadata/ingestion/source/database/datalake/clients/base.py +10 -1
  767. metadata/ingestion/source/database/datalake/clients/gcs.py +10 -6
  768. metadata/ingestion/source/database/datalake/clients/s3.py +0 -3
  769. metadata/ingestion/source/database/datalake/metadata.py +2 -13
  770. metadata/ingestion/source/database/datalake/service_spec.py +16 -0
  771. metadata/ingestion/source/database/db2/connection.py +14 -1
  772. metadata/ingestion/source/database/db2/lineage.py +46 -0
  773. metadata/ingestion/source/database/db2/service_spec.py +9 -0
  774. metadata/ingestion/source/database/dbt/constants.py +12 -0
  775. metadata/ingestion/source/database/dbt/dbt_config.py +24 -2
  776. metadata/ingestion/source/database/dbt/dbt_service.py +25 -1
  777. metadata/ingestion/source/database/dbt/dbt_utils.py +29 -0
  778. metadata/ingestion/source/database/dbt/metadata.py +73 -7
  779. metadata/ingestion/source/database/dbt/models.py +2 -0
  780. metadata/ingestion/source/database/dbt/service_spec.py +4 -0
  781. metadata/ingestion/source/database/deltalake/metadata.py +1 -12
  782. metadata/ingestion/source/database/deltalake/service_spec.py +4 -0
  783. metadata/ingestion/source/database/domodatabase/metadata.py +1 -12
  784. metadata/ingestion/source/database/domodatabase/service_spec.py +4 -0
  785. metadata/ingestion/source/database/doris/metadata.py +1 -1
  786. metadata/ingestion/source/database/doris/service_spec.py +4 -0
  787. metadata/ingestion/source/database/druid/lineage.py +46 -0
  788. metadata/ingestion/source/database/druid/service_spec.py +4 -0
  789. metadata/ingestion/source/database/dynamodb/service_spec.py +10 -0
  790. metadata/ingestion/source/database/exasol/__init__.py +0 -0
  791. metadata/ingestion/source/database/exasol/connection.py +87 -0
  792. metadata/ingestion/source/database/exasol/metadata.py +27 -0
  793. metadata/ingestion/source/database/exasol/service_spec.py +4 -0
  794. metadata/ingestion/source/database/glue/metadata.py +49 -19
  795. metadata/ingestion/source/database/glue/models.py +8 -0
  796. metadata/ingestion/source/database/glue/service_spec.py +4 -0
  797. metadata/ingestion/source/database/greenplum/lineage.py +46 -0
  798. metadata/ingestion/source/database/greenplum/service_spec.py +4 -0
  799. metadata/ingestion/source/database/hive/lineage.py +46 -0
  800. metadata/ingestion/source/database/hive/service_spec.py +4 -0
  801. metadata/ingestion/source/database/iceberg/metadata.py +1 -16
  802. metadata/ingestion/source/database/iceberg/service_spec.py +4 -0
  803. metadata/ingestion/source/database/impala/lineage.py +46 -0
  804. metadata/ingestion/source/database/impala/service_spec.py +4 -0
  805. metadata/ingestion/source/database/life_cycle_query_mixin.py +3 -5
  806. metadata/ingestion/source/database/lineage_source.py +124 -32
  807. metadata/ingestion/source/database/mariadb/lineage.py +46 -0
  808. metadata/ingestion/source/database/mariadb/service_spec.py +4 -0
  809. metadata/ingestion/source/database/mongodb/service_spec.py +10 -0
  810. metadata/ingestion/source/database/mssql/lineage.py +51 -2
  811. metadata/ingestion/source/database/mssql/metadata.py +2 -44
  812. metadata/ingestion/source/database/mssql/service_spec.py +12 -0
  813. metadata/ingestion/source/database/mysql/lineage.py +0 -2
  814. metadata/ingestion/source/database/mysql/queries.py +0 -2
  815. metadata/ingestion/source/database/mysql/service_spec.py +10 -0
  816. metadata/ingestion/source/database/mysql/usage.py +0 -2
  817. metadata/ingestion/source/database/oracle/lineage.py +28 -1
  818. metadata/ingestion/source/database/oracle/metadata.py +2 -23
  819. metadata/ingestion/source/database/oracle/service_spec.py +10 -0
  820. metadata/ingestion/source/database/pinotdb/lineage.py +46 -0
  821. metadata/ingestion/source/database/pinotdb/service_spec.py +4 -0
  822. metadata/ingestion/source/database/postgres/metadata.py +4 -13
  823. metadata/ingestion/source/database/postgres/service_spec.py +10 -0
  824. metadata/ingestion/source/database/postgres/utils.py +26 -0
  825. metadata/ingestion/source/database/presto/service_spec.py +4 -0
  826. metadata/ingestion/source/database/query/service_spec.py +9 -0
  827. metadata/ingestion/source/database/query_parser_source.py +1 -0
  828. metadata/ingestion/source/database/redshift/connection.py +9 -2
  829. metadata/ingestion/source/database/redshift/lineage.py +27 -3
  830. metadata/ingestion/source/database/redshift/metadata.py +2 -27
  831. metadata/ingestion/source/database/redshift/profiler/__init__.py +0 -0
  832. metadata/ingestion/source/database/redshift/profiler/profiler.py +14 -0
  833. metadata/ingestion/source/database/redshift/profiler/system.py +149 -0
  834. metadata/ingestion/source/database/redshift/queries.py +99 -8
  835. metadata/ingestion/source/database/redshift/service_spec.py +14 -0
  836. metadata/ingestion/source/database/redshift/utils.py +3 -3
  837. metadata/ingestion/source/database/salesforce/metadata.py +1 -12
  838. metadata/ingestion/source/database/salesforce/service_spec.py +4 -0
  839. metadata/ingestion/source/database/sample_data.py +129 -34
  840. metadata/ingestion/source/database/saperp/service_spec.py +4 -0
  841. metadata/ingestion/source/database/saphana/service_spec.py +7 -0
  842. metadata/ingestion/source/database/sas/metadata.py +1 -10
  843. metadata/ingestion/source/database/sas/service_spec.py +4 -0
  844. metadata/ingestion/source/database/singlestore/lineage.py +46 -0
  845. metadata/ingestion/source/database/singlestore/service_spec.py +9 -0
  846. metadata/ingestion/source/database/snowflake/connection.py +13 -3
  847. metadata/ingestion/source/database/snowflake/lineage.py +65 -3
  848. metadata/ingestion/source/database/snowflake/metadata.py +1 -24
  849. metadata/ingestion/source/database/snowflake/models.py +50 -1
  850. metadata/ingestion/source/database/snowflake/profiler/__init__.py +0 -0
  851. metadata/ingestion/source/database/snowflake/profiler/profiler.py +26 -0
  852. metadata/ingestion/source/database/snowflake/profiler/system.py +437 -0
  853. metadata/ingestion/source/database/snowflake/queries.py +27 -0
  854. metadata/ingestion/source/database/snowflake/service_spec.py +20 -0
  855. metadata/ingestion/source/database/sql_column_handler.py +26 -0
  856. metadata/ingestion/source/database/sqlite/lineage.py +46 -0
  857. metadata/ingestion/source/database/sqlite/service_spec.py +4 -0
  858. metadata/ingestion/source/database/stored_procedures_mixin.py +90 -52
  859. metadata/ingestion/source/database/teradata/lineage.py +46 -0
  860. metadata/ingestion/source/database/teradata/service_spec.py +4 -0
  861. metadata/ingestion/source/database/trino/connection.py +60 -23
  862. metadata/ingestion/source/database/trino/profiler/__init__.py +0 -0
  863. metadata/ingestion/source/database/trino/profiler/system_tables_profiler.py +167 -0
  864. metadata/ingestion/source/database/trino/service_spec.py +16 -0
  865. metadata/ingestion/source/database/unitycatalog/metadata.py +3 -24
  866. metadata/ingestion/source/database/unitycatalog/service_spec.py +22 -0
  867. metadata/ingestion/source/database/usage_source.py +4 -1
  868. metadata/ingestion/source/database/vertica/service_spec.py +10 -0
  869. metadata/ingestion/source/messaging/kafka/service_spec.py +4 -0
  870. metadata/ingestion/source/messaging/kinesis/service_spec.py +4 -0
  871. metadata/ingestion/source/messaging/redpanda/service_spec.py +4 -0
  872. metadata/ingestion/source/metadata/alationsink/service_spec.py +4 -0
  873. metadata/ingestion/source/metadata/amundsen/service_spec.py +4 -0
  874. metadata/ingestion/source/metadata/atlas/service_spec.py +4 -0
  875. metadata/ingestion/source/mlmodel/mlflow/service_spec.py +4 -0
  876. metadata/ingestion/source/mlmodel/sagemaker/service_spec.py +4 -0
  877. metadata/ingestion/source/pipeline/airbyte/service_spec.py +4 -0
  878. metadata/ingestion/source/pipeline/airflow/connection.py +45 -2
  879. metadata/ingestion/source/pipeline/airflow/metadata.py +71 -27
  880. metadata/ingestion/source/pipeline/airflow/service_spec.py +4 -0
  881. metadata/ingestion/source/pipeline/dagster/metadata.py +3 -1
  882. metadata/ingestion/source/pipeline/dagster/service_spec.py +4 -0
  883. metadata/ingestion/source/pipeline/databrickspipeline/service_spec.py +6 -0
  884. metadata/ingestion/source/pipeline/dbtcloud/client.py +67 -28
  885. metadata/ingestion/source/pipeline/dbtcloud/connection.py +1 -3
  886. metadata/ingestion/source/pipeline/dbtcloud/models.py +1 -1
  887. metadata/ingestion/source/pipeline/dbtcloud/service_spec.py +4 -0
  888. metadata/ingestion/source/pipeline/domopipeline/service_spec.py +4 -0
  889. metadata/ingestion/source/pipeline/fivetran/metadata.py +1 -1
  890. metadata/ingestion/source/pipeline/fivetran/service_spec.py +4 -0
  891. metadata/ingestion/source/pipeline/flink/service_spec.py +4 -0
  892. metadata/ingestion/source/pipeline/gluepipeline/service_spec.py +4 -0
  893. metadata/ingestion/source/pipeline/kafkaconnect/client.py +13 -14
  894. metadata/ingestion/source/pipeline/kafkaconnect/connection.py +1 -1
  895. metadata/ingestion/source/pipeline/kafkaconnect/service_spec.py +4 -0
  896. metadata/ingestion/source/pipeline/nifi/service_spec.py +4 -0
  897. metadata/ingestion/source/pipeline/openlineage/service_spec.py +4 -0
  898. metadata/ingestion/source/pipeline/pipeline_service.py +3 -1
  899. metadata/ingestion/source/pipeline/spline/service_spec.py +4 -0
  900. metadata/ingestion/source/search/elasticsearch/metadata.py +53 -0
  901. metadata/ingestion/source/search/elasticsearch/service_spec.py +4 -0
  902. metadata/ingestion/source/search/search_service.py +44 -1
  903. metadata/ingestion/source/storage/gcs/metadata.py +2 -2
  904. metadata/ingestion/source/storage/gcs/service_spec.py +4 -0
  905. metadata/ingestion/source/storage/s3/service_spec.py +4 -0
  906. metadata/mixins/pandas/pandas_mixin.py +2 -31
  907. metadata/mixins/sqalchemy/sqa_mixin.py +18 -17
  908. metadata/parsers/avro_parser.py +51 -16
  909. metadata/parsers/json_schema_parser.py +45 -16
  910. metadata/pii/processor.py +10 -9
  911. metadata/pii/scanners/ner_scanner.py +2 -1
  912. metadata/profiler/api/models.py +4 -75
  913. metadata/profiler/config.py +39 -0
  914. metadata/profiler/interface/nosql/profiler_interface.py +1 -26
  915. metadata/profiler/interface/pandas/profiler_interface.py +37 -77
  916. metadata/profiler/interface/profiler_interface.py +25 -279
  917. metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +0 -19
  918. metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +2 -17
  919. metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +1 -1
  920. metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +7 -5
  921. metadata/profiler/interface/sqlalchemy/profiler_interface.py +73 -125
  922. metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +5 -5
  923. metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +1 -1
  924. metadata/profiler/interface/sqlalchemy/stored_statistics_profiler.py +145 -0
  925. metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +9 -4
  926. metadata/profiler/metrics/static/max.py +4 -2
  927. metadata/profiler/metrics/static/min.py +4 -2
  928. metadata/profiler/metrics/system/system.py +69 -374
  929. metadata/profiler/orm/converter/base.py +23 -13
  930. metadata/profiler/orm/converter/bigquery/converter.py +1 -1
  931. metadata/profiler/orm/converter/converter_registry.py +2 -0
  932. metadata/profiler/orm/converter/mssql/converter.py +15 -1
  933. metadata/profiler/orm/functions/count.py +9 -0
  934. metadata/profiler/orm/functions/md5.py +42 -0
  935. metadata/{data_quality/builders/pandas_validator_builder.py → profiler/orm/functions/substr.py} +13 -10
  936. metadata/profiler/orm/functions/table_metric_computer.py +10 -9
  937. metadata/profiler/orm/functions/unique_count.py +6 -0
  938. metadata/profiler/orm/registry.py +27 -2
  939. metadata/profiler/orm/types/custom_timestamp.py +4 -2
  940. metadata/profiler/processor/core.py +13 -62
  941. metadata/profiler/processor/handle_partition.py +0 -48
  942. metadata/profiler/processor/processor.py +1 -1
  943. metadata/profiler/processor/runner.py +116 -35
  944. metadata/profiler/processor/sample_data_handler.py +7 -4
  945. metadata/profiler/source/database/base/profiler_source.py +214 -0
  946. metadata/profiler/source/{bigquery → database/bigquery}/profiler_source.py +4 -4
  947. metadata/profiler/source/{databricks → database/databricks}/profiler_source.py +6 -7
  948. metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/first_quartile.py +1 -1
  949. metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/median.py +1 -1
  950. metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/third_quartile.py +1 -1
  951. metadata/profiler/source/{single_store → database/single_store}/metrics/window/first_quartile.py +3 -1
  952. metadata/profiler/source/{single_store → database/single_store}/metrics/window/median.py +3 -1
  953. metadata/profiler/source/{single_store → database/single_store}/metrics/window/third_quartile.py +3 -1
  954. metadata/profiler/source/fetcher/config.py +44 -0
  955. metadata/profiler/source/fetcher/entity_fetcher.py +62 -0
  956. metadata/profiler/source/fetcher/fetcher_strategy.py +299 -0
  957. metadata/profiler/source/fetcher/profiler_source_factory.py +89 -0
  958. metadata/profiler/source/metadata.py +16 -201
  959. metadata/profiler/source/metadata_ext.py +23 -18
  960. metadata/profiler/source/model.py +29 -0
  961. metadata/sampler/config.py +237 -0
  962. metadata/sampler/models.py +106 -0
  963. metadata/{profiler/processor/sampler → sampler}/nosql/sampler.py +44 -12
  964. metadata/sampler/pandas/sampler.py +239 -0
  965. metadata/{utils → sampler}/partition.py +66 -51
  966. metadata/sampler/processor.py +154 -0
  967. metadata/sampler/sampler_interface.py +251 -0
  968. metadata/{profiler/processor/sampler → sampler}/sqlalchemy/azuresql/sampler.py +1 -1
  969. metadata/{profiler/processor/sampler → sampler}/sqlalchemy/bigquery/sampler.py +55 -26
  970. metadata/sampler/sqlalchemy/mssql/sampler.py +50 -0
  971. metadata/sampler/sqlalchemy/postgres/sampler.py +91 -0
  972. metadata/{profiler/processor/sampler → sampler}/sqlalchemy/sampler.py +93 -98
  973. metadata/sampler/sqlalchemy/snowflake/sampler.py +95 -0
  974. metadata/{profiler/processor/sampler → sampler}/sqlalchemy/trino/sampler.py +5 -3
  975. metadata/utils/class_helper.py +12 -0
  976. metadata/utils/collaborative_super.py +28 -0
  977. metadata/utils/constants.py +65 -0
  978. metadata/utils/constraints.py +65 -0
  979. metadata/utils/dict.py +8 -0
  980. metadata/utils/dispatch.py +1 -53
  981. metadata/utils/entity_link.py +8 -2
  982. metadata/utils/entity_utils.py +93 -0
  983. metadata/utils/filters.py +15 -0
  984. metadata/utils/fqn.py +15 -0
  985. metadata/utils/helpers.py +3 -2
  986. metadata/utils/importer.py +12 -24
  987. metadata/utils/logger.py +31 -1
  988. metadata/utils/lru_cache.py +76 -15
  989. metadata/utils/profiler_utils.py +43 -9
  990. metadata/utils/service_spec/__init__.py +5 -0
  991. metadata/utils/service_spec/default.py +21 -0
  992. metadata/utils/service_spec/service_spec.py +146 -0
  993. metadata/utils/ssl_manager.py +33 -0
  994. metadata/utils/time_utils.py +33 -5
  995. metadata/workflow/application.py +7 -36
  996. metadata/workflow/base.py +47 -17
  997. metadata/workflow/classification.py +53 -0
  998. metadata/workflow/data_quality.py +5 -1
  999. metadata/workflow/ingestion.py +6 -38
  1000. metadata/workflow/profiler.py +1 -17
  1001. metadata/workflow/workflow_output_handler.py +11 -8
  1002. metadata/workflow/workflow_status_mixin.py +0 -2
  1003. openmetadata_ingestion-1.6.0.0.dist-info/LICENSE +114 -0
  1004. {openmetadata_ingestion-1.5.13.2.dist-info → openmetadata_ingestion-1.6.0.0.dist-info}/METADATA +488 -563
  1005. {openmetadata_ingestion-1.5.13.2.dist-info → openmetadata_ingestion-1.6.0.0.dist-info}/RECORD +1012 -825
  1006. {openmetadata_ingestion-1.5.13.2.dist-info → openmetadata_ingestion-1.6.0.0.dist-info}/entry_points.txt +3 -0
  1007. metadata/data_quality/interface/test_suite_interface_factory.py +0 -128
  1008. metadata/data_quality/runner/test_suite_source_factory.py +0 -38
  1009. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +0 -54
  1010. metadata/profiler/interface/profiler_interface_factory.py +0 -107
  1011. metadata/profiler/metrics/system/queries/bigquery.py +0 -54
  1012. metadata/profiler/metrics/system/queries/redshift.py +0 -103
  1013. metadata/profiler/metrics/system/queries/snowflake.py +0 -191
  1014. metadata/profiler/processor/sampler/pandas/sampler.py +0 -170
  1015. metadata/profiler/processor/sampler/sampler_factory.py +0 -100
  1016. metadata/profiler/processor/sampler/sampler_interface.py +0 -74
  1017. metadata/profiler/processor/sampler/sqlalchemy/snowflake/sampler.py +0 -60
  1018. metadata/profiler/source/base/profiler_source.py +0 -299
  1019. metadata/profiler/source/profiler_source_factory.py +0 -54
  1020. openmetadata_ingestion-1.5.13.2.dist-info/LICENSE +0 -201
  1021. {metadata/ingestion/source/dashboard/mstr → _openmetadata_testutils/pytest_openmetadata}/__init__.py +0 -0
  1022. /metadata/profiler/source/{bigquery → database/bigquery}/type_mapper.py +0 -0
  1023. /metadata/profiler/source/{mariadb → database/mariadb}/functions/median.py +0 -0
  1024. /metadata/profiler/source/{single_store → database/single_store}/functions/median.py +0 -0
  1025. {openmetadata_ingestion-1.5.13.2.dist-info → openmetadata_ingestion-1.6.0.0.dist-info}/WHEEL +0 -0
  1026. {openmetadata_ingestion-1.5.13.2.dist-info → openmetadata_ingestion-1.6.0.0.dist-info}/top_level.txt +0 -0
@@ -14,9 +14,9 @@ Interfaces with database for all database engine
14
14
  supporting sqlalchemy abstraction layer
15
15
  """
16
16
 
17
- from metadata.data_quality.builders.i_validator_builder import IValidatorBuilder
18
- from metadata.data_quality.builders.pandas_validator_builder import (
19
- PandasValidatorBuilder,
17
+ from metadata.data_quality.builders.validator_builder import (
18
+ SourceType,
19
+ ValidatorBuilder,
20
20
  )
21
21
  from metadata.data_quality.interface.test_suite_interface import TestSuiteInterface
22
22
  from metadata.generated.schema.entity.data.table import Table
@@ -25,8 +25,8 @@ from metadata.generated.schema.entity.services.connections.database.datalakeConn
25
25
  )
26
26
  from metadata.generated.schema.tests.testCase import TestCase
27
27
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
28
- from metadata.ingestion.source.connections import get_connection
29
28
  from metadata.mixins.pandas.pandas_mixin import PandasInterfaceMixin
29
+ from metadata.sampler.sampler_interface import SamplerInterface
30
30
  from metadata.utils.logger import test_suite_logger
31
31
 
32
32
  logger = test_suite_logger()
@@ -43,31 +43,32 @@ class PandasTestSuiteInterface(TestSuiteInterface, PandasInterfaceMixin):
43
43
  self,
44
44
  service_connection_config: DatalakeConnection,
45
45
  ometa_client: OpenMetadata,
46
- table_entity: Table = None,
47
- **kwargs, # pylint: disable=unused-argument
46
+ sampler: SamplerInterface,
47
+ table_entity: Table,
48
+ **kwargs,
48
49
  ):
49
- self.table_entity = table_entity
50
-
51
- self.ometa_client = ometa_client
52
- self.service_connection_config = service_connection_config
50
+ super().__init__(
51
+ service_connection_config,
52
+ ometa_client,
53
+ sampler,
54
+ table_entity,
55
+ **kwargs,
56
+ )
53
57
 
54
58
  (
55
- self.table_sample_query,
56
- self.table_sample_config,
57
- self.table_partition_config,
59
+ self.sample_query,
60
+ self.profile_sample_config,
61
+ self.partition_details,
58
62
  ) = self._get_table_config()
59
63
 
60
- # add partition logic to test suite
61
- self.dfs = self.return_ometa_dataframes_sampled(
62
- service_connection_config=self.service_connection_config,
63
- client=get_connection(self.service_connection_config).client._client,
64
- table=self.table_entity,
65
- profile_sample_config=self.table_sample_config,
66
- )
67
- if self.dfs and self.table_partition_config:
68
- self.dfs = self.get_partitioned_df(self.dfs)
64
+ self.dataset = self.sampler.get_dataset()
69
65
 
70
66
  def _get_validator_builder(
71
67
  self, test_case: TestCase, entity_type: str
72
- ) -> IValidatorBuilder:
73
- return PandasValidatorBuilder(self.dfs, test_case, entity_type)
68
+ ) -> ValidatorBuilder:
69
+ return self.validator_builder_class(
70
+ runner=self.dataset,
71
+ test_case=test_case,
72
+ entity_type=entity_type,
73
+ source_type=SourceType.PANDAS,
74
+ )
@@ -19,8 +19,10 @@ from typing import Union
19
19
  from sqlalchemy.orm import DeclarativeMeta
20
20
  from sqlalchemy.orm.util import AliasedClass
21
21
 
22
- from metadata.data_quality.builders.i_validator_builder import IValidatorBuilder
23
- from metadata.data_quality.builders.sqa_validator_builder import SQAValidatorBuilder
22
+ from metadata.data_quality.builders.validator_builder import (
23
+ SourceType,
24
+ ValidatorBuilder,
25
+ )
24
26
  from metadata.data_quality.interface.test_suite_interface import TestSuiteInterface
25
27
  from metadata.generated.schema.entity.data.table import Table
26
28
  from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
@@ -29,7 +31,7 @@ from metadata.ingestion.connections.session import create_and_bind_session
29
31
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
30
32
  from metadata.mixins.sqalchemy.sqa_mixin import SQAInterfaceMixin
31
33
  from metadata.profiler.processor.runner import QueryRunner
32
- from metadata.profiler.processor.sampler.sqlalchemy.sampler import SQASampler
34
+ from metadata.sampler.sampler_interface import SamplerInterface
33
35
  from metadata.utils.constants import TEN_MIN
34
36
  from metadata.utils.logger import test_suite_logger
35
37
  from metadata.utils.ssl_manager import get_ssl_connection
@@ -49,14 +51,15 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
49
51
  self,
50
52
  service_connection_config: DatabaseConnection,
51
53
  ometa_client: OpenMetadata,
54
+ sampler: SamplerInterface,
52
55
  table_entity: Table = None,
53
- sqa_metadata=None,
56
+ **kwargs,
54
57
  ):
55
- self.ometa_client = ometa_client
56
- self.table_entity = table_entity
57
- self.service_connection_config = service_connection_config
58
+ super().__init__(
59
+ service_connection_config, ometa_client, sampler, table_entity, **kwargs
60
+ )
61
+ self.source_type = SourceType.SQL
58
62
  self.create_session()
59
- self._table = self._convert_table_to_orm_object(sqa_metadata)
60
63
 
61
64
  (
62
65
  self.table_sample_query,
@@ -64,7 +67,6 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
64
67
  self.table_partition_config,
65
68
  ) = self._get_table_config()
66
69
 
67
- self._sampler = self._create_sampler()
68
70
  self._runner = self._create_runner()
69
71
 
70
72
  def create_session(self):
@@ -73,7 +75,7 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
73
75
  )
74
76
 
75
77
  @property
76
- def sample(self) -> Union[DeclarativeMeta, AliasedClass]:
78
+ def dataset(self) -> Union[DeclarativeMeta, AliasedClass]:
77
79
  """_summary_
78
80
 
79
81
  Returns:
@@ -84,7 +86,7 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
84
86
  "You must create a sampler first `<instance>.create_sampler(...)`."
85
87
  )
86
88
 
87
- return self.sampler.random_sample()
89
+ return self.sampler.get_dataset()
88
90
 
89
91
  @property
90
92
  def runner(self) -> QueryRunner:
@@ -95,47 +97,14 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
95
97
  """
96
98
  return self._runner
97
99
 
98
- @property
99
- def sampler(self) -> SQASampler:
100
- """getter method for the Runner object
101
-
102
- Returns:
103
- Sampler: sampler object
104
- """
105
- return self._sampler
106
-
107
- @property
108
- def table(self):
109
- """getter method for the table object
110
-
111
- Returns:
112
- Table: table object
113
- """
114
- return self._table
115
-
116
- def _create_sampler(self) -> SQASampler:
117
- """Create sampler instance"""
118
- from metadata.profiler.processor.sampler.sampler_factory import ( # pylint: disable=import-outside-toplevel
119
- sampler_factory_,
120
- )
121
-
122
- return sampler_factory_.create(
123
- self.service_connection_config.__class__.__name__,
124
- client=self.session,
125
- table=self.table,
126
- profile_sample_config=self.table_sample_config,
127
- partition_details=self.table_partition_config,
128
- profile_sample_query=self.table_sample_query,
129
- )
130
-
131
- def _create_runner(self) -> None:
100
+ def _create_runner(self) -> QueryRunner:
132
101
  """Create a QueryRunner Instance"""
133
102
 
134
103
  return cls_timeout(TEN_MIN)(
135
104
  QueryRunner(
136
105
  session=self.session,
137
- table=self.table,
138
- sample=self.sample,
106
+ dataset=self.dataset,
107
+ raw_dataset=self.sampler.raw_dataset,
139
108
  partition_details=self.table_partition_config,
140
109
  profile_sample_query=self.table_sample_query,
141
110
  )
@@ -143,5 +112,10 @@ class SQATestSuiteInterface(SQAInterfaceMixin, TestSuiteInterface):
143
112
 
144
113
  def _get_validator_builder(
145
114
  self, test_case: TestCase, entity_type: str
146
- ) -> IValidatorBuilder:
147
- return SQAValidatorBuilder(self.runner, test_case, entity_type)
115
+ ) -> ValidatorBuilder:
116
+ return self.validator_builder_class(
117
+ runner=self.runner,
118
+ test_case=test_case,
119
+ entity_type=entity_type,
120
+ source_type=self.source_type,
121
+ )
@@ -15,9 +15,9 @@ supporting sqlalchemy abstraction layer
15
15
  """
16
16
 
17
17
  from abc import ABC, abstractmethod
18
- from typing import Optional, Type
18
+ from typing import Optional, Set, Type
19
19
 
20
- from metadata.data_quality.builders.i_validator_builder import IValidatorBuilder
20
+ from metadata.data_quality.builders.validator_builder import ValidatorBuilder
21
21
  from metadata.data_quality.validations.base_test_handler import BaseTestValidator
22
22
  from metadata.data_quality.validations.runtime_param_setter.param_setter import (
23
23
  RuntimeParameterSetter,
@@ -31,9 +31,8 @@ from metadata.generated.schema.tests.basic import TestCaseResult
31
31
  from metadata.generated.schema.tests.testCase import TestCase
32
32
  from metadata.generated.schema.tests.testDefinition import TestDefinition
33
33
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
34
- from metadata.profiler.api.models import ProfileSampleConfig
34
+ from metadata.sampler.sampler_interface import SamplerInterface
35
35
  from metadata.utils.logger import test_suite_logger
36
- from metadata.utils.partition import get_partition_details
37
36
 
38
37
  logger = test_suite_logger()
39
38
 
@@ -43,32 +42,44 @@ class TestSuiteInterface(ABC):
43
42
 
44
43
  runtime_params_setter_fact = RuntimeParameterSetterFactory
45
44
 
46
- @abstractmethod
47
45
  def __init__(
48
46
  self,
49
- ometa_client: OpenMetadata,
50
47
  service_connection_config: DatabaseConnection,
48
+ ometa_client: OpenMetadata,
49
+ sampler: SamplerInterface,
51
50
  table_entity: Table,
51
+ validator_builder: Type[ValidatorBuilder],
52
52
  ):
53
53
  """Required attribute for the interface"""
54
54
  self.ometa_client = ometa_client
55
55
  self.service_connection_config = service_connection_config
56
56
  self.table_entity = table_entity
57
+ self.sampler = sampler
58
+ self.validator_builder_class = validator_builder
57
59
 
58
- @property
59
- def sampler(self):
60
- """Get the sampler object
61
-
62
- Note: Overriden in the implementation class. This should be removed from the interface. It has been
63
- implemented as the RuntimeParameterSetter takes the sampler as an argument, though we may want to
64
- remove that dependency.
65
- """
66
- return None
60
+ @classmethod
61
+ def create(
62
+ cls,
63
+ service_connection_config: DatabaseConnection,
64
+ ometa_client: OpenMetadata,
65
+ sampler: SamplerInterface,
66
+ table_entity: Table,
67
+ *args,
68
+ **kwargs,
69
+ ):
70
+ return cls(
71
+ service_connection_config,
72
+ ometa_client,
73
+ sampler,
74
+ table_entity,
75
+ *args,
76
+ **kwargs,
77
+ )
67
78
 
68
79
  @abstractmethod
69
80
  def _get_validator_builder(
70
81
  self, test_case: TestCase, entity_type: str
71
- ) -> IValidatorBuilder:
82
+ ) -> ValidatorBuilder:
72
83
  """get the builder class for the validator. Define this in the implementation class
73
84
 
74
85
  Args:
@@ -76,7 +87,7 @@ class TestSuiteInterface(ABC):
76
87
  entity_type (str): type of the entity
77
88
 
78
89
  Returns:
79
- IValidatorBuilder: a validator builder
90
+ ValidatorBuilder: a validator builder
80
91
  """
81
92
  raise NotImplementedError
82
93
 
@@ -102,9 +113,9 @@ class TestSuiteInterface(ABC):
102
113
  runtime_params_setter_fact: RuntimeParameterSetterFactory = (
103
114
  self._get_runtime_params_setter_fact()
104
115
  ) # type: ignore
105
- runtime_params_setter: Optional[
116
+ runtime_params_setters: Set[
106
117
  RuntimeParameterSetter
107
- ] = runtime_params_setter_fact.get_runtime_param_setter(
118
+ ] = runtime_params_setter_fact.get_runtime_param_setters(
108
119
  test_case.testDefinition.fullyQualifiedName, # type: ignore
109
120
  self.ometa_client,
110
121
  self.service_connection_config,
@@ -118,7 +129,7 @@ class TestSuiteInterface(ABC):
118
129
  ).entityType.value
119
130
 
120
131
  validator_builder = self._get_validator_builder(test_case, entity_type)
121
- validator_builder.set_runtime_params(runtime_params_setter)
132
+ validator_builder.set_runtime_params(runtime_params_setters)
122
133
  validator: BaseTestValidator = validator_builder.validator
123
134
  try:
124
135
  return validator.run_validation()
@@ -128,37 +139,10 @@ class TestSuiteInterface(ABC):
128
139
  )
129
140
  raise RuntimeError(err)
130
141
 
131
- def _get_sample_query(self) -> Optional[str]:
132
- """Get the sampling query for the data quality tests
133
-
134
- Args:
135
- entity (Table): _description_
136
- """
137
- if self.table_entity.tableProfilerConfig:
138
- return self.table_entity.tableProfilerConfig.profileQuery
139
-
140
- return None
141
-
142
- def _get_profile_sample(self) -> Optional[ProfileSampleConfig]:
143
- try:
144
- if self.table_entity.tableProfilerConfig.profileSample:
145
- return ProfileSampleConfig(
146
- profile_sample=self.table_entity.tableProfilerConfig.profileSample,
147
- profile_sample_type=self.table_entity.tableProfilerConfig.profileSampleType,
148
- )
149
- except AttributeError:
150
- # if tableProfilerConfig is None it will indicate that the table has not profiler config
151
- # hence we can return None
152
- return None
153
- return None
154
-
155
142
  def _get_table_config(self):
156
143
  """Get the sampling configuration for the data quality tests"""
157
- sample_query = self._get_sample_query()
158
- sample_config = None
159
- partition_config = None
160
- if not sample_query:
161
- sample_config = self._get_profile_sample()
162
- partition_config = get_partition_details(self.table_entity)
163
-
164
- return sample_query, sample_config, partition_config
144
+ return (
145
+ self.sampler.sample_query,
146
+ self.sampler.sample_config,
147
+ self.sampler.partition_details,
148
+ )
@@ -23,10 +23,8 @@ from metadata.data_quality.api.models import (
23
23
  TestCaseResults,
24
24
  TestSuiteProcessorConfig,
25
25
  )
26
+ from metadata.data_quality.runner.base_test_suite_source import BaseTestSuiteRunner
26
27
  from metadata.data_quality.runner.core import DataTestsRunner
27
- from metadata.data_quality.runner.test_suite_source_factory import (
28
- test_suite_source_factory,
29
- )
30
28
  from metadata.generated.schema.api.tests.createTestCase import CreateTestCaseRequest
31
29
  from metadata.generated.schema.entity.data.table import Table
32
30
  from metadata.generated.schema.entity.services.ingestionPipelines.status import (
@@ -95,12 +93,7 @@ class TestCaseRunner(Processor):
95
93
  record.table, openmetadata_test_cases
96
94
  )
97
95
 
98
- test_suite_runner = test_suite_source_factory.create(
99
- record.service_type.lower(),
100
- self.config,
101
- self.metadata,
102
- record.table,
103
- ).get_data_quality_runner()
96
+ test_suite_runner = self.get_test_suite_runner(record.table)
104
97
 
105
98
  logger.debug(
106
99
  f"Found {len(openmetadata_test_cases)} test cases for table {record.table.fullyQualifiedName.root}"
@@ -357,3 +350,10 @@ class TestCaseRunner(Processor):
357
350
  else:
358
351
  result.append(tc)
359
352
  return result
353
+
354
+ def get_test_suite_runner(self, table: Table):
355
+ return BaseTestSuiteRunner(
356
+ self.config,
357
+ self.metadata,
358
+ table,
359
+ ).get_data_quality_runner()
@@ -15,25 +15,27 @@ Base source for the data quality used to instantiate a data quality runner with
15
15
  from copy import deepcopy
16
16
  from typing import Optional, cast
17
17
 
18
- from sqlalchemy import MetaData
19
-
18
+ from metadata.data_quality.builders.validator_builder import ValidatorBuilder
20
19
  from metadata.data_quality.interface.test_suite_interface import TestSuiteInterface
21
- from metadata.data_quality.interface.test_suite_interface_factory import (
22
- test_suite_interface_factory,
23
- )
24
20
  from metadata.data_quality.runner.core import DataTestsRunner
25
21
  from metadata.generated.schema.entity.data.table import Table
26
- from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
27
- DatalakeConnection,
28
- )
29
22
  from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
23
+ from metadata.generated.schema.entity.services.serviceType import ServiceType
24
+ from metadata.generated.schema.metadataIngestion.testSuitePipeline import (
25
+ TestSuitePipeline,
26
+ )
30
27
  from metadata.generated.schema.metadataIngestion.workflow import (
31
28
  OpenMetadataWorkflowConfig,
32
29
  )
33
30
  from metadata.generated.schema.type.entityReference import EntityReference
34
31
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
35
-
36
- NON_SQA_DATABASE_CONNECTIONS = (DatalakeConnection,)
32
+ from metadata.sampler.models import SampleConfig
33
+ from metadata.sampler.sampler_interface import SamplerInterface
34
+ from metadata.utils.profiler_utils import get_context_entities
35
+ from metadata.utils.service_spec.service_spec import (
36
+ import_sampler_class,
37
+ import_test_suite_class,
38
+ )
37
39
 
38
40
 
39
41
  class BaseTestSuiteRunner:
@@ -45,11 +47,16 @@ class BaseTestSuiteRunner:
45
47
  ometa_client: OpenMetadata,
46
48
  entity: Table,
47
49
  ):
50
+ self.validator_builder_class = ValidatorBuilder
48
51
  self._interface = None
49
52
  self.entity = entity
50
53
  self.service_conn_config = self._copy_service_config(config, self.entity.database) # type: ignore
54
+ self._interface_type: str = self.service_conn_config.type.value.lower()
55
+
56
+ self.source_config = TestSuitePipeline.model_validate(
57
+ config.source.sourceConfig.config
58
+ )
51
59
  self.ometa_client = ometa_client
52
- self.sqa_metadata = self._set_sqa_metadata()
53
60
 
54
61
  @property
55
62
  def interface(self) -> Optional[TestSuiteInterface]:
@@ -87,28 +94,47 @@ class BaseTestSuiteRunner:
87
94
 
88
95
  return config_copy
89
96
 
90
- def _set_sqa_metadata(self):
91
- """Set sqlalchemy metadata"""
92
- if not isinstance(self.service_conn_config, NON_SQA_DATABASE_CONNECTIONS):
93
- return MetaData()
94
- return None
95
-
96
97
  def create_data_quality_interface(self) -> TestSuiteInterface:
97
98
  """Create data quality interface
98
99
 
99
100
  Returns:
100
101
  TestSuiteInterface: a data quality interface
101
102
  """
102
- data_quality_interface: TestSuiteInterface = (
103
- test_suite_interface_factory.create(
104
- self.service_conn_config,
105
- self.ometa_client,
106
- self.entity,
107
- sqa_metadata=self.sqa_metadata,
108
- )
103
+ schema_entity, database_entity, _ = get_context_entities(
104
+ entity=self.entity, metadata=self.ometa_client
105
+ )
106
+ test_suite_class = import_test_suite_class(
107
+ ServiceType.Database,
108
+ source_type=self._interface_type,
109
+ source_config_type=self.service_conn_config.type.value,
110
+ )
111
+ sampler_class = import_sampler_class(
112
+ ServiceType.Database,
113
+ source_type=self._interface_type,
114
+ source_config_type=self.service_conn_config.type.value,
115
+ )
116
+ # This is shared between the sampler and DQ interfaces
117
+ sampler_interface: SamplerInterface = sampler_class.create(
118
+ service_connection_config=self.service_conn_config,
119
+ ometa_client=self.ometa_client,
120
+ entity=self.entity,
121
+ schema_entity=schema_entity,
122
+ database_entity=database_entity,
123
+ default_sample_config=SampleConfig(
124
+ profile_sample=self.source_config.profileSample,
125
+ profile_sample_type=self.source_config.profileSampleType,
126
+ sampling_method_type=self.source_config.samplingMethodType,
127
+ ),
128
+ )
129
+
130
+ self.interface: TestSuiteInterface = test_suite_class.create(
131
+ service_connection_config=self.service_conn_config,
132
+ ometa_client=self.ometa_client,
133
+ sampler=sampler_interface,
134
+ table_entity=self.entity,
135
+ validator_builder=self.validator_builder_class,
109
136
  )
110
- self.interface = data_quality_interface
111
- return data_quality_interface
137
+ return self.interface
112
138
 
113
139
  def get_data_quality_runner(self) -> DataTestsRunner:
114
140
  """Get a data quality runner
@@ -38,8 +38,8 @@ from metadata.ingestion.api.steps import Source
38
38
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
39
39
  from metadata.utils import fqn
40
40
  from metadata.utils.constants import CUSTOM_CONNECTOR_PREFIX
41
- from metadata.utils.importer import import_source_class
42
41
  from metadata.utils.logger import test_suite_logger
42
+ from metadata.utils.service_spec.service_spec import import_source_class
43
43
 
44
44
  logger = test_suite_logger()
45
45
 
@@ -17,19 +17,18 @@ from __future__ import annotations
17
17
 
18
18
  import reprlib
19
19
  from abc import ABC, abstractmethod
20
- from datetime import datetime
21
20
  from typing import TYPE_CHECKING, Callable, List, Optional, Type, TypeVar, Union
22
21
 
22
+ from pydantic import BaseModel
23
+
23
24
  from metadata.data_quality.validations import utils
24
- from metadata.data_quality.validations.runtime_param_setter.param_setter import (
25
- RuntimeParameterSetter,
26
- )
27
25
  from metadata.generated.schema.tests.basic import (
28
26
  TestCaseResult,
29
27
  TestCaseStatus,
30
28
  TestResultValue,
31
29
  )
32
30
  from metadata.generated.schema.tests.testCase import TestCase, TestCaseParameterValue
31
+ from metadata.generated.schema.type.basic import Timestamp
33
32
  from metadata.profiler.processor.runner import QueryRunner
34
33
 
35
34
  if TYPE_CHECKING:
@@ -37,6 +36,7 @@ if TYPE_CHECKING:
37
36
 
38
37
  T = TypeVar("T", bound=Callable)
39
38
  R = TypeVar("R")
39
+ S = TypeVar("S", bound=BaseModel)
40
40
 
41
41
 
42
42
  class BaseTestValidator(ABC):
@@ -45,13 +45,11 @@ class BaseTestValidator(ABC):
45
45
  This can be useful to resolve complex test parameters based on the parameters gibven by the user.
46
46
  """
47
47
 
48
- runtime_parameter_setter: Optional[Type[RuntimeParameterSetter]] = None
49
-
50
48
  def __init__(
51
49
  self,
52
50
  runner: Union[QueryRunner, List["DataFrame"]],
53
51
  test_case: TestCase,
54
- execution_date: Union[datetime, float],
52
+ execution_date: Timestamp,
55
53
  ) -> None:
56
54
  self.runner = runner
57
55
  self.test_case = test_case
@@ -80,7 +78,7 @@ class BaseTestValidator(ABC):
80
78
 
81
79
  def get_test_case_result_object( # pylint: disable=too-many-arguments
82
80
  self,
83
- execution_date: Union[datetime, float],
81
+ execution_date: Timestamp,
84
82
  status: TestCaseStatus,
85
83
  result: str,
86
84
  test_result_value: List[TestResultValue],
@@ -120,10 +118,10 @@ class BaseTestValidator(ABC):
120
118
  failed_rows = (
121
119
  failed_rows if failed_rows is not None else (row_count - passed_rows)
122
120
  )
123
- test_case_result.passedRows = passed_rows
124
- test_case_result.failedRows = failed_rows
125
- test_case_result.passedRowsPercentage = (passed_rows / row_count) * 100
126
- test_case_result.failedRowsPercentage = (failed_rows / row_count) * 100 # type: ignore
121
+ test_case_result.passedRows = int(passed_rows)
122
+ test_case_result.failedRows = int(failed_rows)
123
+ test_case_result.passedRowsPercentage = float(passed_rows / row_count) * 100
124
+ test_case_result.failedRowsPercentage = float(failed_rows / row_count) * 100 # type: ignore
127
125
 
128
126
  return test_case_result
129
127
 
@@ -168,3 +166,10 @@ class BaseTestValidator(ABC):
168
166
  def get_predicted_value(self) -> Optional[str]:
169
167
  """Get predicted value"""
170
168
  return None
169
+
170
+ def get_runtime_parameters(self, setter_class: Type[S]) -> S:
171
+ """Get runtime parameters"""
172
+ for param in self.test_case.parameterValues or []:
173
+ if param.name == setter_class.__name__:
174
+ return setter_class.model_validate_json(param.value)
175
+ raise ValueError(f"Runtime parameter {setter_class.__name__} not found")
@@ -45,6 +45,7 @@ class BaseColumnValuesToBeInSetValidator(BaseTestValidator):
45
45
  Returns:
46
46
  TestCaseResult:
47
47
  """
48
+ matched = False
48
49
  allowed_values = self.get_test_case_param_value(
49
50
  self.test_case.parameterValues, # type: ignore
50
51
  "allowedValues",
@@ -58,11 +59,12 @@ class BaseColumnValuesToBeInSetValidator(BaseTestValidator):
58
59
  try:
59
60
  column: Union[SQALikeColumn, Column] = self._get_column_name()
60
61
  res = self._run_results(Metrics.COUNT_IN_SET, column, values=allowed_values)
62
+ matched = res > 0
61
63
  if match_enum:
62
64
  count = self._run_results(
63
65
  Metrics.ROW_COUNT, column, values=allowed_values
64
66
  )
65
- res = count - res
67
+ matched = count - res == 0
66
68
  except (ValueError, RuntimeError) as exc:
67
69
  msg = f"Error computing {self.test_case.fullyQualifiedName}: {exc}" # type: ignore
68
70
  logger.debug(traceback.format_exc())
@@ -81,7 +83,7 @@ class BaseColumnValuesToBeInSetValidator(BaseTestValidator):
81
83
 
82
84
  return self.get_test_case_result_object(
83
85
  self.execution_date,
84
- self.get_test_case_status(res == 0 if match_enum else res >= 1),
86
+ self.get_test_case_status(matched),
85
87
  f"Found countInSet={res}.",
86
88
  [TestResultValue(name=ALLOWED_VALUE_COUNT, value=str(res))],
87
89
  row_count=row_count,
@@ -40,7 +40,7 @@ class ColumnValueLengthsToBeBetweenValidator(
40
40
  """
41
41
  return self.get_column_name(
42
42
  self.test_case.entityLink.root,
43
- inspect(self.runner.table).c,
43
+ inspect(self.runner.dataset).c,
44
44
  )
45
45
 
46
46
  def _run_results(self, metric: Metrics, column: Column) -> Optional[int]:
@@ -38,7 +38,7 @@ class ColumnValueMaxToBeBetweenValidator(
38
38
  """
39
39
  return self.get_column_name(
40
40
  self.test_case.entityLink.root,
41
- inspect(self.runner.table).c,
41
+ inspect(self.runner.dataset).c,
42
42
  )
43
43
 
44
44
  def _run_results(self, metric: Metrics, column: Column) -> Optional[int]:
@@ -39,7 +39,7 @@ class ColumnValueMeanToBeBetweenValidator(
39
39
  """
40
40
  return self.get_column_name(
41
41
  self.test_case.entityLink.root,
42
- inspect(self.runner.table).c,
42
+ inspect(self.runner.dataset).c,
43
43
  )
44
44
 
45
45
  def _run_results(self, metric: Metrics, column: Column) -> Optional[int]:
@@ -39,7 +39,7 @@ class ColumnValueMedianToBeBetweenValidator(
39
39
  """
40
40
  return self.get_column_name(
41
41
  self.test_case.entityLink.root,
42
- inspect(self.runner.table).c,
42
+ inspect(self.runner.dataset).c,
43
43
  )
44
44
 
45
45
  def _run_results(self, metric: Metrics, column: Column) -> Optional[int]: