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
@@ -10,20 +10,23 @@
10
10
  # limitations under the License.
11
11
 
12
12
  """
13
- Builder defining the structure of builders for validators for Pandas sources
13
+ Define Concat function
14
14
  """
15
+ # Keep SQA docs style defining custom constructs
15
16
 
16
- from typing import TYPE_CHECKING
17
+ from sqlalchemy.ext.compiler import compiles
18
+ from sqlalchemy.sql.functions import FunctionElement
17
19
 
18
- from metadata.data_quality.builders.i_validator_builder import IValidatorBuilder
20
+ from metadata.profiler.metrics.core import CACHE
21
+ from metadata.utils.logger import profiler_logger
19
22
 
20
- if TYPE_CHECKING:
21
- pass
23
+ logger = profiler_logger()
22
24
 
23
25
 
24
- class PandasValidatorBuilder(IValidatorBuilder):
25
- """Builder for Pandas validators"""
26
+ class Substr(FunctionElement):
27
+ inherit_cache = CACHE
26
28
 
27
- def _get_source_type(self) -> str:
28
- """Return the test case"""
29
- return "pandas"
29
+
30
+ @compiles(Substr)
31
+ def _(element, compiler, **kw):
32
+ return f"SUBSTRING({compiler.process(element.clauses, **kw)})"
@@ -53,7 +53,7 @@ class AbstractTableMetricComputer(ABC):
53
53
  self._metrics = metrics
54
54
  self._conn_config = conn_config
55
55
  self._database = self._runner._session.get_bind().url.database
56
- self._table = self._runner.table
56
+ self._table = self._runner.dataset
57
57
  self._entity = entity
58
58
 
59
59
  @property
@@ -91,8 +91,8 @@ class AbstractTableMetricComputer(ABC):
91
91
  table (DeclarativeMeta): _description_
92
92
  """
93
93
  try:
94
- self._schema_name = self.table.__table_args__.get("schema")
95
- self._table_name = self.table.__tablename__
94
+ self._schema_name = self.runner.schema_name
95
+ self._table_name = self.runner.table_name
96
96
  except AttributeError:
97
97
  raise AttributeError(ERROR_MSG)
98
98
 
@@ -119,10 +119,10 @@ class AbstractTableMetricComputer(ABC):
119
119
  Returns:
120
120
  Tuple[str, int]
121
121
  """
122
- col_names = literal(",".join(inspect(self.table).c.keys()), type_=String).label(
123
- COLUMN_NAMES
124
- )
125
- col_count = literal(len(inspect(self.table).c)).label(COLUMN_COUNT)
122
+ col_names = literal(
123
+ ",".join(inspect(self.runner.raw_dataset).c.keys()), type_=String
124
+ ).label(COLUMN_NAMES)
125
+ col_count = literal(len(inspect(self.runner.raw_dataset).c)).label(COLUMN_COUNT)
126
126
  return col_names, col_count
127
127
 
128
128
  def _build_query(
@@ -147,7 +147,8 @@ class BaseTableMetricComputer(AbstractTableMetricComputer):
147
147
  """Base table computer"""
148
148
 
149
149
  def compute(self):
150
- """Default compute behavior for table metrics"""
150
+ """Default compute behavior for table metrics. This method will use the raw table
151
+ to compute metrics and omit any sampling or partitioning logic."""
151
152
  return self.runner.select_first_from_table(
152
153
  *[metric().fn() for metric in self.metrics]
153
154
  )
@@ -412,7 +413,7 @@ class RedshiftTableMetricComputer(BaseTableMetricComputer):
412
413
  )
413
414
  res = self.runner._session.execute(query).first()
414
415
  if not res:
415
- return None
416
+ return super().compute()
416
417
  if res.rowCount is None or (
417
418
  res.rowCount == 0 and self._entity.tableType == TableType.View
418
419
  ):
@@ -53,5 +53,11 @@ def _unique_count_query_mssql(col, session, sample):
53
53
  )
54
54
 
55
55
 
