openmetadata-ingestion 1.3.0.0.dev0__py3-none-any.whl → 1.3.1.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 (631) hide show
  1. metadata/applications/auto_tagger.py +8 -3
  2. metadata/cli/db_dump.py +1 -0
  3. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +39 -47
  4. metadata/data_insight/processor/reports/data_processor.py +1 -0
  5. metadata/data_insight/producer/cost_analysis_producer.py +78 -14
  6. metadata/data_insight/producer/entity_producer.py +1 -1
  7. metadata/data_insight/producer/producer_interface.py +1 -1
  8. metadata/data_insight/producer/web_analytics_producer.py +1 -1
  9. metadata/data_insight/source/metadata.py +10 -1
  10. metadata/data_quality/processor/test_case_runner.py +7 -5
  11. metadata/data_quality/source/test_suite.py +0 -1
  12. metadata/data_quality/validations/mixins/pandas_validator_mixin.py +4 -2
  13. metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
  14. metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
  15. metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
  16. metadata/examples/workflows/bigtable.yaml +32 -0
  17. metadata/generated/antlr/EntityLinkLexer.py +124 -58
  18. metadata/generated/schema/analytics/__init__.py +1 -1
  19. metadata/generated/schema/analytics/basic.py +1 -1
  20. metadata/generated/schema/analytics/reportData.py +1 -1
  21. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  22. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  23. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  24. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  25. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  26. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  27. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  28. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  29. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  30. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  31. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  32. metadata/generated/schema/api/__init__.py +1 -1
  33. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  34. metadata/generated/schema/api/analytics/__init__.py +1 -1
  35. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  36. metadata/generated/schema/api/automations/__init__.py +1 -1
  37. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  38. metadata/generated/schema/api/bulkAssets.py +1 -1
  39. metadata/generated/schema/api/classification/__init__.py +1 -1
  40. metadata/generated/schema/api/classification/createClassification.py +1 -1
  41. metadata/generated/schema/api/classification/createTag.py +1 -1
  42. metadata/generated/schema/api/classification/loadTags.py +1 -1
  43. metadata/generated/schema/api/createBot.py +1 -1
  44. metadata/generated/schema/api/createEventPublisherJob.py +2 -2
  45. metadata/generated/schema/api/createType.py +1 -1
  46. metadata/generated/schema/api/data/__init__.py +1 -1
  47. metadata/generated/schema/api/data/createChart.py +1 -1
  48. metadata/generated/schema/api/data/createContainer.py +1 -1
  49. metadata/generated/schema/api/data/createCustomProperty.py +6 -10
  50. metadata/generated/schema/api/data/createDashboard.py +1 -1
  51. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  52. metadata/generated/schema/api/data/createDatabase.py +1 -1
  53. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  54. metadata/generated/schema/api/data/createGlossary.py +1 -1
  55. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  56. metadata/generated/schema/api/data/createMlModel.py +1 -1
  57. metadata/generated/schema/api/data/createPipeline.py +1 -1
  58. metadata/generated/schema/api/data/createQuery.py +1 -1
  59. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  60. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  61. metadata/generated/schema/api/data/createTable.py +1 -1
  62. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  63. metadata/generated/schema/api/data/createTopic.py +1 -1
  64. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  65. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  66. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  67. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  68. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  69. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  70. metadata/generated/schema/api/docStore/__init__.py +1 -1
  71. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  72. metadata/generated/schema/api/domains/__init__.py +1 -1
  73. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  74. metadata/generated/schema/api/domains/createDomain.py +1 -1
  75. metadata/generated/schema/api/feed/__init__.py +1 -1
  76. metadata/generated/schema/api/feed/closeTask.py +1 -1
  77. metadata/generated/schema/api/feed/createPost.py +1 -1
  78. metadata/generated/schema/api/feed/createSuggestion.py +30 -0
  79. metadata/generated/schema/api/feed/createThread.py +1 -1
  80. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  81. metadata/generated/schema/api/feed/threadCount.py +1 -1
  82. metadata/generated/schema/api/lineage/__init__.py +1 -1
  83. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  84. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  85. metadata/generated/schema/api/policies/__init__.py +1 -1
  86. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  87. metadata/generated/schema/api/services/__init__.py +1 -1
  88. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  89. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  90. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  91. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  92. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  93. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  94. metadata/generated/schema/api/services/createSearchService.py +1 -1
  95. metadata/generated/schema/api/services/createStorageService.py +1 -1
  96. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  97. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  98. metadata/generated/schema/api/setOwner.py +1 -1
  99. metadata/generated/schema/api/teams/__init__.py +1 -1
  100. metadata/generated/schema/api/teams/createPersona.py +1 -1
  101. metadata/generated/schema/api/teams/createRole.py +1 -1
  102. metadata/generated/schema/api/teams/createTeam.py +1 -1
  103. metadata/generated/schema/api/teams/createUser.py +1 -1
  104. metadata/generated/schema/api/tests/__init__.py +1 -1
  105. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  106. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  107. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  108. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  109. metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
  110. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  111. metadata/generated/schema/api/voteRequest.py +1 -1
  112. metadata/generated/schema/auth/__init__.py +1 -1
  113. metadata/generated/schema/auth/basicAuth.py +1 -1
  114. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  115. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  116. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  117. metadata/generated/schema/auth/emailRequest.py +1 -1
  118. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  119. metadata/generated/schema/auth/generateToken.py +1 -1
  120. metadata/generated/schema/auth/jwtAuth.py +1 -1
  121. metadata/generated/schema/auth/loginRequest.py +1 -1
  122. metadata/generated/schema/auth/logoutRequest.py +1 -1
  123. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  124. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  125. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  126. metadata/generated/schema/auth/refreshToken.py +1 -1
  127. metadata/generated/schema/auth/registrationRequest.py +1 -1
  128. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  129. metadata/generated/schema/auth/revokeToken.py +1 -1
  130. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  131. metadata/generated/schema/auth/ssoAuth.py +1 -1
  132. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  133. metadata/generated/schema/configuration/__init__.py +1 -1
  134. metadata/generated/schema/configuration/appsPrivateConfiguration.py +28 -0
  135. metadata/generated/schema/configuration/authConfig.py +1 -1
  136. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  137. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  138. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  139. metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
  140. metadata/generated/schema/configuration/elasticSearchConfiguration.py +4 -1
  141. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  142. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  143. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  144. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  145. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  146. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  147. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  148. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  149. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  150. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  151. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  152. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  153. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  154. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  155. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  156. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  157. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  158. metadata/generated/schema/dataInsight/__init__.py +1 -1
  159. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  160. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  161. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  162. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  163. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  164. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  165. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  166. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  167. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  168. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  169. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  170. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  171. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  172. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  173. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  174. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  175. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  176. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  177. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  178. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  179. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  180. metadata/generated/schema/email/__init__.py +1 -1
  181. metadata/generated/schema/email/emailRequest.py +1 -1
  182. metadata/generated/schema/email/smtpSettings.py +1 -1
  183. metadata/generated/schema/entity/__init__.py +1 -1
  184. metadata/generated/schema/entity/applications/__init__.py +1 -1
  185. metadata/generated/schema/entity/applications/app.py +4 -1
  186. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  187. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  188. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +6 -1
  189. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  190. metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +1 -1
  191. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -16
  192. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  193. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  194. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  195. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +2 -2
  196. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
  197. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
  198. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  199. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  200. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  201. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  202. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  203. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  204. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  205. metadata/generated/schema/entity/automations/__init__.py +1 -1
  206. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  207. metadata/generated/schema/entity/automations/workflow.py +1 -1
  208. metadata/generated/schema/entity/bot.py +1 -1
  209. metadata/generated/schema/entity/classification/__init__.py +1 -1
  210. metadata/generated/schema/entity/classification/classification.py +1 -1
  211. metadata/generated/schema/entity/classification/tag.py +1 -1
  212. metadata/generated/schema/entity/data/__init__.py +1 -1
  213. metadata/generated/schema/entity/data/chart.py +1 -1
  214. metadata/generated/schema/entity/data/container.py +1 -1
  215. metadata/generated/schema/entity/data/dashboard.py +1 -1
  216. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  217. metadata/generated/schema/entity/data/database.py +1 -1
  218. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  219. metadata/generated/schema/entity/data/glossary.py +1 -1
  220. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  221. metadata/generated/schema/entity/data/metrics.py +1 -1
  222. metadata/generated/schema/entity/data/mlmodel.py +2 -2
  223. metadata/generated/schema/entity/data/pipeline.py +1 -1
  224. metadata/generated/schema/entity/data/query.py +1 -1
  225. metadata/generated/schema/entity/data/report.py +1 -1
  226. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  227. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  228. metadata/generated/schema/entity/data/table.py +2 -1
  229. metadata/generated/schema/entity/data/topic.py +1 -1
  230. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  231. metadata/generated/schema/entity/docStore/document.py +1 -1
  232. metadata/generated/schema/entity/domains/__init__.py +1 -1
  233. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  234. metadata/generated/schema/entity/domains/domain.py +1 -1
  235. metadata/generated/schema/entity/events/__init__.py +1 -1
  236. metadata/generated/schema/entity/events/webhook.py +4 -6
  237. metadata/generated/schema/entity/feed/__init__.py +1 -1
  238. metadata/generated/schema/entity/feed/suggestion.py +61 -0
  239. metadata/generated/schema/entity/feed/thread.py +1 -1
  240. metadata/generated/schema/entity/policies/__init__.py +1 -1
  241. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  242. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  243. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  244. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  245. metadata/generated/schema/entity/policies/filters.py +1 -1
  246. metadata/generated/schema/entity/policies/policy.py +1 -1
  247. metadata/generated/schema/entity/services/__init__.py +1 -1
  248. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  249. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  250. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  251. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  252. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  253. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  254. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  255. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  265. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  267. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  268. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  269. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  270. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  271. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  272. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
  273. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  274. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  275. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  276. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  277. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  278. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  279. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  280. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  281. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  282. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  283. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  284. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  285. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  287. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  288. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  289. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  290. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  291. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  292. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  296. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  297. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  300. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  301. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  302. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  303. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  304. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +8 -6
  310. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  318. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  319. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  320. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  321. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  322. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  323. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  324. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +14 -2
  325. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  326. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  327. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +14 -2
  328. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  329. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  330. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  331. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  332. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  333. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
  334. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  335. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  336. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  337. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  340. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  341. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  343. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  344. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  345. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  346. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  347. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  348. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  349. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  350. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  352. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  353. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  354. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  355. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  356. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  357. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  358. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  359. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  360. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  361. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  362. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  363. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  365. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  367. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  368. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  369. metadata/generated/schema/entity/services/databaseService.py +4 -4
  370. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  371. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  372. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  373. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  374. metadata/generated/schema/entity/services/messagingService.py +1 -1
  375. metadata/generated/schema/entity/services/metadataService.py +1 -1
  376. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  377. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  378. metadata/generated/schema/entity/services/searchService.py +1 -1
  379. metadata/generated/schema/entity/services/serviceType.py +1 -1
  380. metadata/generated/schema/entity/services/storageService.py +1 -1
  381. metadata/generated/schema/entity/teams/__init__.py +1 -1
  382. metadata/generated/schema/entity/teams/persona.py +1 -1
  383. metadata/generated/schema/entity/teams/role.py +1 -1
  384. metadata/generated/schema/entity/teams/team.py +1 -1
  385. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  386. metadata/generated/schema/entity/teams/user.py +1 -1
  387. metadata/generated/schema/entity/type.py +3 -18
  388. metadata/generated/schema/entity/utils/__init__.py +1 -1
  389. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  390. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  391. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  392. metadata/generated/schema/events/__init__.py +1 -1
  393. metadata/generated/schema/events/alertMetrics.py +1 -1
  394. metadata/generated/schema/events/api/__init__.py +1 -1
  395. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  396. metadata/generated/schema/events/emailAlertConfig.py +1 -6
  397. metadata/generated/schema/events/eventFilterRule.py +1 -1
  398. metadata/generated/schema/events/eventSubscription.py +5 -10
  399. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  400. metadata/generated/schema/events/failedEvent.py +1 -1
  401. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  402. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  403. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  404. metadata/generated/schema/metadataIngestion/application.py +4 -1
  405. metadata/generated/schema/metadataIngestion/applicationPipeline.py +4 -1
  406. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  407. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  408. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  409. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  410. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  411. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  412. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  413. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  414. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
  415. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  416. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  417. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
  418. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  419. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  420. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
  421. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  422. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  423. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  424. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  425. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  426. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  427. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  428. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  429. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  430. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  431. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  432. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  433. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  434. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  435. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  436. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  437. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  438. metadata/generated/schema/monitoring/__init__.py +1 -1
  439. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  440. metadata/generated/schema/security/__init__.py +1 -1
  441. metadata/generated/schema/security/client/__init__.py +1 -1
  442. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  443. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  444. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  445. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  446. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  447. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  448. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  449. metadata/generated/schema/security/credentials/__init__.py +1 -1
  450. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  451. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  452. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  453. metadata/generated/schema/security/credentials/azureCredentials.py +16 -9
  454. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  455. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  456. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  457. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  458. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  459. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  460. metadata/generated/schema/security/secrets/__init__.py +1 -1
  461. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  462. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  463. metadata/generated/schema/security/secrets/secretsManagerProvider.py +3 -1
  464. metadata/generated/schema/security/securityConfiguration.py +1 -1
  465. metadata/generated/schema/security/ssl/__init__.py +1 -1
  466. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  467. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  468. metadata/generated/schema/settings/__init__.py +1 -1
  469. metadata/generated/schema/settings/settings.py +1 -1
  470. metadata/generated/schema/system/__init__.py +1 -1
  471. metadata/generated/schema/system/entityError.py +1 -1
  472. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  473. metadata/generated/schema/system/indexingError.py +1 -1
  474. metadata/generated/schema/system/ui/__init__.py +1 -1
  475. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  476. metadata/generated/schema/system/ui/page.py +1 -1
  477. metadata/generated/schema/tests/__init__.py +1 -1
  478. metadata/generated/schema/tests/assigned.py +1 -1
  479. metadata/generated/schema/tests/basic.py +1 -1
  480. metadata/generated/schema/tests/customMetric.py +1 -1
  481. metadata/generated/schema/tests/resolved.py +1 -1
  482. metadata/generated/schema/tests/testCase.py +1 -1
  483. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  484. metadata/generated/schema/tests/testDefinition.py +2 -1
  485. metadata/generated/schema/tests/testSuite.py +1 -1
  486. metadata/generated/schema/type/__init__.py +1 -1
  487. metadata/generated/schema/type/auditLog.py +1 -1
  488. metadata/generated/schema/type/basic.py +6 -2
  489. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  490. metadata/generated/schema/type/changeEvent.py +1 -1
  491. metadata/generated/schema/type/changeEventType.py +6 -1
  492. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  493. metadata/generated/schema/type/csvDocumentation.py +1 -1
  494. metadata/generated/schema/type/csvErrorType.py +1 -1
  495. metadata/generated/schema/type/csvFile.py +1 -1
  496. metadata/generated/schema/type/csvImportResult.py +1 -1
  497. metadata/generated/schema/type/customProperties/__init__.py +3 -0
  498. metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
  499. metadata/generated/schema/type/customProperty.py +52 -0
  500. metadata/generated/schema/type/dailyCount.py +1 -1
  501. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  502. metadata/generated/schema/type/entityHistory.py +1 -1
  503. metadata/generated/schema/type/entityLineage.py +1 -1
  504. metadata/generated/schema/type/entityReference.py +1 -1
  505. metadata/generated/schema/type/entityReferenceList.py +1 -1
  506. metadata/generated/schema/type/entityRelationship.py +1 -1
  507. metadata/generated/schema/type/entityUsage.py +1 -1
  508. metadata/generated/schema/type/filterPattern.py +1 -1
  509. metadata/generated/schema/type/function.py +1 -1
  510. metadata/generated/schema/type/include.py +1 -1
  511. metadata/generated/schema/type/jdbcConnection.py +1 -1
  512. metadata/generated/schema/type/lifeCycle.py +1 -1
  513. metadata/generated/schema/type/paging.py +1 -1
  514. metadata/generated/schema/type/profile.py +1 -1
  515. metadata/generated/schema/type/queryParserData.py +1 -1
  516. metadata/generated/schema/type/reaction.py +1 -1
  517. metadata/generated/schema/type/schedule.py +1 -1
  518. metadata/generated/schema/type/schema.py +1 -1
  519. metadata/generated/schema/type/tableQuery.py +1 -1
  520. metadata/generated/schema/type/tableUsageCount.py +1 -1
  521. metadata/generated/schema/type/tagLabel.py +1 -1
  522. metadata/generated/schema/type/usageDetails.py +1 -1
  523. metadata/generated/schema/type/usageRequest.py +1 -1
  524. metadata/generated/schema/type/votes.py +1 -1
  525. metadata/great_expectations/action.py +7 -17
  526. metadata/ingestion/api/status.py +4 -0
  527. metadata/ingestion/api/steps.py +14 -1
  528. metadata/ingestion/api/topology_runner.py +4 -1
  529. metadata/ingestion/lineage/parser.py +4 -5
  530. metadata/ingestion/models/custom_properties.py +0 -1
  531. metadata/ingestion/models/patch_request.py +3 -2
  532. metadata/ingestion/ometa/client.py +6 -0
  533. metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
  534. metadata/ingestion/ometa/mixins/patch_mixin.py +0 -1
  535. metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
  536. metadata/ingestion/ometa/ometa_api.py +16 -8
  537. metadata/ingestion/ometa/routes.py +7 -0
  538. metadata/ingestion/sink/metadata_rest.py +2 -2
  539. metadata/ingestion/source/dashboard/dashboard_service.py +0 -1
  540. metadata/ingestion/source/dashboard/looker/metadata.py +3 -6
  541. metadata/ingestion/source/dashboard/metabase/client.py +4 -0
  542. metadata/ingestion/source/dashboard/metabase/metadata.py +5 -4
  543. metadata/ingestion/source/dashboard/metabase/models.py +2 -2
  544. metadata/ingestion/source/dashboard/superset/api_source.py +0 -1
  545. metadata/ingestion/source/dashboard/superset/db_source.py +1 -3
  546. metadata/ingestion/source/dashboard/superset/queries.py +1 -1
  547. metadata/ingestion/source/dashboard/tableau/metadata.py +19 -1
  548. metadata/ingestion/source/database/athena/client.py +2 -4
  549. metadata/ingestion/source/database/azuresql/metadata.py +0 -1
  550. metadata/ingestion/source/database/bigquery/helper.py +68 -1
  551. metadata/ingestion/source/database/bigquery/metadata.py +12 -3
  552. metadata/ingestion/source/database/bigquery/queries.py +22 -0
  553. metadata/ingestion/source/database/bigtable/client.py +62 -0
  554. metadata/ingestion/source/database/bigtable/connection.py +116 -0
  555. metadata/ingestion/source/database/bigtable/metadata.py +224 -0
  556. metadata/ingestion/source/database/bigtable/models.py +60 -0
  557. metadata/ingestion/source/database/common_db_source.py +2 -2
  558. metadata/ingestion/source/database/common_nosql_source.py +22 -4
  559. metadata/ingestion/source/database/databricks/client.py +0 -1
  560. metadata/ingestion/source/database/databricks/metadata.py +132 -46
  561. metadata/ingestion/source/database/databricks/queries.py +3 -4
  562. metadata/ingestion/source/database/datalake/metadata.py +9 -4
  563. metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
  564. metadata/ingestion/source/database/dbt/dbt_service.py +3 -11
  565. metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
  566. metadata/ingestion/source/database/dbt/metadata.py +16 -29
  567. metadata/ingestion/source/database/extended_sample_data.py +202 -134
  568. metadata/ingestion/source/database/hive/connection.py +0 -2
  569. metadata/ingestion/source/database/mssql/metadata.py +0 -1
  570. metadata/ingestion/source/database/mssql/queries.py +1 -2
  571. metadata/ingestion/source/database/oracle/queries.py +2 -2
  572. metadata/ingestion/source/database/oracle/utils.py +0 -1
  573. metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
  574. metadata/ingestion/source/database/sample_data.py +0 -1
  575. metadata/ingestion/source/database/sas/metadata.py +2 -3
  576. metadata/ingestion/source/database/snowflake/utils.py +2 -6
  577. metadata/ingestion/source/database/stored_procedures_mixin.py +0 -1
  578. metadata/ingestion/source/database/unitycatalog/metadata.py +16 -31
  579. metadata/ingestion/source/messaging/common_broker_source.py +9 -8
  580. metadata/ingestion/source/messaging/kafka/connection.py +45 -4
  581. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
  582. metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
  583. metadata/ingestion/source/search/elasticsearch/metadata.py +0 -1
  584. metadata/ingestion/source/storage/storage_service.py +8 -8
  585. metadata/profiler/interface/pandas/profiler_interface.py +7 -2
  586. metadata/profiler/interface/profiler_interface_factory.py +7 -0
  587. metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
  588. metadata/profiler/interface/sqlalchemy/profiler_interface.py +3 -5
  589. metadata/profiler/metrics/hybrid/histogram.py +1 -0
  590. metadata/profiler/orm/functions/conn_test.py +1 -0
  591. metadata/profiler/orm/functions/sum.py +1 -0
  592. metadata/profiler/orm/functions/table_metric_computer.py +0 -1
  593. metadata/profiler/orm/registry.py +1 -0
  594. metadata/profiler/processor/core.py +2 -2
  595. metadata/profiler/processor/processor.py +0 -2
  596. metadata/profiler/processor/sample_data_handler.py +6 -2
  597. metadata/profiler/source/base/profiler_source.py +0 -1
  598. metadata/profiler/source/bigquery/type_mapper.py +0 -1
  599. metadata/readers/file/api_reader.py +0 -1
  600. metadata/utils/datalake/datalake_utils.py +369 -129
  601. metadata/utils/entity_link.py +26 -6
  602. metadata/utils/execution_time_tracker.py +199 -0
  603. metadata/utils/filters.py +4 -0
  604. metadata/utils/helpers.py +30 -38
  605. metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
  606. metadata/utils/secrets/aws_secrets_manager.py +7 -2
  607. metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
  608. metadata/utils/secrets/azure_kv_secrets_manager.py +148 -0
  609. metadata/utils/secrets/external_secrets_manager.py +25 -3
  610. metadata/utils/secrets/secrets_manager_factory.py +13 -31
  611. metadata/workflow/application.py +10 -10
  612. metadata/workflow/base.py +4 -1
  613. metadata/workflow/metadata.py +0 -1
  614. metadata/workflow/output_handler.py +22 -0
  615. metadata/workflow/usage.py +0 -1
  616. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/METADATA +298 -289
  617. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/RECORD +624 -612
  618. metadata/generated/schema/entity/services/connections/database/duckdbConnection.py +0 -96
  619. metadata/generated/schema/events/userAlertConfig.py +0 -25
  620. metadata/ingestion/source/database/duckdb/connection.py +0 -76
  621. metadata/ingestion/source/database/duckdb/metadata.py +0 -204
  622. metadata/ingestion/source/database/duckdb/queries.py +0 -141
  623. metadata/ingestion/source/database/duckdb/utils.py +0 -349
  624. metadata/utils/secrets/client/loader.py +0 -78
  625. /metadata/ingestion/source/database/{duckdb → bigtable}/__init__.py +0 -0
  626. /metadata/{utils/secrets/client → profiler/interface/sqlalchemy/db2}/__init__.py +0 -0
  627. /metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +0 -0
  628. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/LICENSE +0 -0
  629. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/WHEEL +0 -0
  630. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/entry_points.txt +0 -0
  631. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/top_level.txt +0 -0
