openmetadata-ingestion 1.1.4.0__py3-none-any.whl → 1.1.6.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 (445) hide show
  1. metadata/data_insight/api/workflow.py +57 -1
  2. metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +1 -1
  3. metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +1 -1
  4. metadata/generated/schema/analytics/__init__.py +1 -1
  5. metadata/generated/schema/analytics/basic.py +1 -1
  6. metadata/generated/schema/analytics/reportData.py +1 -1
  7. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  8. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  9. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  10. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  11. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  12. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  13. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  14. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  15. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  16. metadata/generated/schema/api/__init__.py +1 -1
  17. metadata/generated/schema/api/analytics/__init__.py +1 -1
  18. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  19. metadata/generated/schema/api/automations/__init__.py +1 -1
  20. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  21. metadata/generated/schema/api/classification/__init__.py +1 -1
  22. metadata/generated/schema/api/classification/createClassification.py +1 -1
  23. metadata/generated/schema/api/classification/createTag.py +1 -1
  24. metadata/generated/schema/api/classification/loadTags.py +1 -1
  25. metadata/generated/schema/api/createBot.py +1 -1
  26. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  27. metadata/generated/schema/api/createType.py +1 -1
  28. metadata/generated/schema/api/data/__init__.py +1 -1
  29. metadata/generated/schema/api/data/createChart.py +1 -1
  30. metadata/generated/schema/api/data/createContainer.py +1 -1
  31. metadata/generated/schema/api/data/createDashboard.py +1 -1
  32. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  33. metadata/generated/schema/api/data/createDatabase.py +1 -1
  34. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  35. metadata/generated/schema/api/data/createGlossary.py +1 -1
  36. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  37. metadata/generated/schema/api/data/createMlModel.py +1 -1
  38. metadata/generated/schema/api/data/createPipeline.py +1 -1
  39. metadata/generated/schema/api/data/createQuery.py +6 -1
  40. metadata/generated/schema/api/data/createTable.py +1 -1
  41. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  42. metadata/generated/schema/api/data/createTopic.py +1 -1
  43. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  44. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  45. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  46. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  47. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  48. metadata/generated/schema/api/feed/__init__.py +1 -1
  49. metadata/generated/schema/api/feed/closeTask.py +1 -1
  50. metadata/generated/schema/api/feed/createPost.py +1 -1
  51. metadata/generated/schema/api/feed/createThread.py +1 -1
  52. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  53. metadata/generated/schema/api/feed/threadCount.py +1 -1
  54. metadata/generated/schema/api/lineage/__init__.py +1 -1
  55. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  56. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  57. metadata/generated/schema/api/policies/__init__.py +1 -1
  58. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  59. metadata/generated/schema/api/services/__init__.py +1 -1
  60. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  61. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  62. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  63. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  64. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  65. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  66. metadata/generated/schema/api/services/createStorageService.py +1 -1
  67. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  68. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  69. metadata/generated/schema/api/setOwner.py +1 -1
  70. metadata/generated/schema/api/teams/__init__.py +1 -1
  71. metadata/generated/schema/api/teams/createRole.py +1 -1
  72. metadata/generated/schema/api/teams/createTeam.py +1 -1
  73. metadata/generated/schema/api/teams/createUser.py +1 -1
  74. metadata/generated/schema/api/tests/__init__.py +1 -1
  75. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  76. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  77. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  78. metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
  79. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  80. metadata/generated/schema/api/voteRequest.py +1 -1
  81. metadata/generated/schema/auth/__init__.py +1 -1
  82. metadata/generated/schema/auth/basicAuth.py +1 -1
  83. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  84. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  85. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  86. metadata/generated/schema/auth/emailRequest.py +1 -1
  87. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  88. metadata/generated/schema/auth/generateToken.py +1 -1
  89. metadata/generated/schema/auth/jwtAuth.py +1 -1
  90. metadata/generated/schema/auth/loginRequest.py +1 -1
  91. metadata/generated/schema/auth/logoutRequest.py +1 -1
  92. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  93. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  94. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  95. metadata/generated/schema/auth/refreshToken.py +1 -1
  96. metadata/generated/schema/auth/registrationRequest.py +1 -1
  97. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  98. metadata/generated/schema/auth/revokeToken.py +1 -1
  99. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  100. metadata/generated/schema/auth/ssoAuth.py +1 -1
  101. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  102. metadata/generated/schema/configuration/__init__.py +1 -1
  103. metadata/generated/schema/configuration/applicationConfiguration.py +1 -1
  104. metadata/generated/schema/configuration/authConfig.py +1 -1
  105. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  106. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  107. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  108. metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
  109. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  110. metadata/generated/schema/configuration/extensionConfiguration.py +1 -1
  111. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  112. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  113. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  114. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  115. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  116. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  117. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  118. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  119. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  120. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  121. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  122. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  123. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  124. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  125. metadata/generated/schema/dataInsight/__init__.py +1 -1
  126. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  127. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  128. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  129. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  130. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  131. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  132. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  133. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  134. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  135. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  136. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  137. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  138. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  139. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  140. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  141. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  142. metadata/generated/schema/email/__init__.py +1 -1
  143. metadata/generated/schema/email/emailRequest.py +1 -1
  144. metadata/generated/schema/email/smtpSettings.py +1 -1
  145. metadata/generated/schema/entity/__init__.py +1 -1
  146. metadata/generated/schema/entity/automations/__init__.py +1 -1
  147. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  148. metadata/generated/schema/entity/automations/workflow.py +1 -1
  149. metadata/generated/schema/entity/bot.py +1 -1
  150. metadata/generated/schema/entity/classification/__init__.py +1 -1
  151. metadata/generated/schema/entity/classification/classification.py +1 -1
  152. metadata/generated/schema/entity/classification/tag.py +1 -1
  153. metadata/generated/schema/entity/data/__init__.py +1 -1
  154. metadata/generated/schema/entity/data/chart.py +1 -1
  155. metadata/generated/schema/entity/data/container.py +1 -1
  156. metadata/generated/schema/entity/data/dashboard.py +1 -1
  157. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  158. metadata/generated/schema/entity/data/database.py +1 -1
  159. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  160. metadata/generated/schema/entity/data/glossary.py +1 -1
  161. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  162. metadata/generated/schema/entity/data/metrics.py +1 -1
  163. metadata/generated/schema/entity/data/mlmodel.py +1 -1
  164. metadata/generated/schema/entity/data/pipeline.py +1 -1
  165. metadata/generated/schema/entity/data/query.py +6 -1
  166. metadata/generated/schema/entity/data/report.py +1 -1
  167. metadata/generated/schema/entity/data/table.py +1 -1
  168. metadata/generated/schema/entity/data/topic.py +1 -1
  169. metadata/generated/schema/entity/events/__init__.py +1 -1
  170. metadata/generated/schema/entity/events/webhook.py +1 -1
  171. metadata/generated/schema/entity/feed/__init__.py +1 -1
  172. metadata/generated/schema/entity/feed/thread.py +1 -1
  173. metadata/generated/schema/entity/policies/__init__.py +1 -1
  174. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  175. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  176. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  177. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  178. metadata/generated/schema/entity/policies/filters.py +1 -1
  179. metadata/generated/schema/entity/policies/policy.py +1 -1
  180. metadata/generated/schema/entity/services/__init__.py +1 -1
  181. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  182. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  183. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  184. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  185. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  186. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  187. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  188. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  189. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  190. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  191. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  192. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  193. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  194. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  195. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  196. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  197. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  198. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  199. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  200. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  201. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  202. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  203. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  204. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  205. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  206. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  207. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  208. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  209. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  210. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  211. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  212. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  213. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  214. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  215. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  216. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  217. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
  218. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  219. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  220. metadata/generated/schema/entity/services/connections/database/mongoDB/__init__.py +1 -1
  221. metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +1 -1
  222. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  223. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  224. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  225. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  226. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  227. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  228. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  229. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  230. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  231. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  232. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  233. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  234. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  235. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  236. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  237. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  238. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  239. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  240. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  241. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  242. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  243. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  244. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  245. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  246. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  247. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  248. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  249. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  250. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  251. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  252. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  253. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  254. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  255. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  265. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  267. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  268. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  269. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  270. metadata/generated/schema/entity/services/connections/storage/adlsConection.py +1 -1
  271. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  272. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  273. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  274. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  275. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  276. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  277. metadata/generated/schema/entity/services/databaseService.py +1 -1
  278. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  279. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  280. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  281. metadata/generated/schema/entity/services/messagingService.py +1 -1
  282. metadata/generated/schema/entity/services/metadataService.py +1 -1
  283. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  284. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  285. metadata/generated/schema/entity/services/serviceType.py +1 -1
  286. metadata/generated/schema/entity/services/storageService.py +1 -1
  287. metadata/generated/schema/entity/teams/__init__.py +1 -1
  288. metadata/generated/schema/entity/teams/role.py +1 -1
  289. metadata/generated/schema/entity/teams/team.py +1 -1
  290. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  291. metadata/generated/schema/entity/teams/user.py +1 -1
  292. metadata/generated/schema/entity/type.py +1 -1
  293. metadata/generated/schema/entity/utils/__init__.py +1 -1
  294. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  295. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  296. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  297. metadata/generated/schema/events/__init__.py +1 -1
  298. metadata/generated/schema/events/api/__init__.py +1 -1
  299. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  300. metadata/generated/schema/events/dataInsightAlertConfig.py +1 -1
  301. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  302. metadata/generated/schema/events/entitySpelFilters.py +1 -1
  303. metadata/generated/schema/events/eventFilterRule.py +1 -1
  304. metadata/generated/schema/events/eventSubscription.py +29 -29
  305. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  306. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  307. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  308. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  309. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  310. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  311. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  312. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  313. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  314. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  315. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  316. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  317. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  318. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  319. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  320. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  321. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  322. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  323. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  324. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  325. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  326. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  327. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  328. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  329. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  330. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  331. metadata/generated/schema/monitoring/__init__.py +1 -1
  332. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  333. metadata/generated/schema/security/__init__.py +1 -1
  334. metadata/generated/schema/security/client/__init__.py +1 -1
  335. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  336. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  337. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  338. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  339. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  340. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  341. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  342. metadata/generated/schema/security/credentials/__init__.py +1 -1
  343. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  344. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  345. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  346. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  347. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  348. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  349. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  350. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  351. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  352. metadata/generated/schema/security/secrets/__init__.py +1 -1
  353. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  354. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  355. metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
  356. metadata/generated/schema/security/securityConfiguration.py +1 -1
  357. metadata/generated/schema/security/ssl/__init__.py +1 -1
  358. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  359. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  360. metadata/generated/schema/settings/__init__.py +1 -1
  361. metadata/generated/schema/settings/settings.py +1 -1
  362. metadata/generated/schema/system/__init__.py +1 -1
  363. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  364. metadata/generated/schema/system/sqlMigrationScript.py +1 -1
  365. metadata/generated/schema/tests/__init__.py +1 -1
  366. metadata/generated/schema/tests/basic.py +7 -7
  367. metadata/generated/schema/tests/customMetric.py +1 -1
  368. metadata/generated/schema/tests/testCase.py +1 -1
  369. metadata/generated/schema/tests/testDefinition.py +1 -1
  370. metadata/generated/schema/tests/testSuite.py +1 -1
  371. metadata/generated/schema/type/__init__.py +1 -1
  372. metadata/generated/schema/type/auditLog.py +1 -1
  373. metadata/generated/schema/type/basic.py +1 -1
  374. metadata/generated/schema/type/changeEvent.py +1 -1
  375. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  376. metadata/generated/schema/type/csvDocumentation.py +1 -1
  377. metadata/generated/schema/type/csvErrorType.py +1 -1
  378. metadata/generated/schema/type/csvFile.py +1 -1
  379. metadata/generated/schema/type/csvImportResult.py +1 -1
  380. metadata/generated/schema/type/dailyCount.py +1 -1
  381. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  382. metadata/generated/schema/type/entityHistory.py +1 -1
  383. metadata/generated/schema/type/entityLineage.py +1 -1
  384. metadata/generated/schema/type/entityReference.py +1 -1
  385. metadata/generated/schema/type/entityReferenceList.py +1 -1
  386. metadata/generated/schema/type/entityRelationship.py +1 -1
  387. metadata/generated/schema/type/entityUsage.py +1 -1
  388. metadata/generated/schema/type/filterPattern.py +1 -1
  389. metadata/generated/schema/type/function.py +1 -1
  390. metadata/generated/schema/type/include.py +1 -1
  391. metadata/generated/schema/type/jdbcConnection.py +1 -1
  392. metadata/generated/schema/type/paging.py +1 -1
  393. metadata/generated/schema/type/profile.py +1 -1
  394. metadata/generated/schema/type/queryParserData.py +1 -1
  395. metadata/generated/schema/type/reaction.py +1 -1
  396. metadata/generated/schema/type/schedule.py +1 -1
  397. metadata/generated/schema/type/schema.py +1 -1
  398. metadata/generated/schema/type/tableQuery.py +1 -1
  399. metadata/generated/schema/type/tableUsageCount.py +1 -1
  400. metadata/generated/schema/type/tagLabel.py +1 -1
  401. metadata/generated/schema/type/usageDetails.py +1 -1
  402. metadata/generated/schema/type/usageRequest.py +1 -1
  403. metadata/generated/schema/type/votes.py +1 -1
  404. metadata/ingestion/lineage/sql_lineage.py +30 -7
  405. metadata/ingestion/ometa/mixins/data_insight_mixin.py +12 -1
  406. metadata/ingestion/ometa/mixins/query_mixin.py +40 -4
  407. metadata/ingestion/ometa/mixins/table_mixin.py +0 -5
  408. metadata/ingestion/processor/query_parser.py +6 -6
  409. metadata/ingestion/source/dashboard/tableau/models.py +0 -1
  410. metadata/ingestion/source/dashboard/tableau/queries.py +0 -1
  411. metadata/ingestion/source/database/bigquery/connection.py +27 -38
  412. metadata/ingestion/source/database/bigquery/helper.py +66 -0
  413. metadata/ingestion/source/database/bigquery/metadata.py +69 -64
  414. metadata/ingestion/source/database/bigquery/queries.py +2 -2
  415. metadata/ingestion/source/database/bigquery/query_parser.py +19 -1
  416. metadata/ingestion/source/database/common_db_source.py +0 -3
  417. metadata/ingestion/source/database/database_service.py +27 -3
  418. metadata/ingestion/source/database/lineage_source.py +21 -18
  419. metadata/ingestion/source/database/query_parser_source.py +3 -0
  420. metadata/ingestion/source/database/sample_data.py +17 -9
  421. metadata/ingestion/source/database/usage_source.py +30 -29
  422. metadata/ingestion/stage/table_usage.py +42 -34
  423. metadata/profiler/interface/pandas/profiler_interface.py +24 -41
  424. metadata/profiler/interface/profiler_interface.py +62 -2
  425. metadata/profiler/interface/profiler_interface_factory.py +9 -0
  426. metadata/profiler/interface/sqlalchemy/profiler_interface.py +19 -36
  427. metadata/profiler/interface/sqlalchemy/single_store/__init__.py +0 -0
  428. metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +86 -0
  429. metadata/profiler/metrics/system/queries/redshift.py +3 -5
  430. metadata/profiler/metrics/system/system.py +0 -4
  431. metadata/profiler/metrics/window/first_quartile.py +4 -4
  432. metadata/profiler/metrics/window/median.py +4 -4
  433. metadata/profiler/metrics/window/percentille_mixin.py +9 -0
  434. metadata/profiler/metrics/window/third_quartile.py +4 -4
  435. metadata/profiler/processor/core.py +1 -1
  436. metadata/profiler/source/single_store/functions/median.py +17 -0
  437. metadata/profiler/source/single_store/metrics/window/first_quartile.py +10 -0
  438. metadata/profiler/source/single_store/metrics/window/median.py +10 -0
  439. metadata/profiler/source/single_store/metrics/window/third_quartile.py +10 -0
  440. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/METADATA +176 -176
  441. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/RECORD +445 -437
  442. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/LICENSE +0 -0
  443. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/WHEEL +0 -0
  444. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/entry_points.txt +0 -0
  445. {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/top_level.txt +0 -0
@@ -112,7 +112,7 @@ class DatabaseServiceTopology(ServiceTopology):
112
112
  NodeStage(
113
113
  type_=OMetaTagAndClassification,
114
114
  context="tags",
115
- processor="yield_tag_details",
115
+ processor="yield_database_schema_tag_details",
116
116
  ack_sink=False,
117
117
  nullable=True,
118
118
  cache_all=True,
@@ -130,6 +130,14 @@ class DatabaseServiceTopology(ServiceTopology):
130
130
  table = TopologyNode(
131
131
  producer="get_tables_name_and_type",
132
132
  stages=[
133
+ NodeStage(
134
+ type_=OMetaTagAndClassification,
135
+ context="tags",
136
+ processor="yield_table_tag_details",
137
+ ack_sink=False,
138
+ nullable=True,
139
+ cache_all=True,
140
+ ),
133
141
  NodeStage(
134
142
  type_=Table,
135
143
  context="table",
@@ -218,7 +226,23 @@ class DatabaseServiceSource(
218
226
  From topology. To be run for each schema
219
227
  """
220
228
 
221
- def yield_tag_details(
229
+ def yield_table_tags(
230
+ self, table_name_and_type: Tuple[str, TableType]
231
+ ) -> Iterable[CreateTableRequest]:
232
+ """
233
+ From topology. To be run for each table
234
+ """
235
+
236
+ def yield_table_tag_details(
237
+ self, table_name_and_type: str
238
+ ) -> Iterable[OMetaTagAndClassification]:
239
+ """
240
+ From topology. To be run for each table
241
+ """
242
+ if self.source_config.includeTags:
243
+ yield from self.yield_table_tags(table_name_and_type) or []
244
+
245
+ def yield_database_schema_tag_details(
222
246
  self, schema_name: str
223
247
  ) -> Iterable[OMetaTagAndClassification]:
224
248
  """
@@ -267,7 +291,7 @@ class DatabaseServiceSource(
267
291
 
268
292
  tag_labels = []
269
293
  for tag_and_category in self.context.tags or []:
270
- if tag_and_category.fqn.__root__ == entity_fqn:
294
+ if tag_and_category.fqn and tag_and_category.fqn.__root__ == entity_fqn:
271
295
  tag_label = get_tag_label(
272
296
  metadata=self.metadata,
273
297
  tag_name=tag_and_category.tag_request.name.__root__,
@@ -78,25 +78,28 @@ class LineageSource(QueryParserSource, ABC):
78
78
  Given an engine, iterate over the query results to
79
79
  yield a TableQuery with query parsing info
80
80
  """
81
- with self.engine.connect() as conn:
82
- rows = conn.execute(
83
- self.get_sql_statement(
84
- start_time=self.start,
85
- end_time=self.end,
86
- )
87
- )
88
- for row in rows:
89
- query_dict = dict(row)
90
- try:
91
- yield TableQuery(
92
- query=query_dict["query_text"],
93
- databaseName=self.get_database_name(query_dict),
94
- serviceName=self.config.serviceName,
95
- databaseSchema=self.get_schema_name(query_dict),
81
+ for engine in self.get_engine():
82
+ with engine.connect() as conn:
83
+ rows = conn.execute(
84
+ self.get_sql_statement(
85
+ start_time=self.start,
86
+ end_time=self.end,
96
87
  )
97
- except Exception as exc:
98
- logger.debug(traceback.format_exc())
99
- logger.warning(f"Error processing query_dict {query_dict}: {exc}")
88
+ )
89
+ for row in rows:
90
+ query_dict = dict(row)
91
+ try:
92
+ yield TableQuery(
93
+ query=query_dict["query_text"],
94
+ databaseName=self.get_database_name(query_dict),
95
+ serviceName=self.config.serviceName,
96
+ databaseSchema=self.get_schema_name(query_dict),
97
+ )
98
+ except Exception as exc:
99
+ logger.debug(traceback.format_exc())
100
+ logger.warning(
101
+ f"Error processing query_dict {query_dict}: {exc}"
102
+ )
100
103
 
101
104
  def next_record(self) -> Iterable[AddLineageRequest]:
102
105
  """
@@ -112,6 +112,9 @@ class QueryParserSource(Source[Union[TableQuery, AddLineageRequest]], ABC):
112
112
  return f"{self.filters} AND {self.source_config.filterCondition}"
113
113
  return self.filters
114
114
 
115
+ def get_engine(self):
116
+ yield self.engine
117
+
115
118
  def close(self):
116
119
  """
117
120
  By default, there is nothing to close
@@ -1121,15 +1121,22 @@ class SampleDataSource(
1121
1121
  rowCount=profile["rowCount"],
1122
1122
  createDateTime=profile.get("createDateTime"),
1123
1123
  sizeInByte=profile.get("sizeInByte"),
1124
- timestamp=(
1125
- datetime.now(tz=timezone.utc) - timedelta(days=days)
1126
- ).timestamp(),
1124
+ timestamp=int(
1125
+ (
1126
+ datetime.now(tz=timezone.utc) - timedelta(days=days)
1127
+ ).timestamp()
1128
+ * 1000
1129
+ ),
1127
1130
  ),
1128
1131
  columnProfile=[
1129
1132
  ColumnProfile(
1130
- timestamp=(
1131
- datetime.now(tz=timezone.utc) - timedelta(days=days)
1132
- ).timestamp(),
1133
+ timestamp=int(
1134
+ (
1135
+ datetime.now(tz=timezone.utc)
1136
+ - timedelta(days=days)
1137
+ ).timestamp()
1138
+ * 1000
1139
+ ),
1133
1140
  **col_profile,
1134
1141
  )
1135
1142
  for col_profile in profile["columnProfile"]
@@ -1216,9 +1223,10 @@ class SampleDataSource(
1216
1223
  for days, result in enumerate(test_case_results["results"]):
1217
1224
  yield OMetaTestCaseResultsSample(
1218
1225
  test_case_results=TestCaseResult(
1219
- timestamp=(
1220
- datetime.now() - timedelta(days=days)
1221
- ).timestamp(),
1226
+ timestamp=int(
1227
+ (datetime.now() - timedelta(days=days)).timestamp()
1228
+ * 1000
1229
+ ),
1222
1230
  testCaseStatus=result["testCaseStatus"],
1223
1231
  result=result["result"],
1224
1232
  testResultValue=[
@@ -93,37 +93,38 @@ class UsageSource(QueryParserSource, ABC):
93
93
  f"{(self.start + timedelta(days=days + 1)).date()}"
94
94
  )
95
95
  try:
96
- with self.engine.connect() as conn:
97
- rows = conn.execute(
98
- self.get_sql_statement(
99
- start_time=self.start + timedelta(days=days),
100
- end_time=self.start + timedelta(days=days + 1),
96
+ for engine in self.get_engine():
97
+ with engine.connect() as conn:
98
+ rows = conn.execute(
99
+ self.get_sql_statement(
100
+ start_time=self.start + timedelta(days=days),
101
+ end_time=self.start + timedelta(days=days + 1),
102
+ )
101
103
  )
102
- )
103
- queries = []
104
- for row in rows:
105
- row = dict(row)
106
- try:
107
- queries.append(
108
- TableQuery(
109
- query=self.format_query(row["query_text"]),
110
- userName=row["user_name"],
111
- startTime=str(row["start_time"]),
112
- endTime=str(row["end_time"]),
113
- analysisDate=row["start_time"],
114
- aborted=self.get_aborted_status(row),
115
- databaseName=self.get_database_name(row),
116
- duration=row.get("duration"),
117
- serviceName=self.config.serviceName,
118
- databaseSchema=self.get_schema_name(row),
104
+ queries = []
105
+ for row in rows:
106
+ row = dict(row)
107
+ try:
108
+ queries.append(
109
+ TableQuery(
110
+ query=self.format_query(row["query_text"]),
111
+ userName=row["user_name"],
112
+ startTime=str(row["start_time"]),
113
+ endTime=str(row["end_time"]),
114
+ analysisDate=row["start_time"],
115
+ aborted=self.get_aborted_status(row),
116
+ databaseName=self.get_database_name(row),
117
+ duration=row.get("duration"),
118
+ serviceName=self.config.serviceName,
119
+ databaseSchema=self.get_schema_name(row),
120
+ )
119
121
  )
120
- )
121
- except Exception as exc:
122
- logger.debug(traceback.format_exc())
123
- logger.warning(
124
- f"Unexpected exception processing row [{row}]: {exc}"
125
- )
126
- yield TableQueries(queries=queries)
122
+ except Exception as exc:
123
+ logger.debug(traceback.format_exc())
124
+ logger.warning(
125
+ f"Unexpected exception processing row [{row}]: {exc}"
126
+ )
127
+ yield TableQueries(queries=queries)
127
128
  except Exception as exc:
128
129
  logger.debug(traceback.format_exc())
129
130
  logger.error(f"Source usage processing error: {exc}")
@@ -18,6 +18,7 @@ import os
18
18
  import shutil
19
19
  import traceback
20
20
  from pathlib import Path
21
+ from typing import List, Tuple
21
22
 
22
23
  from metadata.config.common import ConfigModel
23
24
  from metadata.generated.schema.api.data.createQuery import CreateQueryRequest
@@ -25,7 +26,7 @@ from metadata.generated.schema.entity.services.connections.metadata.openMetadata
25
26
  OpenMetadataConnection,
26
27
  )
27
28
  from metadata.generated.schema.entity.teams.user import User
28
- from metadata.generated.schema.type.queryParserData import QueryParserData
29
+ from metadata.generated.schema.type.queryParserData import ParsedData, QueryParserData
29
30
  from metadata.generated.schema.type.tableUsageCount import TableUsageCount
30
31
  from metadata.ingestion.api.stage import Stage
31
32
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
@@ -80,20 +81,22 @@ class TableUsageStage(Stage[QueryParserData]):
80
81
  logger.info(f"Creating the directory to store staging data in {location}")
81
82
  location.mkdir(parents=True, exist_ok=True)
82
83
 
83
- def _get_user_entity(self, username: str):
84
+ def _get_user_entity(self, username: str) -> Tuple[List[str], List[str]]:
84
85
  if username:
85
86
  user = self.metadata.get_by_name(entity=User, fqn=username)
86
87
  if user:
87
- return [user.fullyQualifiedName.__root__]
88
- return []
88
+ return [user.fullyQualifiedName.__root__], []
89
+ return [], [username]
89
90
 
90
91
  def _add_sql_query(self, record, table):
92
+ users, used_by = self._get_user_entity(record.userName)
91
93
  if self.table_queries.get((table, record.date)):
92
94
  self.table_queries[(table, record.date)].append(
93
95
  CreateQueryRequest(
94
96
  query=record.sql,
95
- users=self._get_user_entity(record.userName),
97
+ users=users,
96
98
  queryDate=record.date,
99
+ usedBy=used_by,
97
100
  duration=record.duration,
98
101
  )
99
102
  )
@@ -101,13 +104,45 @@ class TableUsageStage(Stage[QueryParserData]):
101
104
  self.table_queries[(table, record.date)] = [
102
105
  CreateQueryRequest(
103
106
  query=record.sql,
104
- users=self._get_user_entity(record.userName),
107
+ users=users,
105
108
  queryDate=record.date,
109
+ usedBy=used_by,
106
110
  duration=record.duration,
107
111
  )
108
112
  ]
109
113
 
114
+ def _handle_table_usage(self, parsed_data: ParsedData, table: str) -> None:
115
+ table_joins = parsed_data.joins.get(table)
116
+ try:
117
+ self._add_sql_query(record=parsed_data, table=table)
118
+ table_usage_count = self.table_usage.get((table, parsed_data.date))
119
+ if table_usage_count is not None:
120
+ table_usage_count.count = table_usage_count.count + 1
121
+ if table_joins:
122
+ table_usage_count.joins.extend(table_joins)
123
+ else:
124
+ joins = []
125
+ if table_joins:
126
+ joins.extend(table_joins)
127
+
128
+ table_usage_count = TableUsageCount(
129
+ table=table,
130
+ databaseName=parsed_data.databaseName,
131
+ date=parsed_data.date,
132
+ joins=joins,
133
+ serviceName=parsed_data.serviceName,
134
+ sqlQueries=[],
135
+ databaseSchema=parsed_data.databaseSchema,
136
+ )
137
+
138
+ except Exception as exc:
139
+ logger.debug(traceback.format_exc())
140
+ logger.warning(f"Error in staging record: {exc}")
141
+ self.table_usage[(table, parsed_data.date)] = table_usage_count
142
+ logger.info(f"Successfully record staged for {table}")
143
+
110
144
  def stage_record(self, record: QueryParserData) -> None:
145
+
111
146
  """
112
147
  Process the parsed data and store it in a file
113
148
  """
@@ -119,34 +154,7 @@ class TableUsageStage(Stage[QueryParserData]):
119
154
  if parsed_data is None:
120
155
  continue
121
156
  for table in parsed_data.tables:
122
- table_joins = parsed_data.joins.get(table)
123
- try:
124
- self._add_sql_query(record=parsed_data, table=table)
125
- table_usage_count = self.table_usage.get((table, parsed_data.date))
126
- if table_usage_count is not None:
127
- table_usage_count.count = table_usage_count.count + 1
128
- if table_joins:
129
- table_usage_count.joins.extend(table_joins)
130
- else:
131
- joins = []
132
- if table_joins:
133
- joins.extend(table_joins)
134
-
135
- table_usage_count = TableUsageCount(
136
- table=table,
137
- databaseName=parsed_data.databaseName,
138
- date=parsed_data.date,
139
- joins=joins,
140
- serviceName=parsed_data.serviceName,
141
- sqlQueries=[],
142
- databaseSchema=parsed_data.databaseSchema,
143
- )
144
-
145
- except Exception as exc:
146
- logger.debug(traceback.format_exc())
147
- logger.warning(f"Error in staging record: {exc}")
148
- self.table_usage[(table, parsed_data.date)] = table_usage_count
149
- logger.info(f"Successfully record staged for {table}")
157
+ self._handle_table_usage(parsed_data=parsed_data, table=table)
150
158
  self.dump_data_to_file()
151
159
 
152
160
  def dump_data_to_file(self):
@@ -8,6 +8,7 @@
8
8
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
9
  # See the License for the specific language governing permissions and
10
10
  # limitations under the License.
11
+ # pylint: disable=arguments-differ
11
12
 
12
13
  """
13
14
  Interfaces with database for all database engine
@@ -32,7 +33,6 @@ from metadata.profiler.metrics.registry import Metrics
32
33
  from metadata.profiler.processor.sampler.sampler_factory import sampler_factory_
33
34
  from metadata.readers.dataframe.models import DatalakeTableSchemaWrapper
34
35
  from metadata.utils.datalake.datalake_utils import fetch_dataframe
35
- from metadata.utils.dispatch import valuedispatch
36
36
  from metadata.utils.logger import profiler_interface_registry_logger
37
37
  from metadata.utils.sqa_like_column import SQALikeColumn, Type
38
38
 
@@ -109,20 +109,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
109
109
  profile_sample_query=self.profile_query,
110
110
  )
111
111
 
112
- @valuedispatch
113
- def _get_metrics(self, *args, **kwargs):
114
- """Generic getter method for metrics. To be used with
115
- specific dispatch methods
116
- """
117
- logger.warning("Could not get metric. No function registered.")
118
-
119
- # pylint: disable=unused-argument
120
- @_get_metrics.register(MetricTypes.Table.value)
121
- def _(
112
+ def _compute_table_metrics(
122
113
  self,
123
- metric_type: str,
124
114
  metrics: List[Metrics],
125
- dfs,
115
+ runner: List,
126
116
  *args,
127
117
  **kwargs,
128
118
  ):
@@ -138,7 +128,7 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
138
128
 
139
129
  try:
140
130
  row_dict = {}
141
- df_list = [df.where(pd.notnull(df), None) for df in dfs]
131
+ df_list = [df.where(pd.notnull(df), None) for df in runner]
142
132
  for metric in metrics:
143
133
  row_dict[metric.name()] = metric().df_fn(df_list)
144
134
  return row_dict
@@ -147,13 +137,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
147
137
  logger.warning(f"Error trying to compute profile for {exc}")
148
138
  raise RuntimeError(exc)
149
139
 
150
- # pylint: disable=unused-argument
151
- @_get_metrics.register(MetricTypes.Static.value)
152
- def _(
140
+ def _compute_static_metrics(
153
141
  self,
154
- metric_type: str,
155
142
  metrics: List[Metrics],
156
- dfs,
143
+ runner: List,
157
144
  column,
158
145
  *args,
159
146
  **kwargs,
@@ -172,7 +159,7 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
172
159
  try:
173
160
  row_dict = {}
174
161
  for metric in metrics:
175
- metric_resp = metric(column).df_fn(dfs)
162
+ metric_resp = metric(column).df_fn(runner)
176
163
  row_dict[metric.name()] = (
177
164
  None if pd.isnull(metric_resp) else metric_resp
178
165
  )
@@ -183,13 +170,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
183
170
  )
184
171
  raise RuntimeError(exc)
185
172
 
186
- # pylint: disable=unused-argument
187
- @_get_metrics.register(MetricTypes.Query.value)
188
- def _(
173
+ def _compute_query_metrics(
189
174
  self,
190
- metric_type: str,
191
- metrics: Metrics,
192
- dfs,
175
+ metric: Metrics,
176
+ runner: List,
193
177
  column,
194
178
  *args,
195
179
  **kwargs,
@@ -204,18 +188,15 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
204
188
  dictionnary of results
205
189
  """
206
190
  col_metric = None
207
- col_metric = metrics(column).df_fn(dfs)
191
+ col_metric = metric(column).df_fn(runner)
208
192
  if not col_metric:
209
193
  return None
210
- return {metrics.name(): col_metric}
194
+ return {metric.name(): col_metric}
211
195
 
212
- # pylint: disable=unused-argument
213
- @_get_metrics.register(MetricTypes.Window.value)
214
- def _(
196
+ def _compute_window_metrics(
215
197
  self,
216
- metric_type: str,
217
- metrics: Metrics,
218
- dfs,
198
+ metrics: List[Metrics],
199
+ runner: List,
219
200
  column,
220
201
  *args,
221
202
  **kwargs,
@@ -224,19 +205,21 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
224
205
  Given a list of metrics, compute the given results
225
206
  and returns the values
226
207
  """
208
+
227
209
  try:
228
210
  metric_values = {}
229
211
  for metric in metrics:
230
- metric_values[metric.name()] = metric(column).df_fn(dfs)
212
+ metric_values[metric.name()] = metric(column).df_fn(runner)
231
213
  return metric_values if metric_values else None
232
214
  except Exception as exc:
233
215
  logger.debug(traceback.format_exc())
234
216
  logger.warning(f"Unexpected exception computing metrics: {exc}")
235
217
  return None
236
218
 
237
- @_get_metrics.register(MetricTypes.System.value)
238
- def _(
219
+ def _compute_system_metrics(
239
220
  self,
221
+ metrics: Metrics,
222
+ runner: List,
240
223
  *args,
241
224
  **kwargs,
242
225
  ):
@@ -260,11 +243,9 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
260
243
  try:
261
244
  row = None
262
245
  if self.dfs:
263
- row = self._get_metrics(
264
- metric_type.value,
246
+ row = self._get_metric_fn[metric_type.value](
265
247
  metrics,
266
248
  dfs,
267
- session=self.client,
268
249
  column=column,
269
250
  )
270
251
  except Exception as exc:
@@ -354,7 +335,9 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
354
335
  profile_results["columns"][column].update(
355
336
  {
356
337
  "name": column,
357
- "timestamp": datetime.now(tz=timezone.utc).timestamp(),
338
+ "timestamp": int(
339
+ datetime.now(tz=timezone.utc).timestamp() * 1000
340
+ ),
358
341
  **profile,
359
342
  }
360
343
  )
@@ -15,7 +15,7 @@ supporting sqlalchemy abstraction layer
15
15
  """
16
16
 
17
17
  from abc import ABC, abstractmethod
18
- from typing import Dict, Optional, Union
18
+ from typing import Dict, List, Optional, Union
19
19
 
20
20
  from sqlalchemy import Column
21
21
  from typing_extensions import Self
@@ -36,7 +36,9 @@ from metadata.ingestion.api.processor import ProfilerProcessorStatus
36
36
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
37
37
  from metadata.ingestion.source.connections import get_connection
38
38
  from metadata.profiler.api.models import ProfileSampleConfig, TableConfig
39
+ from metadata.profiler.metrics.core import MetricTypes
39
40
  from metadata.profiler.metrics.registry import Metrics
41
+ from metadata.profiler.processor.runner import QueryRunner
40
42
  from metadata.utils.partition import get_partition_details
41
43
 
42
44
 
@@ -78,6 +80,14 @@ class ProfilerInterface(ABC):
78
80
  )
79
81
  self.timeout_seconds = timeout_seconds
80
82
 
83
+ self._get_metric_fn = {
84
+ MetricTypes.Table.value: self._compute_table_metrics,
85
+ MetricTypes.Static.value: self._compute_static_metrics,
86
+ MetricTypes.Query.value: self._compute_query_metrics,
87
+ MetricTypes.Window.value: self._compute_window_metrics,
88
+ MetricTypes.System.value: self._compute_system_metrics,
89
+ }
90
+
81
91
  @abstractmethod
82
92
  def _get_sampler(self):
83
93
  """Get the sampler"""
@@ -222,7 +232,57 @@ class ProfilerInterface(ABC):
222
232
  raise NotImplementedError
223
233
 
224
234
  @abstractmethod
225
- def _get_metrics(self, *args, **kwargs):
235
+ def _compute_table_metrics(
236
+ self,
237
+ metrics: List[Metrics],
238
+ runner,
239
+ *args,
240
+ **kwargs,
241
+ ):
242
+ """Get metrics"""
243
+ raise NotImplementedError
244
+
245
+ @abstractmethod
246
+ def _compute_static_metrics(
247
+ self,
248
+ metrics: List[Metrics],
249
+ runner,
250
+ *args,
251
+ **kwargs,
252
+ ):
253
+ """Get metrics"""
254
+ raise NotImplementedError
255
+
256
+ @abstractmethod
257
+ def _compute_query_metrics(
258
+ self,
259
+ metric: Metrics,
260
+ runner,
261
+ *args,
262
+ **kwargs,
263
+ ):
264
+ """Get metrics"""
265
+ raise NotImplementedError
266
+
267
+ @abstractmethod
268
+ def _compute_window_metrics(
269
+ self,
270
+ metrics: List[Metrics],
271
+ runner: QueryRunner,
272
+ *args,
273
+ **kwargs,
274
+ ):
275
+ """Get metrics"""
276
+ raise NotImplementedError
277
+
278
+ @abstractmethod
279
+ def _compute_system_metrics(
280
+ self,
281
+ metrics: Metrics,
282
+ runner,
283
+ *args,
284
+ **kwargs,
285
+ ):
226
286
  """Get metrics"""
227
287
  raise NotImplementedError
228
288
 
@@ -21,6 +21,9 @@ from metadata.generated.schema.entity.services.connections.database.bigQueryConn
21
21
  from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
22
22
  DatalakeConnection,
23
23
  )
24
+ from metadata.generated.schema.entity.services.connections.database.singleStoreConnection import (
25
+ SingleStoreConnection,
26
+ )
24
27
  from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
25
28
  from metadata.profiler.interface.pandas.profiler_interface import (
26
29
  PandasProfilerInterface,
@@ -32,6 +35,9 @@ from metadata.profiler.interface.sqlalchemy.bigquery.profiler_interface import (
32
35
  from metadata.profiler.interface.sqlalchemy.profiler_interface import (
33
36
  SQAProfilerInterface,
34
37
  )
38
+ from metadata.profiler.interface.sqlalchemy.single_store.profiler_interface import (
39
+ SingleStoreProfilerInterface,
40
+ )
35
41
 
36
42
 
37
43
  class ProfilerInterfaceFactory:
@@ -58,6 +64,9 @@ profiler_interface_factory.register(DatabaseConnection.__name__, SQAProfilerInte
58
64
  profiler_interface_factory.register(
59
65
  BigQueryConnection.__name__, BigQueryProfilerInterface
60
66
  )
67
+ profiler_interface_factory.register(
68
+ SingleStoreConnection.__name__, SingleStoreProfilerInterface
69
+ )
61
70
  profiler_interface_factory.register(
62
71
  DatalakeConnection.__name__, PandasProfilerInterface
63
72
  )