56
+ def _unique_count_query_oracle(col, session, sample):
57
+ count_fn = CountFn(col)
58
+ return _unique_count_query(count_fn, session, sample)
59
+
60
+
56
61
  _unique_count_query_mapper = defaultdict(lambda: _unique_count_query)
57
62
  _unique_count_query_mapper[Dialects.MSSQL] = _unique_count_query_mssql
63
+ _unique_count_query_mapper[Dialects.Oracle] = _unique_count_query_oracle
@@ -14,10 +14,11 @@ Custom types' registry for easy access
14
14
  without having an import mess
15
15
  """
16
16
  import math
17
+ from enum import Enum
17
18
 
18
19
  import sqlalchemy
19
20
  from sqlalchemy import Date, DateTime, Integer, Numeric, Time
20
- from sqlalchemy.sql.sqltypes import Concatenable, Enum
21
+ from sqlalchemy.sql.sqltypes import Concatenable
21
22
 
22
23
  from metadata.generated.schema.entity.data.table import DataType
23
24
  from metadata.ingestion.source import sqa_types
@@ -45,7 +46,7 @@ class CustomTypes(TypeRegistry):
45
46
  UNDETERMINED = UndeterminedType
46
47
 
47
48
 
48
- class Dialects(Enum):
49
+ class PythonDialects(Enum):
49
50
  """
50
51
  Map the service types from DatabaseServiceType
51
52
  to the dialect scheme name used for ingesting
@@ -54,6 +55,8 @@ class Dialects(Enum):
54
55
  Keep this alphabetically ordered
55
56
  """
56
57
 
58
+ # pylint: disable=invalid-name
59
+
57
60
  Athena = "awsathena"
58
61
  AzureSQL = "azuresql"
59
62
  BigQuery = "bigquery"
@@ -83,6 +86,28 @@ class Dialects(Enum):
83
86
  Vertica = "vertica"
84
87
 
85
88
 
89
+ class EnumAdapter(type):
90
+ """A hack to use the Dialects string values can be accesses
91
+ without using the value attribute.
92
+
93
+ Example:
94
+ Dialets.MySQL == "mysql"
95
+
96
+ Instead of:
97
+ Dialects.MySQL.value == "mysql"
98
+
99
+ We use this functionality when registring sqlalchemy custom functions. But we should
100
+ avoid using this pattern as it can be confusing.
101
+ """
102
+
103
+ def __getattr__(cls, item):
104
+ return PythonDialects[item].value
105
+
106
+
107
+ class Dialects(metaclass=EnumAdapter):
108
+ pass
109
+
110
+
86
111
  # Sometimes we want to skip certain types for computing metrics.
87
112
  # If the type is NULL, then we won't run the metric execution
88
113
  # in the profiler.
@@ -45,6 +45,8 @@ class CustomTimestamp(TypeDecorator):
45
45
  import struct # pylint: disable=import-outside-toplevel
46
46
 
47
47
  if dialect.name == "mssql" and isinstance(value, bytes):
48
- bytes_to_int = struct.unpack(">Q", value)[0]
49
- return bytes_to_int
48
+ unpacked_value = struct.unpack("@Q", value)
49
+ if unpacked_value:
50
+ return unpacked_value[0]
51
+ return None
50
52
  return value
@@ -40,7 +40,7 @@ from metadata.generated.schema.tests.customMetric import (
40
40
  CustomMetric as CustomMetricEntity,
41
41
  )
42
42
  from metadata.generated.schema.type.basic import Timestamp
43
- from metadata.profiler.api.models import ProfilerResponse, SampleData, ThreadPoolMetrics
43
+ from metadata.profiler.api.models import ProfilerResponse, ThreadPoolMetrics
44
44
  from metadata.profiler.interface.profiler_interface import ProfilerInterface
45
45
  from metadata.profiler.metrics.core import (
46
46
  ComposedMetric,
@@ -54,9 +54,6 @@ from metadata.profiler.metrics.static.row_count import RowCount
54
54
  from metadata.profiler.orm.functions.table_metric_computer import CREATE_DATETIME
55
55
  from metadata.profiler.orm.registry import NOT_COMPUTE
56
56
  from metadata.profiler.processor.metric_filter import MetricFilter
57
- from metadata.profiler.processor.sample_data_handler import upload_sample_data
58
- from metadata.utils.constants import SAMPLE_DATA_DEFAULT_COUNT
59
- from metadata.utils.execution_time_tracker import calculate_execution_time
60
57
  from metadata.utils.logger import profiler_logger
61
58
 
62
59
  logger = profiler_logger()
@@ -107,7 +104,6 @@ class Profiler(Generic[TMetric]):
107
104
  self.exclude_columns = exclude_columns
108
105
  self._metrics = metrics
109
106
  self._profile_ts = Timestamp(int(datetime.now().timestamp() * 1000))
110
- self.profile_sample_config = self.profiler_interface.profile_sample_config
111
107
 
112
108
  self.metric_filter = MetricFilter(
113
109
  metrics=self.metrics,
@@ -249,11 +245,6 @@ class Profiler(Generic[TMetric]):
249
245
  return column.customMetrics or None
250
246
  return None
251
247
 
252
- @property
253
- def sample(self):
254
- """Return the sample used for the profiler"""
255
- return self.profiler_interface.sample
256
-
257
248
  def validate_composed_metric(self) -> None:
258
249
  """