@@ -80,6 +80,7 @@ ALLOWED_COMMON_PATCH_FIELDS = {
80
80
  "description": True,
81
81
  "owner": True,
82
82
  "tags": True,
83
+ "sourceHash": True,
83
84
  # Table Entity Fields
84
85
  "tableType": True,
85
86
  "columns": {"__all__": ALLOWED_COLUMN_FIELDS},
@@ -210,9 +211,9 @@ def _determine_restricted_operation(
210
211
  Only retain add operation for restrict_update_fields fields
211
212
  """
212
213
  path = patch_ops.get("path")
213
- op = patch_ops.get("op")
214
+ ops = patch_ops.get("op")
214
215
  for field in restrict_update_fields or []:
215
- if field in path and op != PatchOperation.ADD.value:
216
+ if field in path and ops != PatchOperation.ADD.value:
216
217
  return False
217
218
  return True
218
219
 
@@ -21,6 +21,7 @@ from requests.exceptions import HTTPError
21
21
 
22
22
  from metadata.config.common import ConfigModel
23
23
  from metadata.ingestion.ometa.credentials import URL, get_api_version
24
+ from metadata.utils.execution_time_tracker import calculate_execution_time
24
25
  from metadata.utils.logger import ometa_logger
25
26
 
26
27
  logger = ometa_logger()
@@ -251,6 +252,7 @@ class REST:
251
252
 
252
253
  return None
253
254
 
255
+ @calculate_execution_time(context="GET")
254
256
  def get(self, path, data=None):
255
257
  """
256
258
  GET method
@@ -264,6 +266,7 @@ class REST:
264
266
  """
265
267
  return self._request("GET", path, data)
266
268
 
269
+ @calculate_execution_time(context="POST")
267
270
  def post(self, path, data=None):
268
271
  """
269
272
  POST method
@@ -277,6 +280,7 @@ class REST:
277
280
  """
278
281
  return self._request("POST", path, data)
279
282
 
283
+ @calculate_execution_time(context="PUT")
280
284
  def put(self, path, data=None):
281
285
  """
282
286
  PUT method
@@ -290,6 +294,7 @@ class REST:
290
294
  """
291
295
  return self._request("PUT", path, data)
292
296
 
297
+ @calculate_execution_time(context="PATCH")
293
298
  def patch(self, path, data=None):
294
299
  """
295
300
  PATCH method
@@ -308,6 +313,7 @@ class REST:
308
313
  headers={"Content-type": "application/json-patch+json"},
309
314
  )
310
315
 
316
+ @calculate_execution_time(context="DELETE")
311
317
  def delete(self, path, data=None):
312
318
  """
313
319
  DELETE method
@@ -15,7 +15,8 @@ To be used by OpenMetadata class
15
15
  """
16
16
  from typing import Dict
17
17
 
18
- from metadata.generated.schema.api.data.createCustomProperty import PropertyType
18
+ from metadata.generated.schema.type.customProperty import PropertyType
19
+ from metadata.generated.schema.type.entityReference import EntityReference
19
20
  from metadata.ingestion.models.custom_properties import (
20
21
  CustomPropertyDataTypes,
21
22
  CustomPropertyType,
@@ -54,16 +55,6 @@ class OMetaCustomPropertyMixin:
54
55
  f"/metadata/types/name/{entity_type}?category=field"
55
56
  )
56
57
 
57
- # Get the data type of the custom property
58
- if not ometa_custom_property.createCustomPropertyRequest.propertyType:
59
- custom_property_type = self.get_custom_property_type(
60
- data_type=ometa_custom_property.custom_property_type
61
- )
62
- property_type = PropertyType(id=custom_property_type.id, type="type")
63
- ometa_custom_property.createCustomPropertyRequest.propertyType = (
64
- property_type
65
- )
66
-
67
58
  resp = self.client.put(
68
59
  f"/metadata/types/{entity_schema.get('id')}",
69
60
  data=ometa_custom_property.createCustomPropertyRequest.json(),
@@ -78,3 +69,12 @@ class OMetaCustomPropertyMixin:
78
69
  """
79
70
  resp = self.client.get(f"/metadata/types/name/{data_type.value}?category=field")
80
71
  return CustomPropertyType(**resp)
72
+
73
+ def get_property_type_ref(self, data_type: CustomPropertyDataTypes) -> PropertyType:
74
+ """
75
+ Get the PropertyType for custom properties
76
+ """
77
+ custom_property_type = self.get_custom_property_type(data_type=data_type)
78
+ return PropertyType(
79
+ __root__=EntityReference(id=custom_property_type.id, type="type")
80
+ )
@@ -135,7 +135,6 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
135
135
  Updated Entity
136
136
  """
137
137
  try:
138
-
139
138
  patch = build_patch(
140
139
  source=source,
141
140
  destination=destination,
@@ -0,0 +1,41 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+ """
12
+ Mixin class containing Suggestions specific methods
13
+
14
+ To be used by OpenMetadata class
15
+ """
16
+ from metadata.generated.schema.entity.feed.suggestion import Suggestion
17
+ from metadata.ingestion.ometa.client import REST
18
+ from metadata.utils.logger import ometa_logger
19
+
20
+ logger = ometa_logger()
21
+
22
+
23
+ class OMetaSuggestionsMixin:
24
+ """
25
+ OpenMetadata API methods related to the Suggestion Entity
26
+
27
+ To be inherited by OpenMetadata
28
+ """
29
+
30
+ client: REST
31
+
32
+ def update_suggestion(self, suggestion: Suggestion) -> Suggestion:
33
+ """
34
+ Update an existing Suggestion with new fields
35
+ """
36
+ resp = self.client.put(
37
+ f"{self.get_suffix(Suggestion)}/{str(suggestion.id.__root__)}",
38
+ data=suggestion.json(),
39
+ )
40
+
41
+ return Suggestion(**resp)
@@ -50,6 +50,7 @@ from metadata.ingestion.ometa.mixins.role_policy_mixin import OMetaRolePolicyMix
50
50
  from metadata.ingestion.ometa.mixins.search_index_mixin import OMetaSearchIndexMixin
51
51
  from metadata.ingestion.ometa.mixins.server_mixin import OMetaServerMixin
52
52
  from metadata.ingestion.ometa.mixins.service_mixin import OMetaServiceMixin
53
+ from metadata.ingestion.ometa.mixins.suggestions_mixin import OMetaSuggestionsMixin
53
54
  from metadata.ingestion.ometa.mixins.table_mixin import OMetaTableMixin
54
55
  from metadata.ingestion.ometa.mixins.tests_mixin import OMetaTestsMixin
55
56
  from metadata.ingestion.ometa.mixins.topic_mixin import OMetaTopicMixin
@@ -108,6 +109,7 @@ class OpenMetadata(
108
109
  OMetaRolePolicyMixin,
109
110
  OMetaSearchIndexMixin,
110
111
  OMetaCustomPropertyMixin,
112
+ OMetaSuggestionsMixin,
111
113
  Generic[T, C],
112
114
  ):
113
115
  """
@@ -246,11 +248,9 @@ class OpenMetadata(
246
248
  )
247
249
  return entity_class
248
250
 
249
- def create_or_update(self, data: C) -> T:
251
+ def _create(self, data: C, method: str) -> T:
250
252
  """
251
- We allow CreateEntity for PUT, so we expect a type C.
252
-
253
- We PUT to the endpoint and return the Entity generated result
253
+ Internal logic to run POST vs. PUT
254
254
  """
255
255
  entity = data.__class__
256
256
  is_create = "create" in data.__class__.__name__.lower()
@@ -262,15 +262,23 @@ class OpenMetadata(
262
262
  raise InvalidEntityException(
263
263
  f"PUT operations need a CreateEntity, not {entity}"
264
264
  )
265
- resp = self.client.put(
266
- self.get_suffix(entity), data=data.json(encoder=show_secrets_encoder)
267
- )
265
+
266
+ fn = getattr(self.client, method)
267
+ resp = fn(self.get_suffix(entity), data=data.json(encoder=show_secrets_encoder))
268
268
  if not resp:
269
269
  raise EmptyPayloadException(
270
270
  f"Got an empty response when trying to PUT to {self.get_suffix(entity)}, {data.json()}"
271
271
  )
272
272
  return entity_class(**resp)
273
273
 
274
+ def create_or_update(self, data: C) -> T:
275
+ """Run a PUT requesting via create request C"""
276
+ return self._create(data=data, method="put")
277
+
278
+ def create(self, data: C) -> T:
279
+ """Run a POST requesting via create request C"""
280
+ return self._create(data=data, method="post")
281
+
274
282
  def get_by_name(
275
283
  self,
276
284
  entity: Type[T],
@@ -410,7 +418,7 @@ class OpenMetadata(
410
418
  self,
411
419
  entity: Type[T],
412
420
  fields: Optional[List[str]] = None,
413
- limit: int = 1000,
421
+ limit: int = 100,
414
422
  params: Optional[Dict[str, str]] = None,
415
423
  skip_on_failure: bool = False,
416
424
  ) -> Iterable[T]:
@@ -50,6 +50,7 @@ from metadata.generated.schema.api.domains.createDataProduct import (
50
50
  CreateDataProductRequest,
51
51
  )
52
52
  from metadata.generated.schema.api.domains.createDomain import CreateDomainRequest
53
+ from metadata.generated.schema.api.feed.createSuggestion import CreateSuggestionRequest
53
54
  from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
54
55
  from metadata.generated.schema.api.policies.createPolicy import CreatePolicyRequest
55
56
  from metadata.generated.schema.api.services.createDashboardService import (
@@ -90,6 +91,7 @@ from metadata.generated.schema.api.tests.createTestSuite import CreateTestSuiteR
90
91
  from metadata.generated.schema.dataInsight.dataInsightChart import DataInsightChart
91
92
  from metadata.generated.schema.dataInsight.kpi.kpi import Kpi
92
93
  from metadata.generated.schema.entity.automations.workflow import Workflow
94
+ from metadata.generated.schema.entity.bot import Bot
93
95
  from metadata.generated.schema.entity.classification.classification import (
94
96
  Classification,
95
97
  )
@@ -113,6 +115,7 @@ from metadata.generated.schema.entity.data.table import Table
113
115
  from metadata.generated.schema.entity.data.topic import Topic
114
116
  from metadata.generated.schema.entity.domains.dataProduct import DataProduct
115
117
  from metadata.generated.schema.entity.domains.domain import Domain
118
+ from metadata.generated.schema.entity.feed.suggestion import Suggestion
116
119
  from metadata.generated.schema.entity.policies.policy import Policy
117
120
  from metadata.generated.schema.entity.services.connections.testConnectionDefinition import (
118
121
  TestConnectionDefinition,
@@ -181,6 +184,7 @@ ROUTES = {
181
184
  User.__name__: "/users",
182
185
  CreateUserRequest.__name__: "/users",
183
186
  AuthenticationMechanism.__name__: "/users/auth-mechanism",
187
+ Bot.__name__: "/bots", # We won't allow bot creation from the client
184
188
  # Roles
185
189
  Role.__name__: "/roles",
186
190
  CreateRoleRequest.__name__: "/roles",
@@ -225,4 +229,7 @@ ROUTES = {
225
229
  CreateDomainRequest.__name__: "/domains",
226
230
  DataProduct.__name__: "/dataProducts",
227
231
  CreateDataProductRequest.__name__: "/dataProducts",
232
+ # Suggestions
233
+ Suggestion.__name__: "/suggestions",
234
+ CreateSuggestionRequest.__name__: "/suggestions",
228
235
  }
@@ -82,7 +82,7 @@ from metadata.ingestion.ometa.ometa_api import OpenMetadata
82
82
  from metadata.ingestion.source.dashboard.dashboard_service import DashboardUsage
83
83
  from metadata.ingestion.source.database.database_service import DataModelLink
84
84
  from metadata.profiler.api.models import ProfilerResponse
85
- from metadata.utils.helpers import calculate_execution_time
85
+ from metadata.utils.execution_time_tracker import calculate_execution_time
86
86
  from metadata.utils.logger import get_log_name, ingestion_logger
87
87
 
88
88
  logger = ingestion_logger()
@@ -129,7 +129,7 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
129
129
  logger.debug(f"Processing Create request {type(record)}")
130
130
  return self.write_create_request(record)
131
131
 
132
- @calculate_execution_time
132
+ @calculate_execution_time(store=False)
133
133
  def _run(self, record: Entity, *_, **__) -> Either[Any]:
134
134
  """
135
135
  Default implementation for the single dispatch
@@ -531,7 +531,6 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
531
531
  )
532
532
 
533
533
  def check_database_schema_name(self, database_schema_name: str):
534
-
535
534
  """
536
535
  Check if the input database schema name is equal to "<default>" and return the input name if it is not.
537
536
 
@@ -661,7 +661,7 @@ class LookerSource(DashboardServiceSource):
661
661
  ],
662
662
  # Dashboards are created from the UI directly. They are not linked to a project
663
663
  # like LookML assets, but rather just organised in folders.
664
- project=self._get_dashboard_project(dashboard_details),
664
+ project=self.get_project_name(dashboard_details),
665
665
  sourceUrl=f"{clean_uri(self.service_connection.hostPort)}/dashboards/{dashboard_details.id}",
666
666
  service=self.context.dashboard_service,
667
667
  owner=self.get_owner_ref(dashboard_details=dashboard_details),
@@ -669,8 +669,7 @@ class LookerSource(DashboardServiceSource):
669
669
  yield Either(right=dashboard_request)
670
670
  self.register_record(dashboard_request=dashboard_request)
671
671
 
672
- @staticmethod
673
- def _get_dashboard_project(dashboard_details: LookerDashboard) -> Optional[str]:
672
+ def get_project_name(self, dashboard_details: LookerDashboard) -> Optional[str]:
674
673
  """
675
674
  Get dashboard project if the folder is informed
676
675
  """
@@ -680,7 +679,7 @@ class LookerSource(DashboardServiceSource):
680
679
  logger.debug(
681
680
  f"Cannot get folder name from dashboard [{dashboard_details.title}] - [{exc}]"
682
681
  )
683
- return None
682
+ return None
684
683
 
685
684
  @staticmethod
686
685
  def _clean_table_name(table_name: str) -> str:
@@ -833,7 +832,6 @@ class LookerSource(DashboardServiceSource):
833
832
  to_entity.id.__root__
834
833
  not in self._added_lineage[from_entity.id.__root__]
835
834
  ):
836
-
837
835
  self._added_lineage[from_entity.id.__root__].append(
838
836
  to_entity.id.__root__
839
837
  )
@@ -943,7 +941,6 @@ class LookerSource(DashboardServiceSource):
943
941
  dashboard_name = self.context.dashboard
944
942
 
945
943
  try:
946
-
947
944
  dashboard_fqn = fqn.build(
948
945
  metadata=self.metadata,
949
946
  entity_type=Dashboard,
@@ -124,6 +124,10 @@ class MetabaseClient:
124
124
  try:
125
125
  resp_dashboard = self.client.get(f"/dashboard/{dashboard_id}")
126
126
  if resp_dashboard:
127
+ # Small hack needed to support Metabase versions older than 0.48
128
+ # https://www.metabase.com/releases/metabase-48#fyi--breaking-changes
129
+ if "ordered_cards" in resp_dashboard:
130
+ resp_dashboard["dashcards"] = resp_dashboard["ordered_cards"]
127
131
  return MetabaseDashboardDetails(**resp_dashboard)
128
132
  except Exception:
129
133
  logger.debug(traceback.format_exc())
@@ -178,7 +178,7 @@ class MetabaseSource(DashboardServiceSource):
178
178
  Returns:
179
179
  Iterable[CreateChartRequest]
180
180
  """
181
- charts = dashboard_details.ordered_cards
181
+ charts = dashboard_details.dashcards
182
182
  for chart in charts:
183
183
  try:
184
184
  chart_details = chart.card
@@ -225,7 +225,7 @@ class MetabaseSource(DashboardServiceSource):
225
225
  if not db_service_name:
226
226
  return
227
227
  chart_list, dashboard_name = (
228
- dashboard_details.ordered_cards,
228
+ dashboard_details.dashcards,
229
229
  str(dashboard_details.id),
230
230
  )
231
231
  for chart in chart_list:
@@ -324,8 +324,9 @@ class MetabaseSource(DashboardServiceSource):
324
324
  self, chart_details: MetabaseChart, db_service_name: str, dashboard_name: str
325
325
  ) -> Iterable[Either[AddLineageRequest]]:
326
326
  table = self.client.get_table(chart_details.table_id)
327
+ table_name = table.name or table.display_name
327
328
 
328
- if table is None or table.display_name is None:
329
+ if table is None or table_name is None:
329
330
  return
330
331
 
331
332
  database_name = table.db.details.db if table.db and table.db.details else None
@@ -334,7 +335,7 @@ class MetabaseSource(DashboardServiceSource):
334
335
  database=database_name,
335
336
  service_name=db_service_name,
336
337
  database_schema=table.table_schema,
337
- table=table.display_name,
338
+ table=table_name,
338
339
  )
