openmetadata-ingestion 1.3.0.1__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 (574) hide show
  1. metadata/cli/db_dump.py +1 -0
  2. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +39 -47
  3. metadata/data_insight/processor/reports/data_processor.py +1 -0
  4. metadata/data_insight/producer/cost_analysis_producer.py +78 -14
  5. metadata/data_insight/producer/entity_producer.py +1 -1
  6. metadata/data_insight/producer/producer_interface.py +1 -1
  7. metadata/data_insight/producer/web_analytics_producer.py +1 -1
  8. metadata/data_insight/source/metadata.py +10 -1
  9. metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
  10. metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
  11. metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
  12. metadata/examples/workflows/bigtable.yaml +32 -0
  13. metadata/generated/antlr/EntityLinkLexer.py +353 -319
  14. metadata/generated/schema/analytics/__init__.py +1 -1
  15. metadata/generated/schema/analytics/basic.py +1 -1
  16. metadata/generated/schema/analytics/reportData.py +1 -1
  17. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  18. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  19. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  20. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  21. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  22. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  23. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  24. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  25. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  26. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  27. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  28. metadata/generated/schema/api/__init__.py +1 -1
  29. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  30. metadata/generated/schema/api/analytics/__init__.py +1 -1
  31. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  32. metadata/generated/schema/api/automations/__init__.py +1 -1
  33. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  34. metadata/generated/schema/api/bulkAssets.py +1 -1
  35. metadata/generated/schema/api/classification/__init__.py +1 -1
  36. metadata/generated/schema/api/classification/createClassification.py +1 -1
  37. metadata/generated/schema/api/classification/createTag.py +1 -1
  38. metadata/generated/schema/api/classification/loadTags.py +1 -1
  39. metadata/generated/schema/api/createBot.py +1 -1
  40. metadata/generated/schema/api/createEventPublisherJob.py +2 -2
  41. metadata/generated/schema/api/createType.py +1 -1
  42. metadata/generated/schema/api/data/__init__.py +1 -1
  43. metadata/generated/schema/api/data/createChart.py +1 -1
  44. metadata/generated/schema/api/data/createContainer.py +1 -1
  45. metadata/generated/schema/api/data/createCustomProperty.py +6 -10
  46. metadata/generated/schema/api/data/createDashboard.py +1 -1
  47. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  48. metadata/generated/schema/api/data/createDatabase.py +1 -1
  49. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  50. metadata/generated/schema/api/data/createGlossary.py +1 -1
  51. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  52. metadata/generated/schema/api/data/createMlModel.py +1 -1
  53. metadata/generated/schema/api/data/createPipeline.py +1 -1
  54. metadata/generated/schema/api/data/createQuery.py +1 -1
  55. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  56. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  57. metadata/generated/schema/api/data/createTable.py +1 -1
  58. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  59. metadata/generated/schema/api/data/createTopic.py +1 -1
  60. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  61. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  62. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  63. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  64. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  65. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  66. metadata/generated/schema/api/docStore/__init__.py +1 -1
  67. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  68. metadata/generated/schema/api/domains/__init__.py +1 -1
  69. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  70. metadata/generated/schema/api/domains/createDomain.py +1 -1
  71. metadata/generated/schema/api/feed/__init__.py +1 -1
  72. metadata/generated/schema/api/feed/closeTask.py +1 -1
  73. metadata/generated/schema/api/feed/createPost.py +1 -1
  74. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  75. metadata/generated/schema/api/feed/createThread.py +1 -1
  76. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  77. metadata/generated/schema/api/feed/threadCount.py +1 -1
  78. metadata/generated/schema/api/lineage/__init__.py +1 -1
  79. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  80. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  81. metadata/generated/schema/api/policies/__init__.py +1 -1
  82. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  83. metadata/generated/schema/api/services/__init__.py +1 -1
  84. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  85. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  86. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  87. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  88. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  89. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  90. metadata/generated/schema/api/services/createSearchService.py +1 -1
  91. metadata/generated/schema/api/services/createStorageService.py +1 -1
  92. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  93. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  94. metadata/generated/schema/api/setOwner.py +1 -1
  95. metadata/generated/schema/api/teams/__init__.py +1 -1
  96. metadata/generated/schema/api/teams/createPersona.py +1 -1
  97. metadata/generated/schema/api/teams/createRole.py +1 -1
  98. metadata/generated/schema/api/teams/createTeam.py +1 -1
  99. metadata/generated/schema/api/teams/createUser.py +1 -1
  100. metadata/generated/schema/api/tests/__init__.py +1 -1
  101. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  102. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  103. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  104. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  105. metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
  106. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  107. metadata/generated/schema/api/voteRequest.py +1 -1
  108. metadata/generated/schema/auth/__init__.py +1 -1
  109. metadata/generated/schema/auth/basicAuth.py +1 -1
  110. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  111. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  112. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  113. metadata/generated/schema/auth/emailRequest.py +1 -1
  114. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  115. metadata/generated/schema/auth/generateToken.py +1 -1
  116. metadata/generated/schema/auth/jwtAuth.py +1 -1
  117. metadata/generated/schema/auth/loginRequest.py +1 -1
  118. metadata/generated/schema/auth/logoutRequest.py +1 -1
  119. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  120. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  121. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  122. metadata/generated/schema/auth/refreshToken.py +1 -1
  123. metadata/generated/schema/auth/registrationRequest.py +1 -1
  124. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  125. metadata/generated/schema/auth/revokeToken.py +1 -1
  126. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  127. metadata/generated/schema/auth/ssoAuth.py +1 -1
  128. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  129. metadata/generated/schema/configuration/__init__.py +1 -1
  130. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  131. metadata/generated/schema/configuration/authConfig.py +1 -1
  132. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  133. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  134. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  135. metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
  136. metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
  137. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  138. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  139. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  140. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  141. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  142. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  143. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  144. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  145. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  146. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  147. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  148. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  149. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  150. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  151. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  152. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  153. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  154. metadata/generated/schema/dataInsight/__init__.py +1 -1
  155. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  156. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  157. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  158. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  159. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  160. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  161. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  162. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  163. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  164. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  165. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  166. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  167. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  168. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  169. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  170. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  171. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  172. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  173. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  174. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  175. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  176. metadata/generated/schema/email/__init__.py +1 -1
  177. metadata/generated/schema/email/emailRequest.py +1 -1
  178. metadata/generated/schema/email/smtpSettings.py +1 -1
  179. metadata/generated/schema/entity/__init__.py +1 -1
  180. metadata/generated/schema/entity/applications/__init__.py +1 -1
  181. metadata/generated/schema/entity/applications/app.py +1 -1
  182. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  183. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  184. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
  185. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  186. metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +1 -1
  187. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -1
  188. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  189. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  190. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  191. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +2 -2
  192. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  193. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +1 -1
  194. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  195. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  196. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  197. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  198. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  199. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  200. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  201. metadata/generated/schema/entity/automations/__init__.py +1 -1
  202. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  203. metadata/generated/schema/entity/automations/workflow.py +1 -1
  204. metadata/generated/schema/entity/bot.py +1 -1
  205. metadata/generated/schema/entity/classification/__init__.py +1 -1
  206. metadata/generated/schema/entity/classification/classification.py +1 -1
  207. metadata/generated/schema/entity/classification/tag.py +1 -1
  208. metadata/generated/schema/entity/data/__init__.py +1 -1
  209. metadata/generated/schema/entity/data/chart.py +1 -1
  210. metadata/generated/schema/entity/data/container.py +1 -1
  211. metadata/generated/schema/entity/data/dashboard.py +1 -1
  212. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  213. metadata/generated/schema/entity/data/database.py +1 -1
  214. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  215. metadata/generated/schema/entity/data/glossary.py +1 -1
  216. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  217. metadata/generated/schema/entity/data/metrics.py +1 -1
  218. metadata/generated/schema/entity/data/mlmodel.py +2 -2
  219. metadata/generated/schema/entity/data/pipeline.py +1 -1
  220. metadata/generated/schema/entity/data/query.py +1 -1
  221. metadata/generated/schema/entity/data/report.py +1 -1
  222. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  223. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  224. metadata/generated/schema/entity/data/table.py +1 -1
  225. metadata/generated/schema/entity/data/topic.py +1 -1
  226. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  227. metadata/generated/schema/entity/docStore/document.py +1 -1
  228. metadata/generated/schema/entity/domains/__init__.py +1 -1
  229. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  230. metadata/generated/schema/entity/domains/domain.py +1 -1
  231. metadata/generated/schema/entity/events/__init__.py +1 -1
  232. metadata/generated/schema/entity/events/webhook.py +1 -1
  233. metadata/generated/schema/entity/feed/__init__.py +1 -1
  234. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  235. metadata/generated/schema/entity/feed/thread.py +1 -1
  236. metadata/generated/schema/entity/policies/__init__.py +1 -1
  237. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  238. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  239. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  240. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  241. metadata/generated/schema/entity/policies/filters.py +1 -1
  242. metadata/generated/schema/entity/policies/policy.py +1 -1
  243. metadata/generated/schema/entity/services/__init__.py +1 -1
  244. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  245. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  246. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  247. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  248. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  249. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  250. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  251. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  252. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  253. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  254. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  255. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  265. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  267. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  268. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
  269. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  270. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  271. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  272. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  273. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  274. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  275. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  276. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  277. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  278. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  279. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  280. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  281. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  282. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  283. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  284. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  285. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  287. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  288. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  289. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  290. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  291. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  292. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  296. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  297. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  300. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  301. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  302. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  303. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  304. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +8 -6
  306. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  310. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  318. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  319. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  320. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +14 -2
  321. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  322. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  323. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +14 -2
  324. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  325. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  326. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  327. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  328. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  329. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
  330. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  331. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  332. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  333. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  334. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  335. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  336. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  337. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  340. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  341. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  343. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  344. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  345. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  346. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  347. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  348. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  349. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  350. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  352. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  353. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  354. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  355. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  356. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  357. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  358. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  359. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  360. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  361. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  362. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  363. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  364. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  365. metadata/generated/schema/entity/services/databaseService.py +4 -1
  366. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  367. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  368. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  369. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  370. metadata/generated/schema/entity/services/messagingService.py +1 -1
  371. metadata/generated/schema/entity/services/metadataService.py +1 -1
  372. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  373. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  374. metadata/generated/schema/entity/services/searchService.py +1 -1
  375. metadata/generated/schema/entity/services/serviceType.py +1 -1
  376. metadata/generated/schema/entity/services/storageService.py +1 -1
  377. metadata/generated/schema/entity/teams/__init__.py +1 -1
  378. metadata/generated/schema/entity/teams/persona.py +1 -1
  379. metadata/generated/schema/entity/teams/role.py +1 -1
  380. metadata/generated/schema/entity/teams/team.py +1 -1
  381. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  382. metadata/generated/schema/entity/teams/user.py +1 -1
  383. metadata/generated/schema/entity/type.py +3 -18
  384. metadata/generated/schema/entity/utils/__init__.py +1 -1
  385. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  386. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  387. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  388. metadata/generated/schema/events/__init__.py +1 -1
  389. metadata/generated/schema/events/alertMetrics.py +1 -1
  390. metadata/generated/schema/events/api/__init__.py +1 -1
  391. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  392. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  393. metadata/generated/schema/events/eventFilterRule.py +1 -1
  394. metadata/generated/schema/events/eventSubscription.py +3 -2
  395. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  396. metadata/generated/schema/events/failedEvent.py +1 -1
  397. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  398. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  399. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  400. metadata/generated/schema/metadataIngestion/application.py +1 -1
  401. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  402. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  403. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  404. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  405. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  406. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  407. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  408. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  409. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  410. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  411. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  412. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  413. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  414. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  415. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  416. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  417. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  418. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  419. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  420. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  421. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  422. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  423. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  424. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  425. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  426. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  427. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  428. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  429. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  430. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  431. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  432. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  433. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  434. metadata/generated/schema/monitoring/__init__.py +1 -1
  435. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  436. metadata/generated/schema/security/__init__.py +1 -1
  437. metadata/generated/schema/security/client/__init__.py +1 -1
  438. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  439. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  440. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  441. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  442. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  443. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  444. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  445. metadata/generated/schema/security/credentials/__init__.py +1 -1
  446. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  447. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  448. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  449. metadata/generated/schema/security/credentials/azureCredentials.py +16 -9
  450. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  451. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  452. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  453. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  454. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  455. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  456. metadata/generated/schema/security/secrets/__init__.py +1 -1
  457. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  458. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  459. metadata/generated/schema/security/secrets/secretsManagerProvider.py +3 -1
  460. metadata/generated/schema/security/securityConfiguration.py +1 -1
  461. metadata/generated/schema/security/ssl/__init__.py +1 -1
  462. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  463. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  464. metadata/generated/schema/settings/__init__.py +1 -1
  465. metadata/generated/schema/settings/settings.py +1 -1
  466. metadata/generated/schema/system/__init__.py +1 -1
  467. metadata/generated/schema/system/entityError.py +1 -1
  468. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  469. metadata/generated/schema/system/indexingError.py +1 -1
  470. metadata/generated/schema/system/ui/__init__.py +1 -1
  471. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  472. metadata/generated/schema/system/ui/page.py +1 -1
  473. metadata/generated/schema/tests/__init__.py +1 -1
  474. metadata/generated/schema/tests/assigned.py +1 -1
  475. metadata/generated/schema/tests/basic.py +1 -1
  476. metadata/generated/schema/tests/customMetric.py +1 -1
  477. metadata/generated/schema/tests/resolved.py +1 -1
  478. metadata/generated/schema/tests/testCase.py +1 -1
  479. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  480. metadata/generated/schema/tests/testDefinition.py +2 -1
  481. metadata/generated/schema/tests/testSuite.py +1 -1
  482. metadata/generated/schema/type/__init__.py +1 -1
  483. metadata/generated/schema/type/auditLog.py +1 -1
  484. metadata/generated/schema/type/basic.py +6 -2
  485. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  486. metadata/generated/schema/type/changeEvent.py +1 -1
  487. metadata/generated/schema/type/changeEventType.py +1 -1
  488. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  489. metadata/generated/schema/type/csvDocumentation.py +1 -1
  490. metadata/generated/schema/type/csvErrorType.py +1 -1
  491. metadata/generated/schema/type/csvFile.py +1 -1
  492. metadata/generated/schema/type/csvImportResult.py +1 -1
  493. metadata/generated/schema/type/customProperties/__init__.py +3 -0
  494. metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
  495. metadata/generated/schema/type/customProperty.py +52 -0
  496. metadata/generated/schema/type/dailyCount.py +1 -1
  497. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  498. metadata/generated/schema/type/entityHistory.py +1 -1
  499. metadata/generated/schema/type/entityLineage.py +1 -1
  500. metadata/generated/schema/type/entityReference.py +1 -1
  501. metadata/generated/schema/type/entityReferenceList.py +1 -1
  502. metadata/generated/schema/type/entityRelationship.py +1 -1
  503. metadata/generated/schema/type/entityUsage.py +1 -1
  504. metadata/generated/schema/type/filterPattern.py +1 -1
  505. metadata/generated/schema/type/function.py +1 -1
  506. metadata/generated/schema/type/include.py +1 -1
  507. metadata/generated/schema/type/jdbcConnection.py +1 -1
  508. metadata/generated/schema/type/lifeCycle.py +1 -1
  509. metadata/generated/schema/type/paging.py +1 -1
  510. metadata/generated/schema/type/profile.py +1 -1
  511. metadata/generated/schema/type/queryParserData.py +1 -1
  512. metadata/generated/schema/type/reaction.py +1 -1
  513. metadata/generated/schema/type/schedule.py +1 -1
  514. metadata/generated/schema/type/schema.py +1 -1
  515. metadata/generated/schema/type/tableQuery.py +1 -1
  516. metadata/generated/schema/type/tableUsageCount.py +1 -1
  517. metadata/generated/schema/type/tagLabel.py +1 -1
  518. metadata/generated/schema/type/usageDetails.py +1 -1
  519. metadata/generated/schema/type/usageRequest.py +1 -1
  520. metadata/generated/schema/type/votes.py +1 -1
  521. metadata/great_expectations/action.py +4 -15
  522. metadata/ingestion/api/steps.py +14 -1
  523. metadata/ingestion/api/topology_runner.py +4 -1
  524. metadata/ingestion/models/custom_properties.py +0 -1
  525. metadata/ingestion/ometa/client.py +6 -0
  526. metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
  527. metadata/ingestion/ometa/ometa_api.py +1 -1
  528. metadata/ingestion/sink/metadata_rest.py +2 -2
  529. metadata/ingestion/source/dashboard/looker/metadata.py +3 -4
  530. metadata/ingestion/source/dashboard/metabase/client.py +4 -0
  531. metadata/ingestion/source/dashboard/metabase/metadata.py +5 -4
  532. metadata/ingestion/source/dashboard/metabase/models.py +2 -2
  533. metadata/ingestion/source/dashboard/tableau/metadata.py +18 -0
  534. metadata/ingestion/source/database/bigquery/helper.py +68 -1
  535. metadata/ingestion/source/database/bigquery/metadata.py +12 -3
  536. metadata/ingestion/source/database/bigquery/queries.py +22 -0
  537. metadata/ingestion/source/database/bigtable/client.py +62 -0
  538. metadata/ingestion/source/database/bigtable/connection.py +116 -0
  539. metadata/ingestion/source/database/bigtable/metadata.py +224 -0
  540. metadata/ingestion/source/database/bigtable/models.py +60 -0
  541. metadata/ingestion/source/database/common_db_source.py +2 -2
  542. metadata/ingestion/source/database/common_nosql_source.py +19 -2
  543. metadata/ingestion/source/database/databricks/metadata.py +132 -46
  544. metadata/ingestion/source/database/databricks/queries.py +3 -4
  545. metadata/ingestion/source/database/dbt/metadata.py +16 -28
  546. metadata/ingestion/source/database/oracle/queries.py +2 -2
  547. metadata/ingestion/source/messaging/common_broker_source.py +9 -7
  548. metadata/ingestion/source/messaging/kafka/connection.py +45 -4
  549. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
  550. metadata/profiler/orm/functions/conn_test.py +1 -0
  551. metadata/profiler/orm/functions/sum.py +1 -0
  552. metadata/profiler/orm/registry.py +1 -0
  553. metadata/profiler/processor/core.py +2 -2
  554. metadata/utils/datalake/datalake_utils.py +7 -1
  555. metadata/utils/execution_time_tracker.py +199 -0
  556. metadata/utils/filters.py +4 -0
  557. metadata/utils/helpers.py +0 -51
  558. metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
  559. metadata/utils/secrets/aws_secrets_manager.py +7 -2
  560. metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
  561. metadata/utils/secrets/azure_kv_secrets_manager.py +148 -0
  562. metadata/utils/secrets/external_secrets_manager.py +25 -3
  563. metadata/utils/secrets/secrets_manager_factory.py +13 -30
  564. metadata/workflow/base.py +4 -0
  565. metadata/workflow/output_handler.py +22 -0
  566. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/METADATA +297 -288
  567. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/RECORD +573 -562
  568. metadata/utils/secrets/client/loader.py +0 -77
  569. /metadata/{utils/secrets/client → ingestion/source/database/bigtable}/__init__.py +0 -0
  570. /metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +0 -0
  571. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/LICENSE +0 -0
  572. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/WHEEL +0 -0
  573. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/entry_points.txt +0 -0
  574. {openmetadata_ingestion-1.3.0.1.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,224 @@
1
+ # Copyright 2024 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
+ Bigtable source methods.
13
+ """
14
+ import traceback
15
+ from typing import Dict, Iterable, List, Optional, Union
16
+
17
+ from google.cloud.bigtable import row_filters
18
+ from google.cloud.bigtable.instance import Instance
19
+ from google.cloud.bigtable.table import Table
20
+
21
+ from metadata.generated.schema.entity.data.table import (
22
+ ConstraintType,
23
+ TableConstraint,
24
+ TableType,
25
+ )
26
+ from metadata.generated.schema.entity.services.connections.database.bigTableConnection import (
27
+ BigTableConnection,
28
+ )
29
+ from metadata.generated.schema.metadataIngestion.workflow import (
30
+ Source as WorkflowSource,
31
+ )
32
+ from metadata.ingestion.api.steps import InvalidSourceException
33
+ from metadata.ingestion.ometa.ometa_api import OpenMetadata
34
+ from metadata.ingestion.source.database.bigtable.client import MultiProjectClient
35
+ from metadata.ingestion.source.database.bigtable.models import Row
36
+ from metadata.ingestion.source.database.common_nosql_source import (
37
+ SAMPLE_SIZE as GLOBAL_SAMPLE_SIZE,
38
+ )
39
+ from metadata.ingestion.source.database.common_nosql_source import CommonNoSQLSource
40
+ from metadata.ingestion.source.database.multi_db_source import MultiDBSource
41
+ from metadata.utils.logger import ingestion_logger
42
+
43
+ logger = ingestion_logger()
44
+
45
+ # BigTable group's its columns in column families. We make an assumption that if the table has a big number of
46
+ # columns, we at least get a sample of the first 100 column families.
47
+ MAX_COLUMN_FAMILIES = 100
48
+ SAMPLES_PER_COLUMN_FAMILY = 100
49
+
50
+ ProjectId = str
51
+ InstanceId = str
52
+ TableId = str
53
+
54
+
55
+ class BigtableSource(CommonNoSQLSource, MultiDBSource):
56
+ """
57
+ Implements the necessary methods to extract database metadata from Google BigTable Source.
58
+ BigTable is a NoSQL database service for handling large amounts of data. Tha mapping is as follows:
59
+ project -> instance -> table -> column_family.column
60
+ (database) (schema)
61
+ For more infor about BigTable: https://cloud.google.com/bigtable/?hl=en
62
+ All data types are registered as bytes.
63
+ """
64
+
65
+ def __init__(self, config: WorkflowSource, metadata: OpenMetadata):
66
+ super().__init__(config, metadata)
67
+ self.client: MultiProjectClient = self.connection_obj
68
+
69
+ # ths instances and tables are cached to avoid making redundant requests to the API.
70
+ self.instances: Dict[ProjectId, Dict[InstanceId, Instance]] = {}
71
+ self.tables: Dict[ProjectId, Dict[InstanceId, Dict[TableId, Table]]] = {}
72
+
73
+ @classmethod
74
+ def create(cls, config_dict, metadata: OpenMetadata):
75
+ config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
76
+ connection: BigTableConnection = config.serviceConnection.__root__.config
77
+ if not isinstance(connection, BigTableConnection):
78
+ raise InvalidSourceException(
79
+ f"Expected BigTableConnection, but got {connection}"
80
+ )
81
+ return cls(config, metadata)
82
+
83
+ def get_configured_database(self) -> Optional[str]:
84
+ """
85
+ This connector uses "virtual databases" in the form of GCP projects.
86
+ The concept of a default project for the GCP client is not useful here because the project ID
87
+ is always an explicit part of the connection. Therefore, this method returns None and the databases
88
+ are resolved using `self.get_database_names`.
89
+ """
90
+ return None
91
+
92
+ def get_database_names(self) -> Iterable[str]:
93
+ return self.get_database_names_raw()
94
+
95
+ def get_database_names_raw(self) -> Iterable[str]:
96
+ yield from self.client.project_ids()
97
+
98
+ def get_schema_name_list(self) -> List[str]:
99
+ project_id = self.context.database
100
+ try:
101
+ # the first element is a list of instances
102
+ # the second element is another collection (seems empty) and I do not know what is its purpose
103
+ instances, _ = self.client.list_instances(project_id=project_id)
104
+ self.instances[project_id] = {
105
+ instance.instance_id: instance for instance in instances
106
+ }
107
+ return list(self.instances[project_id].keys())
108
+ except Exception as err:
109
+ logger.debug(traceback.format_exc())
110
+ logger.error(
111
+ f"Failed to list BigTable instances in project {project_id}: {err}"
112
+ )
113
+ raise
114
+
115
+ def get_table_name_list(self, schema_name: str) -> List[str]:
116
+ project_id = self.context.database
117
+ try:
118
+ instance = self._get_instance(project_id, schema_name)
119
+ if instance is None:
120
+ raise RuntimeError(f"Instance {project_id}/{schema_name} not found.")
121
+ tables = instance.list_tables()
122
+ for table in tables:
123
+ self._set_nested(
124
+ self.tables,
125
+ [project_id, instance.instance_id, table.table_id],
126
+ table,
127
+ )
128
+ return list(self.tables[project_id][schema_name].keys())
129
+ except Exception as err:
130
+ logger.debug(traceback.format_exc())
131
+ # add context to the error message
132
+ logger.error(
133
+ f"Failed to list BigTable table names in {project_id}.{schema_name}: {err}"
134
+ )
135
+ return []
136
+
137
+ def get_table_constraints(
138
+ self, db_name: str, schema_name: str, table_name: str
139
+ ) -> List[TableConstraint]:
140
+ return [
141
+ TableConstraint(
142
+ constraintType=ConstraintType.PRIMARY_KEY, columns=["row_key"]
143
+ )
144
+ ]
145
+
146
+ def get_table_columns_dict(
147
+ self, schema_name: str, table_name: str
148
+ ) -> Union[List[Dict], Dict]:
149
+ project_id = self.context.database
150
+ try:
151
+ table = self._get_table(project_id, schema_name, table_name)
152
+ if table is None:
153
+ raise RuntimeError(
154
+ f"Table {project_id}/{schema_name}/{table_name} not found."
155
+ )
156
+ column_families = table.list_column_families()
157
+ # all BigTable tables have a "row_key" column. Even if there are no records in the table.
158
+ records = [{"row_key": b"row_key"}]
159
+ # In order to get a "good" sample of data, we try to distribute the sampling
160
+ # across multiple column families.
161
+ for column_family in list(column_families.keys())[:MAX_COLUMN_FAMILIES]:
162
+ records.extend(
163
+ self._get_records_for_column_family(
164
+ table, column_family, SAMPLES_PER_COLUMN_FAMILY
165
+ )
166
+ )
167
+ if len(records) >= GLOBAL_SAMPLE_SIZE:
168
+ break
169
+ return records
170
+ except Exception as err:
171
+ logger.debug(traceback.format_exc())
172
+ logger.warning(
173
+ f"Failed to read BigTable rows for [{project_id}.{schema_name}.{table_name}]: {err}"
174
+ )
175
+ return []
176
+
177
+ def get_source_url(
178
+ self,
179
+ database_name: Optional[str] = None,
180
+ schema_name: Optional[str] = None,
181
+ table_name: Optional[str] = None,
182
+ table_type: Optional[TableType] = None,
183
+ ) -> Optional[str]:
184
+ """
185
+ Method to get the source url for a BigTable table
186
+ """
187
+ try:
188
+ if schema_name and table_name:
189
+ return (
190
+ "https://console.cloud.google.com/bigtable/instances/"
191
+ f"{schema_name}/tables/{table_name}/overview?project={database_name}"
192
+ )
193
+ except Exception as exc:
194
+ logger.debug(traceback.format_exc())
195
+ logger.error(f"Unable to get source url: {exc}")
196
+ return None
197
+
198
+ @staticmethod
199
+ def _set_nested(dct: dict, keys: List[str], value: any) -> None:
200
+ for key in keys[:-1]:
201
+ dct = dct.setdefault(key, {})
202
+ dct[keys[-1]] = value
203
+
204
+ @staticmethod
205
+ def _get_records_for_column_family(
206
+ table: Table, column_family: str, limit: int
207
+ ) -> List[Dict]:
208
+ filter_ = row_filters.ColumnRangeFilter(column_family_id=column_family)
209
+ rows = table.read_rows(limit=limit, filter_=filter_)
210
+ return [Row.from_partial_row(row).to_record() for row in rows]
211
+
212
+ def _get_table(
213
+ self, project_id: str, schema_name: str, table_name: str
214
+ ) -> Optional[Table]:
215
+ try:
216
+ return self.tables[project_id][schema_name][table_name]
217
+ except KeyError:
218
+ return None
219
+
220
+ def _get_instance(self, project_id: str, schema_name: str) -> Optional[Instance]:
221
+ try:
222
+ return self.instances[project_id][schema_name]
223
+ except KeyError:
224
+ return None
@@ -0,0 +1,60 @@
1
+ # Copyright 2024 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
+ Bigtable source models.
13
+ """
14
+ from typing import Dict, List
15
+
16
+ from google.cloud.bigtable.row import PartialRowData
17
+ from pydantic import BaseModel
18
+
19
+
20
+ class Value(BaseModel):
21
+ """A Bigtable cell value."""
22
+
23
+ timestamp: int
24
+ value: bytes
25
+
26
+
27
+ class Cell(BaseModel):
28
+ """A Bigtable cell."""
29
+
30
+ values: List[Value]
31
+
32
+
33
+ class Row(BaseModel):
34
+ """A Bigtable row."""
35
+
36
+ cells: Dict[str, Dict[bytes, Cell]]
37
+ row_key: bytes
38
+
39
+ @classmethod
40
+ def from_partial_row(cls, row: PartialRowData):
41
+ cells = {}
42
+ for column_family, cf_cells in row.cells.items():
43
+ cells.setdefault(column_family, {})
44
+ for column, cell in cf_cells.items():
45
+ cells[column_family][column] = Cell(
46
+ values=[Value(timestamp=c.timestamp, value=c.value) for c in cell]
47
+ )
48
+ return cls(cells=cells, row_key=row.row_key)
49
+
50
+ def to_record(self) -> Dict[str, bytes]:
51
+ record = {}
52
+ for column_family, cells in self.cells.items():
53
+ for column, cell in cells.items():
54
+ # Since each cell can have multiple values and the API returns them in descending order
55
+ # from latest to oldest, we only take the latest value. This probably does not matter since
56
+ # all we care about is data types and all data stored in BigTable is of type `bytes`.
57
+ record[f"{column_family}.{column.decode()}"] = cell.values[0].value
58
+ record["row_key"] = self.row_key
59
+
60
+ return record
@@ -62,8 +62,8 @@ from metadata.ingestion.source.database.stored_procedures_mixin import QueryByPr
62
62
  from metadata.ingestion.source.models import TableView
63
63
  from metadata.utils import fqn
64
64
  from metadata.utils.db_utils import get_view_lineage
65
+ from metadata.utils.execution_time_tracker import calculate_execution_time_generator
65
66
  from metadata.utils.filters import filter_by_table
66
- from metadata.utils.helpers import calculate_execution_time_generator
67
67
  from metadata.utils.logger import ingestion_logger
68
68
 
69
69
  logger = ingestion_logger()
@@ -405,7 +405,7 @@ class CommonDbSourceService(
405
405
  """Not Implemented"""
406
406
  yield from []
407
407
 
408
- @calculate_execution_time_generator
408
+ @calculate_execution_time_generator(store=False)
409
409
  def yield_table(
410
410
  self, table_name_and_type: Tuple[str, str]
411
411
  ) -> Iterable[Either[CreateTableRequest]]:
@@ -28,7 +28,11 @@ from metadata.generated.schema.api.data.createTable import CreateTableRequest
28
28
  from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
29
29
  from metadata.generated.schema.entity.data.database import Database
30
30
  from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
31
- from metadata.generated.schema.entity.data.table import Table, TableType
31
+ from metadata.generated.schema.entity.data.table import (
32
+ Table,
33
+ TableConstraint,
34
+ TableType,
35
+ )
32
36
  from metadata.generated.schema.entity.services.ingestionPipelines.status import (
33
37
  StackTraceError,
34
38
  )
@@ -203,6 +207,15 @@ class CommonNoSQLSource(DatabaseServiceSource, ABC):
203
207
  need to be overridden by sources
204
208
  """
205
209
 
210
+ def get_table_constraints(
211
+ self,
212
+ db_name: str,
213
+ schema_name: str,
214
+ table_name: str,
215
+ ) -> Optional[List[TableConstraint]]:
216
+ # pylint: disable=unused-argument
217
+ return None
218
+
206
219
  def yield_table(
207
220
  self, table_name_and_type: Tuple[str, str]
208
221
  ) -> Iterable[Either[CreateTableRequest]]:
@@ -223,7 +236,11 @@ class CommonNoSQLSource(DatabaseServiceSource, ABC):
223
236
  name=table_name,
224
237
  tableType=table_type,
225
238
  columns=columns,
226
- tableConstraints=None,
239
+ tableConstraints=self.get_table_constraints(
240
+ schema_name=schema_name,
241
+ table_name=table_name,
242
+ db_name=self.context.database,
243
+ ),
227
244
  databaseSchema=fqn.build(
228
245
  metadata=self.metadata,
229
246
  entity_type=DatabaseSchema,
@@ -13,7 +13,7 @@
13
13
  import re
14
14
  import traceback
15
15
  from copy import deepcopy
16
- from typing import Iterable, Optional, Tuple
16
+ from typing import Iterable, Optional, Tuple, Union
17
17
 
18
18
  from pyhive.sqlalchemy_hive import _type_map
19
19
  from sqlalchemy import types, util
@@ -66,6 +66,7 @@ logger = ingestion_logger()
66
66
 
67
67
  DATABRICKS_TAG = "DATABRICK TAG"
68
68
  DATABRICKS_TAG_CLASSIFICATION = "DATABRICK TAG CLASSIFICATION"
69
+ DEFAULT_TAG_VALUE = "NONE"
69
70
 
70
71
 
71
72
  class STRUCT(String):
@@ -268,6 +269,10 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
268
269
  super().__init__(config, metadata)
269
270
  self.is_older_version = False
270
271
  self._init_version()
272
+ self.catalog_tags = {}
273
+ self.schema_tags = {}
274
+ self.table_tags = {}
275
+ self.column_tags = {}
271
276
 
272
277
  def _init_version(self):
273
278
  try:
@@ -314,10 +319,103 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
314
319
  else:
315
320
  yield DEFAULT_DATABASE
316
321
 
322
+ def _clear_tag_cache(self) -> None:
323
+ """
324
+ Method to clean any existing tags available in memory
325
+ """
326
+ self.catalog_tags.clear()
327
+ self.table_tags.clear()
328
+ self.schema_tags.clear()
329
+ self.column_tags.clear()
330
+
331
+ def _add_to_tag_cache(
332
+ self, tag_dict: dict, key: Union[str, Tuple], value: Tuple[str, str]
333
+ ):
334
+ if tag_dict.get(key):
335
+ tag_dict.get(key).append(value)
336
+ else:
337
+ tag_dict[key] = [value]
338
+
339
+ def populate_tags_cache(self, database_name: str) -> None:
340
+ """
341
+ Method to fetch all the tags and populate the relevant caches
342
+ """
343
+ self._clear_tag_cache()
344
+ if self.source_config.includeTags is False:
345
+ return
346
+ try:
347
+ tags = self.connection.execute(
348
+ DATABRICKS_GET_CATALOGS_TAGS.format(database_name=database_name)
349
+ )
350
+
351
+ for tag in tags:
352
+ self._add_to_tag_cache(
353
+ self.catalog_tags,
354
+ tag.catalog_name,
355
+ # tag value is an optional field, if tag value is not available use default tag value
356
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
357
+ )
358
+ except Exception as exc:
359
+ logger.debug(f"Failed to fetch catalog tags due to - {exc}")
360
+
361
+ try:
362
+ tags = self.connection.execute(
363
+ DATABRICKS_GET_SCHEMA_TAGS.format(database_name=database_name)
364
+ )
365
+ for tag in tags:
366
+ self._add_to_tag_cache(
367
+ self.schema_tags,
368
+ (tag.catalog_name, tag.schema_name),
369
+ # tag value is an optional field, if tag value is not available use default tag value
370
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
371
+ )
372
+ except Exception as exc:
373
+ logger.debug(f"Failed to fetch schema tags due to - {exc}")
374
+
375
+ try:
376
+ tags = self.connection.execute(
377
+ DATABRICKS_GET_TABLE_TAGS.format(database_name=database_name)
378
+ )
379
+ for tag in tags:
380
+ self._add_to_tag_cache(
381
+ self.table_tags,
382
+ (tag.catalog_name, tag.schema_name, tag.table_name),
383
+ # tag value is an optional field, if tag value is not available use default tag value
384
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
385
+ )
386
+ except Exception as exc:
387
+ logger.debug(f"Failed to fetch table tags due to - {exc}")
388
+
389
+ try:
390
+ tags = self.connection.execute(
391
+ DATABRICKS_GET_COLUMN_TAGS.format(database_name=database_name)
392
+ )
393
+ for tag in tags:
394
+ tag_table_id = (tag.catalog_name, tag.schema_name, tag.table_name)
395
+ if self.column_tags.get(tag_table_id):
396
+ self._add_to_tag_cache(
397
+ self.column_tags.get(tag_table_id),
398
+ tag.column_name,
399
+ # tag value is an optional field, if tag value is not available use default tag value
400
+ (tag.tag_name, tag.tag_value or DEFAULT_TAG_VALUE),
401
+ )
402
+ else:
403
+ self.column_tags[tag_table_id] = {
404
+ tag.column_name: [
405
+ (
406
+ tag.tag_name,
407
+ tag.tag_value or DEFAULT_TAG_VALUE,
408
+ )
409
+ ]
410
+ }
411
+ except Exception as exc:
412
+ logger.debug(f"Failed to fetch column tags due to - {exc}")
413
+
317
414
  def get_database_names(self) -> Iterable[str]:
318
415
  configured_catalog = self.service_connection.catalog
319
416
  if configured_catalog:
320
417
  self.set_inspector(database_name=configured_catalog)
418
+ self.populate_tags_cache(database_name=configured_catalog)
321
419
  yield configured_catalog
322
420
  else:
323
421
  for new_catalog in self.get_database_names_raw():
@@ -337,6 +435,7 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
337
435
  continue
338
436
  try:
339
437
  self.set_inspector(database_name=new_catalog)
438
+ self.populate_tags_cache(database_name=new_catalog)
340
439
  yield new_catalog
341
440
  except Exception as exc:
342
441
  logger.error(traceback.format_exc())
@@ -361,10 +460,8 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
361
460
  Method to yield database tags
362
461
  """
363
462
  try:
364
- tags = self.connection.execute(
365
- DATABRICKS_GET_CATALOGS_TAGS.format(database_name=database_name)
366
- )
367
- for tag in tags:
463
+ catalog_tags = self.catalog_tags.get(database_name, [])
464
+ for tag_name, tag_value in catalog_tags:
368
465
  yield from get_ometa_tag_and_classification(
369
466
  tag_fqn=fqn.build(
370
467
  self.metadata,
@@ -372,8 +469,8 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
372
469
  service_name=self.context.database_service,
373
470
  database_name=database_name,
374
471
  ),
375
- tags=[tag.tag_value],
376
- classification_name=tag.tag_name,
472
+ tags=[tag_value],
473
+ classification_name=tag_name,
377
474
  tag_description=DATABRICKS_TAG,
378
475
  classification_description=DATABRICKS_TAG_CLASSIFICATION,
379
476
  )
@@ -394,12 +491,8 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
394
491
  Method to yield schema tags
395
492
  """
396
493
  try:
397
- tags = self.connection.execute(
398
- DATABRICKS_GET_SCHEMA_TAGS.format(
399
- database_name=self.context.database, schema_name=schema_name
400
- )
401
- )
402
- for tag in tags:
494
+ schema_tags = self.schema_tags.get((self.context.database, schema_name), [])
495
+ for tag_name, tag_value in schema_tags:
403
496
  yield from get_ometa_tag_and_classification(
404
497
  tag_fqn=fqn.build(
405
498
  self.metadata,
@@ -408,8 +501,8 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
408
501
  database_name=self.context.database,
409
502
  schema_name=schema_name,
410
503
  ),
411
- tags=[tag.tag_value],
412
- classification_name=tag.tag_name,
504
+ tags=[tag_value],
505
+ classification_name=tag_name,
413
506
  tag_description=DATABRICKS_TAG,
414
507
  classification_description=DATABRICKS_TAG_CLASSIFICATION,
415
508
  )
@@ -428,14 +521,10 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
428
521
  ) -> Iterable[Either[OMetaTagAndClassification]]:
429
522
  table_name, _ = table_name_and_type
430
523
  try:
431
- table_tags = self.connection.execute(
432
- DATABRICKS_GET_TABLE_TAGS.format(
433
- database_name=self.context.database,
434
- schema_name=self.context.database_schema,
435
- table_name=table_name,
436
- )
524
+ table_tags = self.table_tags.get(
525
+ (self.context.database, self.context.database_schema, table_name), []
437
526
  )
438
- for tag in table_tags:
527
+ for tag_name, tag_value in table_tags:
439
528
  yield from get_ometa_tag_and_classification(
440
529
  tag_fqn=fqn.build(
441
530
  self.metadata,
@@ -445,35 +534,32 @@ class DatabricksSource(CommonDbSourceService, MultiDBSource):
445
534
  schema_name=self.context.database_schema,
446
535
  table_name=table_name,
447
536
  ),
448
- tags=[tag.tag_value],
449
- classification_name=tag.tag_name,
537
+ tags=[tag_value],
538
+ classification_name=tag_name,
450
539
  tag_description=DATABRICKS_TAG,
451
540
  classification_description=DATABRICKS_TAG_CLASSIFICATION,
452
541
  )
453
542
 
454
- column_tags = self.connection.execute(
455
- DATABRICKS_GET_COLUMN_TAGS.format(
456
- database_name=self.context.database,
457
- schema_name=self.context.database_schema,
458
- table_name=table_name,
459
- )
543
+ column_tags = self.column_tags.get(
544
+ (self.context.database, self.context.database_schema, table_name), {}
460
545
  )
461
- for tag in column_tags:
462
- yield from get_ometa_tag_and_classification(
463
- tag_fqn=fqn.build(
464
- self.metadata,
465
- Column,
466
- service_name=self.context.database_service,
467
- database_name=self.context.database,
468
- schema_name=self.context.database_schema,
469
- table_name=table_name,
470
- column_name=tag.column_name,
471
- ),
472
- tags=[tag.tag_value],
473
- classification_name=tag.tag_name,
474
- tag_description=DATABRICKS_TAG,
475
- classification_description=DATABRICKS_TAG_CLASSIFICATION,
476
- )
546
+ for column_name, tags in column_tags.items():
547
+ for tag_name, tag_value in tags or []:
548
+ yield from get_ometa_tag_and_classification(
549
+ tag_fqn=fqn.build(
550
+ self.metadata,
551
+ Column,
552
+ service_name=self.context.database_service,
553
+ database_name=self.context.database,
554
+ schema_name=self.context.database_schema,
555
+ table_name=table_name,
556
+ column_name=column_name,
557
+ ),
558
+ tags=[tag_value],
559
+ classification_name=tag_name,
560
+ tag_description=DATABRICKS_TAG,
561
+ classification_description=DATABRICKS_TAG_CLASSIFICATION,
562
+ )
477
563
 
478
564
  except Exception as exc:
479
565
  yield Either(
@@ -37,8 +37,7 @@ DATABRICKS_GET_SCHEMA_TAGS = textwrap.dedent(
37
37
  """
38
38
  SELECT
39
39
  *
40
- FROM {database_name}.information_schema.schema_tags
41
- WHERE schema_name='{schema_name}'"""
40
+ FROM {database_name}.information_schema.schema_tags"""
42
41
  )
43
42
 
44
43
  DATABRICKS_GET_TABLE_TAGS = textwrap.dedent(
@@ -46,7 +45,7 @@ DATABRICKS_GET_TABLE_TAGS = textwrap.dedent(
46
45
  SELECT
47
46
  *
48
47
  FROM {database_name}.information_schema.table_tags
49
- WHERE schema_name = '{schema_name}' AND table_name = '{table_name}';"""
48
+ """
50
49
  )
51
50
 
52
51
  DATABRICKS_GET_COLUMN_TAGS = textwrap.dedent(
@@ -54,5 +53,5 @@ DATABRICKS_GET_COLUMN_TAGS = textwrap.dedent(
54
53
  SELECT
55
54
  *
56
55
  FROM {database_name}.information_schema.column_tags
57
- WHERE schema_name='{schema_name}' AND table_name='{table_name}';"""
56
+ """
58
57
  )