259
250
  Make sure that all composed metrics have
@@ -273,9 +264,6 @@ class Profiler(Generic[TMetric]):
273
264
 
274
265
  Data should be saved under self.results
275
266
  """
276
-
277
- logger.debug("Running post Profiler...")
278
-
279
267
  current_col_results: Dict[str, Any] = self._column_results.get(col.name)
280
268
  if not current_col_results:
281
269
  logger.debug(
@@ -320,12 +308,15 @@ class Profiler(Generic[TMetric]):
320
308
  col,
321
309
  metric,
322
310
  current_col_results,
323
- table=self.table,
324
311
  )
325
312
 
326
313
  def _prepare_table_metrics(self) -> List:
327
314
  """prepare table metrics"""
328
315
  metrics = []
316
+
317
+ if self.source_config and not self.source_config.computeTableMetrics:
318
+ return metrics
319
+
329
320
  table_metrics = [
330
321
  metric
331
322
  for metric in self.metric_filter.static_metrics
@@ -380,6 +371,9 @@ class Profiler(Generic[TMetric]):
380
371
  def _prepare_column_metrics(self) -> List:
381
372
  """prepare column metrics"""
382
373
  column_metrics_for_thread_pool = []
374
+ if self.source_config and not self.source_config.computeColumnMetrics:
375
+ return column_metrics_for_thread_pool
376
+
383
377
  columns = [
384
378
  column
385
379
  for column in self.columns
@@ -491,16 +485,6 @@ class Profiler(Generic[TMetric]):
491
485
  )
492
486
  self.compute_metrics()
493
487
 
494
- # We need the sample data for Sample Data or PII Sensitive processing.
495
- # We'll nullify the Sample Data after the PII processing so that it's not stored.
496
- if (
497
- self.source_config.generateSampleData
498
- or self.source_config.processPiiSensitive
499
- ):
500
- sample_data = self.generate_sample_data()
501
- else:
502
- sample_data = None
503
-
504
488
  profile = self.get_profile()
505
489
  if self.source_config.computeMetrics:
506
490
  self._check_profile_and_handle(profile)
@@ -508,43 +492,10 @@ class Profiler(Generic[TMetric]):
508
492
  table_profile = ProfilerResponse(
509
493
  table=self.profiler_interface.table_entity,
510
494
  profile=profile,
511
- sample_data=sample_data,
512
495
  )
513
496
 
514
497
  return table_profile
515
498
 
516
- @calculate_execution_time(store=False)
517
- def generate_sample_data(self) -> Optional[SampleData]:
518
- """Fetch and ingest sample data
519
-
520
- Returns:
521
- TableData: sample data
522
- """
523
- try:
524
- logger.debug(
525
- "Fetching sample data for "
526
- f"{self.profiler_interface.table_entity.fullyQualifiedName.root}..." # type: ignore
527
- )
528
- table_data = self.profiler_interface.fetch_sample_data(
529
- self.table, self.columns
530
- )
531
- upload_sample_data(
532
- data=table_data, profiler_interface=self.profiler_interface
533
- )
534
- table_data.rows = table_data.rows[
535
- : min(
536
- SAMPLE_DATA_DEFAULT_COUNT, self.profiler_interface.sample_data_count
537
- )
538
- ]
539
- return SampleData(
540
- data=table_data, store=self.source_config.generateSampleData
541
- )
542
-
543
- except Exception as err:
544
- logger.debug(traceback.format_exc())
545
- logger.warning(f"Error fetching sample data: {err}")
546
- return None
547
-
548
499
  def get_profile(self) -> CreateTableProfileRequest:
549
500
  """