339
340
 
340
341
  to_fqn = fqn.build(
@@ -67,7 +67,7 @@ class MetabaseChart(BaseModel):
67
67
  display: Optional[str]
68
68
 
69
69
 
70
- class OrderedCard(BaseModel):
70
+ class DashCard(BaseModel):
71
71
  card: MetabaseChart
72
72
 
73
73
 
@@ -77,7 +77,7 @@ class MetabaseDashboardDetails(BaseModel):
77
77
  """
78
78
 
79
79
  description: Optional[str]
80
- ordered_cards: List[OrderedCard]
80
+ dashcards: List[DashCard]
81
81
  name: Optional[str]
82
82
  id: int
83
83
  collection_id: Optional[str]
@@ -192,7 +192,6 @@ class SupersetAPISource(SupersetSourceMixin):
192
192
  def yield_datamodel(
193
193
  self, dashboard_details: DashboardResult
194
194
  ) -> Iterable[Either[CreateDashboardDataModelRequest]]:
195
-
196
195
  if self.source_config.includeDataModels:
197
196
  for chart_id in self._get_charts_of_dashboard(dashboard_details):
198
197
  try:
@@ -15,7 +15,6 @@ Superset source module
15
15
  import traceback
16
16
  from typing import Iterable, Optional
17
17
 
18
- from sqlalchemy import sql
19
18
  from sqlalchemy.engine import Engine
20
19
  from sqlalchemy.engine.url import make_url
21
20
 
@@ -87,7 +86,7 @@ class SupersetDBSource(SupersetSourceMixin):
87
86
  try:
88
87
  if table_name:
89
88
  col_list = self.engine.execute(
90
- sql.text(FETCH_COLUMN), table_name=table_name.lower()
89
+ FETCH_COLUMN, table_name=table_name.lower()
91
90
  )
92
91
  return [FetchColumn(**col) for col in col_list]
93
92
  except Exception as err:
@@ -216,7 +215,6 @@ class SupersetDBSource(SupersetSourceMixin):
216
215
  def yield_datamodel(
217
216
  self, dashboard_details: FetchDashboard
218
217
  ) -> Iterable[Either[CreateDashboardDataModelRequest]]:
219
-
220
218
  if self.source_config.includeDataModels:
221
219
  for chart_id in self._get_charts_of_dashboard(dashboard_details):
222
220
  chart_json = self.all_charts.get(chart_id)
@@ -85,5 +85,5 @@ inner join
85
85
  on
86
86
  t.id=tc.table_id
87
87
  where
88
- table_name= %(table_name)s
88
+ table_name=%(table_name)s
89
89
  """
@@ -152,6 +152,23 @@ class TableauSource(DashboardServiceSource):
152
152
  include_tags=self.source_config.includeTags,
153
153
  )
154
154
 
155
+ def _get_datamodel_sql_query(self, data_model: DataSource) -> Optional[str]:
156
+ """
157
+ Method to fetch the custom sql query from the tableau datamodels
158
+ """
159
+ try:
160
+ sql_queries = []
161
+ for table in data_model.upstreamTables or []:
162
+ for referenced_query in table.referencedByQueries or []:
163
+ sql_queries.append(referenced_query.query)
164
+ return "\n\n".join(sql_queries) or None
165
+ except Exception as exc:
166
+ logger.debug(traceback.format_exc())
167
+ logger.warning(
168
+ f"Error processing queries for datamodel [{data_model.id}]: {exc}"
169
+ )
170
+ return None
171
+
155
172
  def yield_datamodel(
156
173
  self, dashboard_details: TableauDashboard
157
174
  ) -> Iterable[Either[CreateDashboardDataModelRequest]]:
@@ -171,6 +188,7 @@ class TableauSource(DashboardServiceSource):
171
188
  dataModelType=DataModelType.TableauDataModel.value,
172
189
  serviceType=DashboardServiceType.Tableau.value,
173
190
  columns=self.get_column_info(data_model),
191
+ sql=self._get_datamodel_sql_query(data_model=data_model),
174
192
  )
175
193
  yield Either(right=data_model_request)