550
501
  After executing the profiler, get all results
@@ -599,13 +550,13 @@ class Profiler(Generic[TMetric]):
599
550
  createDateTime=raw_create_date,
600
551
  sizeInByte=self._table_results.get("sizeInBytes"),
601
552
  profileSample=(
602
- self.profile_sample_config.profile_sample
603
- if self.profile_sample_config
553
+ self.profiler_interface.sampler.sample_config.profile_sample
554
+ if self.profiler_interface.sampler.sample_config
604
555
  else None
605
556
  ),
606
557
  profileSampleType=(
607
- self.profile_sample_config.profile_sample_type
608
- if self.profile_sample_config
558
+ self.profiler_interface.sampler.sample_config.profile_sample_type
559
+ if self.profiler_interface.sampler.sample_config
609
560
  else None
610
561
  ),
611
562
  customMetrics=self._table_results.get("customMetrics"),
@@ -613,7 +564,7 @@ class Profiler(Generic[TMetric]):
613
564
 
614
565
  if self._system_results:
615
566
  system_profile = [
616
- SystemProfile(**system_result)
567
+ SystemProfile.model_validate(system_result)
617
568
  for system_result in self._system_results
618
569
  ]
619
570
  else:
@@ -22,8 +22,6 @@ from metadata.generated.schema.entity.data.table import (
22
22
  PartitionIntervalTypes,
23
23
  PartitionProfilerConfig,
24
24
  )
25
- from metadata.profiler.orm.functions.modulo import ModuloFn
26
- from metadata.profiler.orm.functions.random_num import RandomNumFn
27
25
  from metadata.utils.logger import profiler_logger