176
194
  self.register_record_datamodel(datamodel_request=data_model_request)
@@ -199,7 +217,7 @@ class TableauSource(DashboardServiceSource):
199
217
  try:
200
218
  dashboard_url = (
201
219
  f"{clean_uri(str(self.config.serviceConnection.__root__.config.hostPort))}"
202
- f"/#{urlparse(dashboard_details.webpageUrl).fragment}"
220
+ f"/#{urlparse(dashboard_details.webpageUrl).fragment}/views"
203
221
  )
204
222
  dashboard_request = CreateDashboardRequest(
205
223
  name=dashboard_details.id,
@@ -54,9 +54,7 @@ class AthenaLakeFormationClient:
54
54
  )
55
55
  return None
56
56
 
57
- def get_table_and_column_tags(
58
- self, schema_name: str, table_name: str
59
- ) -> Optional[LFTags]:
57
+ def get_table_and_column_tags(self, schema_name: str, table_name: str) -> LFTags:
60
58
  """
61
59
  Method to call the API and get the table and column tags
62
60
  """
@@ -79,4 +77,4 @@ class AthenaLakeFormationClient:
79
77
  logger.warning(
80
78
  f"Unable to get lf tags for table resource [{table_name}] due to: {exc}"
81
79
  )
82
- return None
80
+ return LFTags()
@@ -77,7 +77,6 @@ class AzuresqlSource(CommonDbSourceService, MultiDBSource):
77
77
  yield from self._execute_database_query(AZURE_SQL_GET_DATABASES)
78
78
 
79
79
  def get_database_names(self) -> Iterable[str]:
80
-
81
80
  if not self.config.serviceConnection.__root__.config.ingestAllDatabases:
82
81
  configured_db = self.config.serviceConnection.__root__.config.database
83
82
  self.set_inspector(database_name=configured_db)
@@ -12,7 +12,7 @@
12
12
  """
13
13
  Source connection helper
14
14
  """
15
-
15
+ import traceback
16
16
  from typing import Any
17
17
 
18
18
  from pydantic import BaseModel
@@ -26,7 +26,14 @@ from metadata.generated.schema.security.credentials.gcpValues import (
26
26
  SingleProjectId,
27
27
  )
28
28
  from metadata.ingestion.source.connections import get_connection
29
+ from metadata.ingestion.source.database.bigquery.queries import (
30
+ BIGQUERY_FOREIGN_CONSTRAINTS,
31
+ BIGQUERY_TABLE_CONSTRAINTS,
32
+ )
29
33
  from metadata.utils.bigquery_utils import get_bigquery_client
34
+ from metadata.utils.logger import ingestion_logger
35
+
36
+ logger = ingestion_logger()
30
37
 
31
38
 
32
39
  class InspectorWrapper(BaseModel):
@@ -64,3 +71,63 @@ def get_inspector_details(
64
71
  inspector = inspect(engine)
65
72
 
66
73
  return InspectorWrapper(client=client, engine=engine, inspector=inspector)
74
+
75
+
76
+ def get_pk_constraint(
77
+ self, connection, table_name, schema=None, **kw
78
+ ): # pylint: disable=unused-argument
79
+ """
80
+ This function overrides to get primary key constraint
81
+ """
82
+ try:
83
+ table_constraints = connection.engine.execute(
84
+ BIGQUERY_TABLE_CONSTRAINTS.format(
85
+ project_id=connection.engine.url.host,
86
+ schema_name=schema,
87
+ table_name=table_name,
88
+ )
89
+ )
90
+ col_name = []
91
+ for table_constraint in table_constraints:
92
+ col_name.append(table_constraint.column_name)
93
+ return {"constrained_columns": tuple(col_name)}
94
+ except Exception as exc:
95
+ logger.debug(traceback.format_exc())
96
+ logger.warning(
97
+ f"Error while fetching primary key constraint error for table [{schema}.{table_name}]: {exc}"
98
+ )
99
+ return {"constrained_columns": []}
100
+
101
+
102
+ def get_foreign_keys(
103
+ self, connection, table_name, schema=None, **kw
104
+ ): # pylint: disable=unused-argument
105
+ """
106
+ This function overrides to get foreign key constraint
107
+ """
108
+ try:
109
+ table_constraints = connection.engine.execute(
110
+ BIGQUERY_FOREIGN_CONSTRAINTS.format(
111
+ project_id=connection.engine.url.host,
112
+ schema_name=schema,
113
+ table_name=table_name,
114
+ )
115
+ )
116
+ col_name = []
117
+ for table_constraint in table_constraints:
118
+ col_name.append(
119
+ {
120
+ "name": table_constraint.name,
121
+ "referred_schema": table_constraint.referred_schema,
122
+ "referred_table": table_constraint.referred_table,
123
+ "constrained_columns": [table_constraint.constrained_columns],
124
+ "referred_columns": [table_constraint.referred_columns],
125
+ }
126
+ )
127
+ return col_name
128
+ except Exception as exc:
129
+ logger.debug(traceback.format_exc())
130
+ logger.warning(
131
+ f"Error while fetching foreign key constraint error for table [{schema}.{table_name}]: {exc}"
132
+ )
133
+ return []
@@ -56,7 +56,11 @@ from metadata.ingestion.api.steps import InvalidSourceException
56
56
  from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
57
57
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
58
58
  from metadata.ingestion.source.connections import get_test_connection_fn
59
- from metadata.ingestion.source.database.bigquery.helper import get_inspector_details
59
+ from metadata.ingestion.source.database.bigquery.helper import (
60
+ get_foreign_keys,
61
+ get_inspector_details,
62
+ get_pk_constraint,
63
+ )
60
64
  from metadata.ingestion.source.database.bigquery.models import (
61
65
  STORED_PROC_LANGUAGE_MAP,
62
66
  BigQueryStoredProcedure,
@@ -194,6 +198,8 @@ def _build_formatted_table_id(table):
194
198
  BigQueryDialect._build_formatted_table_id = ( # pylint: disable=protected-access
195
199
  _build_formatted_table_id
196
200
  )
201
+ BigQueryDialect.get_pk_constraint = get_pk_constraint
202
+ BigQueryDialect.get_foreign_keys = get_foreign_keys
197
203
 
198
204
 
199
205
  class BigquerySource(
@@ -245,7 +251,9 @@ class BigquerySource(
245
251
  test_connection_fn(
246
252
  self.metadata, inspector_details.engine, self.service_connection
247
253
  )
248
- if os.environ[GOOGLE_CREDENTIALS]:
254
+ # GOOGLE_CREDENTIALS may not have been set,
255
+ # to avoid key error, we use `get` for dict
256
+ if os.environ.get(GOOGLE_CREDENTIALS):
249
257
  self.temp_credentials_file_path.append(os.environ[GOOGLE_CREDENTIALS])
250
258
 
251
259
  def query_table_names_and_types(
@@ -436,7 +444,8 @@ class BigquerySource(
436
444
  inspector_details = get_inspector_details(
437
445
  database_name=database_name, service_connection=self.service_connection
438
446
  )
439
- self.temp_credentials_file_path.append(os.environ[GOOGLE_CREDENTIALS])
447
+ if os.environ.get(GOOGLE_CREDENTIALS):
448
+ self.temp_credentials_file_path.append(os.environ[GOOGLE_CREDENTIALS])
440
449
  self.client = inspector_details.client
441
450
  self.engine = inspector_details.engine
442
451
  self.inspector = inspector_details.inspector