28
26
  from metadata.utils.sqa_utils import (
29
27
  build_query_filter,
@@ -80,49 +78,3 @@ def build_partition_predicate(
80
78
  [(Column(partition_field), "ge", date_or_datetime_fn)],
81
79
  False,
82
80
  )
83
-
84
-
85
- # pylint: disable=invalid-name,protected-access
86
- class partition_filter_handler:
87
- """Decorator to handle partioned queries (hence lowercase class name)
88
-
89
- Attributes:
90
- first (bool): whether to return just the first row
91
- sampled (bool): whether data should be sampled
92
- build_sample (bool): whether to build the sample data set
93
- """
94
-
95
- def __init__(
96
- self,
97
- first: bool = True,
98
- sampled: bool = False,
99
- build_sample: bool = False,
100
- ):
101
- self.first = first
102
- self.sampled = sampled
103
- self.build_sample = build_sample
104
-
105
- def __call__(self, func):
106
- def handle_and_execute(_self, *args, **kwargs):
107
- """Handle partitioned queries"""
108
- if _self._partition_details:
109
- partition_filter = build_partition_predicate(
110
- _self._partition_details,
111
- _self.table.__table__.c,
112
- )
113
- if self.build_sample:
114
- return (
115
- _self._base_sample_query(
116
- kwargs.get("column"),
117
- (ModuloFn(RandomNumFn(), 100)).label(RANDOM_LABEL),
118
- )
119
- .filter(partition_filter)
120
- .cte(f"{_self.table.__tablename__}_rnd")
121
- )
122
- query_results = _self._build_query(*args, **kwargs).select_from(
123
- _self._sample if self.sampled else _self.table
124
- )
125
- return query_results.first() if self.first else query_results.all()
126
- return func(_self, *args, **kwargs)
127
-
128
- return handle_and_execute
@@ -30,7 +30,7 @@ from metadata.ingestion.api.steps import Processor
30
30
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
31
31
  from metadata.profiler.api.models import ProfilerProcessorConfig, ProfilerResponse
32
32
  from metadata.profiler.processor.core import Profiler
33
- from metadata.profiler.source.metadata import ProfilerSourceAndEntity
33
+ from metadata.profiler.source.model import ProfilerSourceAndEntity
34
34
 
35
35
 
36
36
  class ProfilerProcessor(Processor):
@@ -18,14 +18,10 @@ and manage behavior such as timeouts.
18
18
  """
19
19
  from typing import Dict, Optional, Union
20
20
 
21
- from sqlalchemy import text
21
+ from sqlalchemy import Table, text
22
22
  from sqlalchemy.orm import DeclarativeMeta, Query, Session
23
23
  from sqlalchemy.orm.util import AliasedClass
24
24
 
25
- from metadata.profiler.processor.handle_partition import (
26
- build_partition_predicate,
27
- partition_filter_handler,
28
- )
29
25
  from metadata.utils.logger import query_runner_logger
30
26
  from metadata.utils.sqa_utils import get_query_filter_for_runner
31
27
 
@@ -47,25 +43,71 @@ class QueryRunner:
47
43
  def __init__(
48
44
  self,
49
45
  session: Session,
50
- table: DeclarativeMeta,
51
- sample: Union[DeclarativeMeta, AliasedClass],
46
+ dataset: Union[DeclarativeMeta, AliasedClass],
47
+ raw_dataset: Table,
52
48
  partition_details: Optional[Dict] = None,
53
49
  profile_sample_query: Optional[str] = None,
54
50
  ):
55
51
  self._session = session
56
- self.table = table
57
- self._sample = sample
58
- self._partition_details = partition_details
59
- self._profile_sample_query = profile_sample_query
52
+ self._dataset = dataset
53
+ self.partition_details = partition_details
54
+ self.profile_sample_query = profile_sample_query
55
+ self.raw_dataset = raw_dataset
56
+
57
+ @property
58
+ def table(self) -> Table:
59
+ """Backward compatibility table attribute access"""
60
+ return self.raw_dataset
61
+
62
+ @property
63
+ def _sample(self):
64
+ """Backward compatibility _sample attribute access"""
65
+ return self._dataset
66
+
67
+ @property
68
+ def dataset(self):
69
+ """Dataset attribute access"""
70
+ return self._dataset
71
+
72
+ @dataset.setter
73
+ def dataset(self, dataset):
74
+ self._dataset = dataset
75
+
76
+ @property
77
+ def table_name(self):
78
+ """Table name attribute access"""
79
+ return self.raw_dataset.__table__.name
80
+
81
+ @property
82
+ def schema_name(self):
83
+ """Table name attribute access"""
84
+ return self.raw_dataset.__table__.schema
85
+
86
+ @property
87
+ def session(self):
88
+ """Table name attribute access"""
89
+ return self._session
60
90
 
61
91
  def _build_query(self, *entities, **kwargs) -> Query:
92
+ """Build query object
93
+
94
+ Args:
95
+ *entities: entities to select
96
+ **kwargs: kwargs to pass to the query
97
+ """
62
98
  return self._session.query(*entities, **kwargs)
63
99
 
64
100
  def _select_from_sample(self, *entities, **kwargs):
65
- """Run select statement against sample data"""
101
+ """This method will use the sample data
102
+ and the partitioning logic if available otherwise it will use the raw table.
103
+
104
+ Args:
105
+ *entities: entities to select
106
+ **kwargs: kwargs to pass to the query
107
+ """
66
108
  filter_ = get_query_filter_for_runner(kwargs)
67
109
 
68
- query = self._build_query(*entities, **kwargs).select_from(self._sample)
110
+ query = self._build_query(*entities, **kwargs).select_from(self._dataset)
69
111
 
70
112
  if filter_ is not None:
71
113
  return query.filter(filter_)
@@ -73,11 +115,16 @@ class QueryRunner:
73
115
  return query
74
116
 
75
117
  def _select_from_user_query(self, *entities, **kwargs):
76
- """Run select statement against user defined query"""
118
+ """Use the user query to select data from the table
119
+
120
+ Args:
121
+ *entities: entities to select
122
+ **kwargs: kwargs to pass to the query
123
+ """
77
124
  filter_ = get_query_filter_for_runner(kwargs)
78
125
 
79
- user_query = self._session.query(self.table).from_statement(
80
- text(f"{self._profile_sample_query}")
126
+ user_query = self._session.query(self._dataset).from_statement(
127
+ text(f"{self.profile_sample_query}")
81
128
  )
82
129
 
83
130
  query = self._build_query(*entities, **kwargs).select_from(user_query)
@@ -87,12 +134,17 @@ class QueryRunner:
87
134
 
88
135
  return query
89
136
 
90
- @partition_filter_handler()
91
137
  def select_first_from_table(self, *entities, **kwargs):
92
- """Select first row from the table"""
138
+ """Select first row from the table. This method will use the raw table and
139
+ omit any sampling or partitioning logic.
140
+
141
+ Args:
142
+ *entities: entities to select
143
+ **kwargs: kwargs to pass to the query
144
+ """
93
145
  filter_ = get_query_filter_for_runner(kwargs)
94
146
 
95
- if self._profile_sample_query:
147
+ if self.profile_sample_query:
96
148
  return self._select_from_user_query(*entities, **kwargs).first()
97
149
  query = self._build_query(*entities, **kwargs).select_from(self.table)
98
150
 
@@ -101,12 +153,17 @@ class QueryRunner:
101
153
 
102
154
  return query.first()
103
155
 
104
- @partition_filter_handler(first=False)
105
156
  def select_all_from_table(self, *entities, **kwargs):
106
- """Select all rows from the table"""
157
+ """Select all rows from the table. This method will use the raw table and
158
+ omit any sampling or partitioning logic.
159
+
160
+ Args:
161
+ *entities: entities to select
162
+ **kwargs: kwargs to pass to the query
163
+ """
107
164
  filter_ = get_query_filter_for_runner(kwargs)
108
165
 
109
- if self._profile_sample_query:
166
+ if self.profile_sample_query:
110
167
  return self._select_from_user_query(*entities, **kwargs).all()
111
168
 
112
169
  query = self._build_query(*entities, **kwargs).select_from(self.table)
@@ -116,23 +173,33 @@ class QueryRunner:
116
173
 
117
174
  return query.all()
118
175
 
119
- @partition_filter_handler(sampled=True)
120
176
  def select_first_from_sample(self, *entities, **kwargs):
177
+ """Select first row from the sample data. This method will use the sample data
178
+ and the partitioning logic if available otherwise it will use the raw table.
179
+
180
+ Args:
181
+ *entities: entities to select
182
+ **kwargs: kwargs to pass to the query
183
+ """
121
184
  return self._select_from_sample(*entities, **kwargs).first()
122
185
 
123
- @partition_filter_handler(first=False, sampled=True)
124
186
  def select_all_from_sample(self, *entities, **kwargs):
187
+ """Select all rows from the sample data. This method will use the sample data
188
+ and the partitioning logic if available otherwise it will use the raw table.
189
+
190
+ Args:
191
+ *entities: entities to select
192
+ **kwargs: kwargs to pass to the query
193
+ """
125
194
  return self._select_from_sample(*entities, **kwargs).all()
126
195
 
127
196
  def yield_from_sample(self, *entities, **kwargs):
128
- query = self._select_from_sample(*entities, **kwargs)
129
- if self._partition_details:
130
- partition_filter = build_partition_predicate(
131
- self._partition_details,
132
- self.table.__table__.c,
133
- )
134
- query.filter(partition_filter)
197
+ """Yield rows from the sample data
135
198
 
199
+ Args:
200
+ *entities: entities to select
201
+ **kwargs: kwargs to pass to the query
202
+ """
136
203
  result = self._session.execute(self._select_from_sample(*entities, **kwargs))
137
204
  while True:
138
205
  rows = result.fetchmany(1000)
@@ -141,15 +208,29 @@ class QueryRunner:
141
208
  yield from rows
142
209
 
143
210
  def dispatch_query_select_first(self, *entities, **kwargs):
144
- """dispatch query to sample or all table"""
145
- if isinstance(self._sample, AliasedClass):
146
- return self.select_first_from_sample(*entities, **kwargs)
147
- return self.select_first_from_table(*entities, **kwargs)
211
+ """Dispatch query to sample or all table.
212
+ Note: Kept for backward compatibility
213
+
214
+ Args:
215
+ *entities: entities to select
216
+ **kwargs: kwargs to pass to the query
217
+ """
218
+ return self.select_first_from_sample(*entities, **kwargs)
148
219
 
149
220
  @staticmethod
150
221
  def select_first_from_query(query: Query):
222
+ """Given a query object, return the first row
223
+
224
+ Args:
225
+ query (Query): query object
226
+ """
151
227
  return query.first()
152
228
 
153
229
  @staticmethod
154
230
  def select_all_from_query(query: Query):
231
+ """Given a query object, return all the rows
232
+
233
+ Args:
234
+ query (Query): query object
235
+ """
155
236
  return query.all()
@@ -16,6 +16,7 @@ import traceback
16
16
  from datetime import datetime
17
17
  from functools import singledispatch
18
18
  from io import BytesIO
19
+ from typing import Optional
19
20
 
20
21
  from metadata.clients.aws_client import AWSClient
21
22
  from metadata.generated.schema.entity.data.table import Table, TableData
@@ -24,7 +25,6 @@ from metadata.generated.schema.entity.services.connections.connectionBasicType i
24
25
  )
25
26
  from metadata.generated.schema.security.credentials.awsCredentials import AWSCredentials
26
27
  from metadata.ingestion.models.custom_pydantic import ignore_type_decoder
27
- from metadata.profiler.interface.profiler_interface import ProfilerInterface
28
28
  from metadata.utils.helpers import clean_uri
29
29
  from metadata.utils.logger import profiler_logger
30
30
 
@@ -72,14 +72,17 @@ def _get_object_key(
72
72
  return file_name
73
73
 
74
74
 
75
- def upload_sample_data(data: TableData, profiler_interface: ProfilerInterface) -> None:
75
+ def upload_sample_data(
76
+ data: TableData,
77
+ entity: Table,
78
+ sample_storage_config: Optional[DataStorageConfig] = None,
79
+ ) -> None:
76
80
  """
77
81
  Upload Sample data to storage config
78
82
  """
79
83
  import pandas as pd # pylint: disable=import-outside-toplevel
80
84
 
81
85
  try:
82
- sample_storage_config: DataStorageConfig = profiler_interface.storage_config
83
86
  if not sample_storage_config:
84
87
  return
85
88
  # Ignore any decoding error for byte data
@@ -92,7 +95,7 @@ def upload_sample_data(data: TableData, profiler_interface: ProfilerInterface) -
92
95
  pq_buffer = BytesIO()
93
96
  df.to_parquet(pq_buffer)
94
97
  object_key = _get_object_key(
95
- table=profiler_interface.table_entity,
98
+ table=entity,
96
99
  prefix=sample_storage_config.prefix,
97
100
  overwrite_data=sample_storage_config.overwriteData,
98
101
  file_path_format=sample_storage_config.filePathPattern,