openmetadata-ingestion 1.8.10.0__py3-none-any.whl → 1.9.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 (845) hide show
  1. metadata/__init__.py +2 -0
  2. metadata/data_quality/validations/models.py +2 -2
  3. metadata/data_quality/validations/runtime_param_setter/base_diff_params_setter.py +78 -5
  4. metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +10 -63
  5. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +4 -1
  6. metadata/examples/workflows/grafana.yaml +115 -0
  7. metadata/generated/schema/analytics/__init__.py +1 -1
  8. metadata/generated/schema/analytics/basic.py +1 -1
  9. metadata/generated/schema/analytics/reportData.py +1 -1
  10. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  11. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  12. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  13. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  14. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  15. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  16. metadata/generated/schema/analytics/webAnalyticEvent.py +5 -5
  17. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  18. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  19. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  20. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  21. metadata/generated/schema/api/__init__.py +1 -1
  22. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  23. metadata/generated/schema/api/addTagToAssetsRequest.py +1 -1
  24. metadata/generated/schema/api/analytics/__init__.py +1 -1
  25. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +6 -5
  26. metadata/generated/schema/api/automations/__init__.py +1 -1
  27. metadata/generated/schema/api/automations/createWorkflow.py +6 -5
  28. metadata/generated/schema/api/bulkAssets.py +1 -1
  29. metadata/generated/schema/api/classification/__init__.py +1 -1
  30. metadata/generated/schema/api/classification/createClassification.py +6 -5
  31. metadata/generated/schema/api/classification/createTag.py +4 -4
  32. metadata/generated/schema/api/classification/loadTags.py +1 -1
  33. metadata/generated/schema/api/createBot.py +5 -5
  34. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  35. metadata/generated/schema/api/createType.py +6 -5
  36. metadata/generated/schema/api/data/__init__.py +1 -1
  37. metadata/generated/schema/api/data/createAPICollection.py +4 -4
  38. metadata/generated/schema/api/data/createAPIEndpoint.py +4 -4
  39. metadata/generated/schema/api/data/createChart.py +12 -4
  40. metadata/generated/schema/api/data/createContainer.py +4 -4
  41. metadata/generated/schema/api/data/createCustomProperty.py +1 -1
  42. metadata/generated/schema/api/data/createDashboard.py +4 -4
  43. metadata/generated/schema/api/data/createDashboardDataModel.py +4 -4
  44. metadata/generated/schema/api/data/createDataContract.py +11 -5
  45. metadata/generated/schema/api/data/createDatabase.py +4 -4
  46. metadata/generated/schema/api/data/createDatabaseSchema.py +4 -4
  47. metadata/generated/schema/api/data/createDirectory.py +105 -0
  48. metadata/generated/schema/api/data/createFile.py +104 -0
  49. metadata/generated/schema/api/data/createGlossary.py +4 -4
  50. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  51. metadata/generated/schema/api/data/createMetric.py +4 -4
  52. metadata/generated/schema/api/data/createMlModel.py +4 -4
  53. metadata/generated/schema/api/data/createPipeline.py +4 -4
  54. metadata/generated/schema/api/data/createQuery.py +5 -4
  55. metadata/generated/schema/api/data/createQueryCostRecord.py +1 -1
  56. metadata/generated/schema/api/data/createSearchIndex.py +4 -4
  57. metadata/generated/schema/api/data/createSpreadsheet.py +111 -0
  58. metadata/generated/schema/api/data/createStoredProcedure.py +4 -4
  59. metadata/generated/schema/api/data/createTable.py +5 -4
  60. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  61. metadata/generated/schema/api/data/createTopic.py +5 -4
  62. metadata/generated/schema/api/data/createWorksheet.py +105 -0
  63. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  64. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  65. metadata/generated/schema/api/data/updateColumn.py +1 -1
  66. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  67. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +5 -4
  68. metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
  69. metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
  70. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  71. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +5 -5
  72. metadata/generated/schema/api/docStore/__init__.py +1 -1
  73. metadata/generated/schema/api/docStore/createDocument.py +6 -5
  74. metadata/generated/schema/api/domains/__init__.py +1 -1
  75. metadata/generated/schema/api/domains/createDataProduct.py +4 -4
  76. metadata/generated/schema/api/domains/createDomain.py +1 -1
  77. metadata/generated/schema/api/entityRelationship/__init__.py +3 -0
  78. metadata/generated/schema/api/entityRelationship/entityRelationshipDirection.py +12 -0
  79. metadata/generated/schema/api/entityRelationship/esEntityRelationshipData.py +57 -0
  80. metadata/generated/schema/api/entityRelationship/relationshipRef.py +32 -0
  81. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipRequest.py +47 -0
  82. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipResult.py +47 -0
  83. metadata/generated/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.py +20 -0
  84. metadata/generated/schema/api/feed/__init__.py +1 -1
  85. metadata/generated/schema/api/feed/closeTask.py +1 -1
  86. metadata/generated/schema/api/feed/createPost.py +1 -1
  87. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  88. metadata/generated/schema/api/feed/createThread.py +6 -2
  89. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  90. metadata/generated/schema/api/feed/threadCount.py +1 -1
  91. metadata/generated/schema/api/governance/__init__.py +1 -1
  92. metadata/generated/schema/api/governance/createWorkflowDefinition.py +1 -1
  93. metadata/generated/schema/api/governance/createWorkflowInstanceState.py +1 -1
  94. metadata/generated/schema/api/lineage/__init__.py +1 -1
  95. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  96. metadata/generated/schema/api/lineage/esLineageData.py +4 -1
  97. metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
  98. metadata/generated/schema/api/lineage/nodeInformation.py +4 -1
  99. metadata/generated/schema/api/lineage/searchLineageRequest.py +1 -1
  100. metadata/generated/schema/api/lineage/searchLineageResult.py +1 -1
  101. metadata/generated/schema/api/mcp/__init__.py +1 -1
  102. metadata/generated/schema/api/mcp/mcpToolDefinition.py +1 -1
  103. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  104. metadata/generated/schema/api/policies/__init__.py +1 -1
  105. metadata/generated/schema/api/policies/createPolicy.py +6 -5
  106. metadata/generated/schema/api/scim/__init__.py +1 -1
  107. metadata/generated/schema/api/scim/scimGroup.py +1 -1
  108. metadata/generated/schema/api/scim/scimPatchOp.py +1 -1
  109. metadata/generated/schema/api/scim/scimUser.py +1 -1
  110. metadata/generated/schema/api/search/__init__.py +1 -1
  111. metadata/generated/schema/api/search/previewSearchRequest.py +1 -1
  112. metadata/generated/schema/api/services/__init__.py +1 -1
  113. metadata/generated/schema/api/services/createApiService.py +4 -4
  114. metadata/generated/schema/api/services/createDashboardService.py +4 -4
  115. metadata/generated/schema/api/services/createDatabaseService.py +4 -4
  116. metadata/generated/schema/api/services/createDriveService.py +58 -0
  117. metadata/generated/schema/api/services/createMessagingService.py +4 -4
  118. metadata/generated/schema/api/services/createMetadataService.py +5 -4
  119. metadata/generated/schema/api/services/createMlModelService.py +4 -4
  120. metadata/generated/schema/api/services/createPipelineService.py +4 -4
  121. metadata/generated/schema/api/services/createSearchService.py +4 -4
  122. metadata/generated/schema/api/services/createSecurityService.py +4 -4
  123. metadata/generated/schema/api/services/createStorageService.py +4 -4
  124. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  125. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +13 -5
  126. metadata/generated/schema/api/setOwner.py +1 -1
  127. metadata/generated/schema/api/teams/__init__.py +1 -1
  128. metadata/generated/schema/api/teams/createPersona.py +12 -4
  129. metadata/generated/schema/api/teams/createRole.py +5 -4
  130. metadata/generated/schema/api/teams/createTeam.py +1 -1
  131. metadata/generated/schema/api/teams/createUser.py +1 -1
  132. metadata/generated/schema/api/tests/__init__.py +1 -1
  133. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  134. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  135. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  136. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  137. metadata/generated/schema/api/tests/createTestCaseResult.py +1 -1
  138. metadata/generated/schema/api/tests/createTestDefinition.py +5 -4
  139. metadata/generated/schema/api/tests/createTestSuite.py +13 -5
  140. metadata/generated/schema/api/tests/moveGlossaryTermRequest.py +27 -0
  141. metadata/generated/schema/api/validateGlossaryTagsRequest.py +1 -1
  142. metadata/generated/schema/api/voteRequest.py +1 -1
  143. metadata/generated/schema/auth/__init__.py +1 -1
  144. metadata/generated/schema/auth/basicAuth.py +1 -1
  145. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  146. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  147. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  148. metadata/generated/schema/auth/emailRequest.py +1 -1
  149. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  150. metadata/generated/schema/auth/generateToken.py +1 -1
  151. metadata/generated/schema/auth/jwtAuth.py +1 -1
  152. metadata/generated/schema/auth/loginRequest.py +1 -1
  153. metadata/generated/schema/auth/logoutRequest.py +1 -1
  154. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  155. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  156. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  157. metadata/generated/schema/auth/refreshToken.py +1 -1
  158. metadata/generated/schema/auth/registrationRequest.py +1 -1
  159. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  160. metadata/generated/schema/auth/revokeToken.py +1 -1
  161. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  162. metadata/generated/schema/auth/ssoAuth.py +1 -1
  163. metadata/generated/schema/auth/supportToken.py +1 -1
  164. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  165. metadata/generated/schema/configuration/__init__.py +1 -1
  166. metadata/generated/schema/configuration/aiPlatformConfiguration.py +58 -0
  167. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  168. metadata/generated/schema/configuration/assetCertificationSettings.py +1 -1
  169. metadata/generated/schema/configuration/authConfig.py +1 -1
  170. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  171. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  172. metadata/generated/schema/configuration/cacheConfiguration.py +137 -0
  173. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  174. metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
  175. metadata/generated/schema/configuration/elasticSearchConfiguration.py +18 -1
  176. metadata/generated/schema/configuration/entityRulesSettings.py +24 -0
  177. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  178. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  179. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  180. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  181. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  182. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  183. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  184. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  185. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  186. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  187. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  188. metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
  189. metadata/generated/schema/configuration/lineageSettings.py +1 -1
  190. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  191. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  192. metadata/generated/schema/configuration/openMetadataBaseUrlConfiguration.py +1 -1
  193. metadata/generated/schema/configuration/opertionalConfiguration.py +1 -1
  194. metadata/generated/schema/configuration/opsConfig.py +1 -1
  195. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  196. metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
  197. metadata/generated/schema/configuration/searchSettings.py +1 -1
  198. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  199. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  200. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  201. metadata/generated/schema/configuration/themeConfiguration.py +1 -1
  202. metadata/generated/schema/configuration/uiThemePreference.py +1 -1
  203. metadata/generated/schema/configuration/workflowSettings.py +1 -1
  204. metadata/generated/schema/dataInsight/__init__.py +1 -1
  205. metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
  206. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
  207. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
  208. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
  209. metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
  210. metadata/generated/schema/dataInsight/custom/lineChart.py +5 -1
  211. metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
  212. metadata/generated/schema/dataInsight/dataInsightChart.py +5 -5
  213. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  214. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  215. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  216. metadata/generated/schema/dataInsight/kpi/kpi.py +4 -4
  217. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  218. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  219. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  220. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  221. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  222. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  223. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  224. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  225. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  226. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  227. metadata/generated/schema/email/__init__.py +1 -1
  228. metadata/generated/schema/email/emailRequest.py +1 -1
  229. metadata/generated/schema/email/emailTemplate.py +1 -1
  230. metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
  231. metadata/generated/schema/email/smtpSettings.py +1 -1
  232. metadata/generated/schema/email/templateValidationReponse.py +1 -1
  233. metadata/generated/schema/entity/__init__.py +1 -1
  234. metadata/generated/schema/entity/applications/__init__.py +1 -1
  235. metadata/generated/schema/entity/applications/app.py +4 -4
  236. metadata/generated/schema/entity/applications/appExtension.py +1 -1
  237. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  238. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  239. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
  240. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  241. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  242. metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +1 -1
  243. metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.py +1 -1
  244. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
  245. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +5 -5
  246. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
  247. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
  248. metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.py +1 -1
  249. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
  250. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +4 -4
  251. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
  252. metadata/generated/schema/entity/applications/configuration/external/automator/propagationStopConfig.py +2 -2
  253. metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +1 -1
  254. metadata/generated/schema/entity/applications/configuration/external/automator/removeDataProductAction.py +1 -1
  255. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
  256. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
  257. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
  258. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
  259. metadata/generated/schema/entity/applications/configuration/external/automator/removeTestCaseAction.py +1 -1
  260. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
  261. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
  262. metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
  263. metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +1 -1
  264. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  265. metadata/generated/schema/entity/applications/configuration/internal/autoPilotAppConfig.py +1 -1
  266. metadata/generated/schema/entity/applications/configuration/internal/collateAIQualityAgentAppConfig.py +1 -1
  267. metadata/generated/schema/entity/applications/configuration/internal/collateAITierAgentAppConfig.py +1 -1
  268. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  269. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  270. metadata/generated/schema/entity/applications/configuration/internal/dataRetentionConfiguration.py +1 -1
  271. metadata/generated/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.py +1 -1
  272. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
  273. metadata/generated/schema/entity/applications/configuration/private/__init__.py +1 -1
  274. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  275. metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
  276. metadata/generated/schema/entity/applications/configuration/private/internal/__init__.py +1 -1
  277. metadata/generated/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.py +1 -1
  278. metadata/generated/schema/entity/applications/configuration/private/limits.py +1 -1
  279. metadata/generated/schema/entity/applications/createAppRequest.py +6 -5
  280. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  281. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  282. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  283. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +5 -11
  284. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +5 -4
  285. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  286. metadata/generated/schema/entity/automations/__init__.py +1 -1
  287. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  288. metadata/generated/schema/entity/automations/workflow.py +5 -5
  289. metadata/generated/schema/entity/bot.py +5 -5
  290. metadata/generated/schema/entity/classification/__init__.py +1 -1
  291. metadata/generated/schema/entity/classification/classification.py +5 -5
  292. metadata/generated/schema/entity/classification/tag.py +4 -4
  293. metadata/generated/schema/entity/data/__init__.py +1 -1
  294. metadata/generated/schema/entity/data/apiCollection.py +4 -4
  295. metadata/generated/schema/entity/data/apiEndpoint.py +4 -4
  296. metadata/generated/schema/entity/data/chart.py +16 -4
  297. metadata/generated/schema/entity/data/container.py +4 -4
  298. metadata/generated/schema/entity/data/dashboard.py +4 -4
  299. metadata/generated/schema/entity/data/dashboardDataModel.py +4 -4
  300. metadata/generated/schema/entity/data/dataContract.py +40 -53
  301. metadata/generated/schema/entity/data/database.py +4 -4
  302. metadata/generated/schema/entity/data/databaseSchema.py +4 -4
  303. metadata/generated/schema/entity/data/directory.py +173 -0
  304. metadata/generated/schema/entity/data/file.py +184 -0
  305. metadata/generated/schema/entity/data/glossary.py +4 -4
  306. metadata/generated/schema/entity/data/glossaryTerm.py +4 -4
  307. metadata/generated/schema/entity/data/metric.py +4 -5
  308. metadata/generated/schema/entity/data/mlmodel.py +4 -4
  309. metadata/generated/schema/entity/data/pipeline.py +4 -4
  310. metadata/generated/schema/entity/data/query.py +4 -4
  311. metadata/generated/schema/entity/data/queryCostRecord.py +1 -1
  312. metadata/generated/schema/entity/data/queryCostSearchResult.py +1 -1
  313. metadata/generated/schema/entity/data/report.py +4 -4
  314. metadata/generated/schema/entity/data/searchIndex.py +4 -4
  315. metadata/generated/schema/entity/data/spreadsheet.py +209 -0
  316. metadata/generated/schema/entity/data/storedProcedure.py +4 -4
  317. metadata/generated/schema/entity/data/table.py +50 -4
  318. metadata/generated/schema/entity/data/topic.py +4 -4
  319. metadata/generated/schema/entity/data/worksheet.py +168 -0
  320. metadata/generated/schema/entity/datacontract/__init__.py +3 -0
  321. metadata/generated/schema/entity/datacontract/dataContractResult.py +74 -0
  322. metadata/generated/schema/entity/datacontract/qualityValidation.py +31 -0
  323. metadata/generated/schema/entity/datacontract/schemaValidation.py +31 -0
  324. metadata/generated/schema/entity/datacontract/semanticsValidation.py +39 -0
  325. metadata/generated/schema/entity/datacontract/slaValidation.py +32 -0
  326. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  327. metadata/generated/schema/entity/docStore/document.py +5 -5
  328. metadata/generated/schema/entity/domains/__init__.py +1 -1
  329. metadata/generated/schema/entity/domains/dataProduct.py +5 -5
  330. metadata/generated/schema/entity/domains/domain.py +1 -1
  331. metadata/generated/schema/entity/events/__init__.py +1 -1
  332. metadata/generated/schema/entity/events/webhook.py +1 -1
  333. metadata/generated/schema/entity/feed/__init__.py +1 -1
  334. metadata/generated/schema/entity/feed/assets.py +1 -1
  335. metadata/generated/schema/entity/feed/customProperty.py +1 -1
  336. metadata/generated/schema/entity/feed/description.py +1 -1
  337. metadata/generated/schema/entity/feed/domain.py +8 -8
  338. metadata/generated/schema/entity/feed/entityInfo.py +1 -1
  339. metadata/generated/schema/entity/feed/owner.py +1 -1
  340. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  341. metadata/generated/schema/entity/feed/tag.py +1 -1
  342. metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
  343. metadata/generated/schema/entity/feed/thread.py +4 -3
  344. metadata/generated/schema/entity/policies/__init__.py +1 -1
  345. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  346. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  347. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  348. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  349. metadata/generated/schema/entity/policies/filters.py +1 -1
  350. metadata/generated/schema/entity/policies/policy.py +4 -4
  351. metadata/generated/schema/entity/services/__init__.py +1 -1
  352. metadata/generated/schema/entity/services/apiService.py +4 -4
  353. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  354. metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
  355. metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
  356. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  357. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  358. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  359. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  360. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  361. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  362. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  363. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/dashboard/grafanaConnection.py +77 -0
  365. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  367. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  368. metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
  369. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  370. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  371. metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
  372. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  373. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
  374. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
  375. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
  376. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
  377. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
  378. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  379. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  380. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  381. metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +1 -1
  382. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  383. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  384. metadata/generated/schema/entity/services/connections/dashboard/thoughtSpotConnection.py +1 -1
  385. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  386. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  387. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  388. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  389. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
  390. metadata/generated/schema/entity/services/connections/database/cassandra/__init__.py +1 -1
  391. metadata/generated/schema/entity/services/connections/database/cassandra/cloudConfig.py +1 -1
  392. metadata/generated/schema/entity/services/connections/database/cassandraConnection.py +1 -1
  393. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  394. metadata/generated/schema/entity/services/connections/database/cockroachConnection.py +1 -1
  395. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  396. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
  397. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  398. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  399. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  400. metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +1 -1
  401. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  402. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  403. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  404. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  405. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  406. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  407. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  408. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  409. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  410. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  411. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
  412. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
  413. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
  414. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  415. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  416. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  417. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  418. metadata/generated/schema/entity/services/connections/database/epicConnection.py +80 -0
  419. metadata/generated/schema/entity/services/connections/database/exasolConnection.py +1 -1
  420. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  421. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  422. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  423. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  424. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  425. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  426. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  427. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  428. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  429. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  430. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  431. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  432. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  433. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  434. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  435. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  436. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  437. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  438. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  439. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  440. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  441. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  442. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
  443. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  444. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
  445. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
  446. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  447. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  448. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  449. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  450. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  451. metadata/generated/schema/entity/services/connections/database/ssasConnection.py +1 -1
  452. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
  453. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
  454. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  455. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  456. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  457. metadata/generated/schema/entity/services/connections/drive/__init__.py +3 -0
  458. metadata/generated/schema/entity/services/connections/drive/customDriveConnection.py +45 -0
  459. metadata/generated/schema/entity/services/connections/drive/googleDriveConnection.py +82 -0
  460. metadata/generated/schema/entity/services/connections/drive/sharePointConnection.py +79 -0
  461. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  462. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  463. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  464. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  465. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  466. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  467. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  468. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  469. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  470. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
  471. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  472. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  473. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  474. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  475. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  476. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  477. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  478. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  479. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  480. metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
  481. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  482. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  483. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  484. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  485. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  486. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  487. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  488. metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
  489. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
  490. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  491. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  492. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
  493. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  494. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
  495. metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
  496. metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
  497. metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
  498. metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
  499. metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
  500. metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +1 -1
  501. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  502. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
  503. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  504. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  505. metadata/generated/schema/entity/services/connections/pipeline/ssisConnection.py +1 -1
  506. metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
  507. metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.py +1 -1
  508. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  509. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  510. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  511. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  512. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  513. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  514. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  515. metadata/generated/schema/entity/services/connections/security/__init__.py +1 -1
  516. metadata/generated/schema/entity/services/connections/security/ranger/__init__.py +1 -1
  517. metadata/generated/schema/entity/services/connections/security/ranger/basicAuth.py +1 -1
  518. metadata/generated/schema/entity/services/connections/security/rangerConnection.py +1 -1
  519. metadata/generated/schema/entity/services/connections/serviceConnection.py +4 -1
  520. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  521. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  522. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  523. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  524. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  525. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +5 -5
  526. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  527. metadata/generated/schema/entity/services/dashboardService.py +7 -4
  528. metadata/generated/schema/entity/services/databaseService.py +7 -4
  529. metadata/generated/schema/entity/services/driveService.py +143 -0
  530. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  531. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +11 -4
  532. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  533. metadata/generated/schema/entity/services/ingestionPipelines/reverseIngestionResponse.py +1 -1
  534. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  535. metadata/generated/schema/entity/services/messagingService.py +4 -4
  536. metadata/generated/schema/entity/services/metadataService.py +4 -4
  537. metadata/generated/schema/entity/services/mlmodelService.py +4 -4
  538. metadata/generated/schema/entity/services/pipelineService.py +4 -4
  539. metadata/generated/schema/entity/services/searchService.py +4 -4
  540. metadata/generated/schema/entity/services/securityService.py +4 -4
  541. metadata/generated/schema/entity/services/serviceType.py +2 -1
  542. metadata/generated/schema/entity/services/storageService.py +4 -4
  543. metadata/generated/schema/entity/teams/__init__.py +1 -1
  544. metadata/generated/schema/entity/teams/persona.py +11 -4
  545. metadata/generated/schema/entity/teams/role.py +5 -5
  546. metadata/generated/schema/entity/teams/team.py +1 -1
  547. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  548. metadata/generated/schema/entity/teams/user.py +21 -3
  549. metadata/generated/schema/entity/type.py +5 -11
  550. metadata/generated/schema/entity/utils/__init__.py +1 -1
  551. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  552. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  553. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  554. metadata/generated/schema/events/__init__.py +1 -1
  555. metadata/generated/schema/events/alertMetrics.py +1 -1
  556. metadata/generated/schema/events/api/__init__.py +1 -1
  557. metadata/generated/schema/events/api/createEventSubscription.py +5 -4
  558. metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +1 -1
  559. metadata/generated/schema/events/api/eventsRecord.py +1 -1
  560. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
  561. metadata/generated/schema/events/api/typedEvent.py +1 -1
  562. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  563. metadata/generated/schema/events/eventFilterRule.py +1 -1
  564. metadata/generated/schema/events/eventSubscription.py +5 -5
  565. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  566. metadata/generated/schema/events/failedEvent.py +1 -1
  567. metadata/generated/schema/events/failedEventResponse.py +1 -1
  568. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  569. metadata/generated/schema/events/statusContext.py +1 -1
  570. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  571. metadata/generated/schema/events/subscriptionStatus.py +1 -1
  572. metadata/generated/schema/events/testDestinationStatus.py +1 -1
  573. metadata/generated/schema/governance/workflows/__init__.py +1 -1
  574. metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
  575. metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
  576. metadata/generated/schema/governance/workflows/elements/nodeSubType.py +1 -1
  577. metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
  578. metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
  579. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
  580. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
  581. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.py +1 -1
  582. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.py +1 -1
  583. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
  584. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +1 -1
  585. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
  586. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
  587. metadata/generated/schema/governance/workflows/elements/nodes/gateway/__init__.py +1 -1
  588. metadata/generated/schema/governance/workflows/elements/nodes/gateway/parallelGateway.py +1 -1
  589. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
  590. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
  591. metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
  592. metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +1 -1
  593. metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
  594. metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +9 -1
  595. metadata/generated/schema/governance/workflows/elements/triggers/noOpTrigger.py +1 -1
  596. metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
  597. metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -1
  598. metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
  599. metadata/generated/schema/governance/workflows/workflowInstanceState.py +5 -1
  600. metadata/generated/schema/jobs/__init__.py +1 -1
  601. metadata/generated/schema/jobs/backgroundJob.py +1 -1
  602. metadata/generated/schema/jobs/enumCleanupArgs.py +1 -1
  603. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  604. metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +1 -1
  605. metadata/generated/schema/metadataIngestion/application.py +1 -1
  606. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  607. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  608. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  609. metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +1 -1
  610. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  611. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +25 -3
  612. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  613. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  614. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  615. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  616. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  617. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  618. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  619. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  620. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  621. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  622. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  623. metadata/generated/schema/metadataIngestion/driveServiceMetadataPipeline.py +165 -0
  624. metadata/generated/schema/metadataIngestion/engine/__init__.py +3 -0
  625. metadata/generated/schema/metadataIngestion/engine/nativeEngineConfig.py +23 -0
  626. metadata/generated/schema/metadataIngestion/engine/sparkEngineConfig.py +43 -0
  627. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  628. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  629. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  630. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  631. metadata/generated/schema/metadataIngestion/reverseIngestionPipeline.py +1 -1
  632. metadata/generated/schema/metadataIngestion/reverseingestionconfig/__init__.py +1 -1
  633. metadata/generated/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.py +1 -1
  634. metadata/generated/schema/metadataIngestion/reverseingestionconfig/ownerConfig.py +1 -1
  635. metadata/generated/schema/metadataIngestion/reverseingestionconfig/tagsConfig.py +1 -1
  636. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  637. metadata/generated/schema/metadataIngestion/securityServiceMetadataPipeline.py +1 -1
  638. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  639. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  640. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  641. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  642. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  643. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  644. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  645. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  646. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  647. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  648. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  649. metadata/generated/schema/metadataIngestion/workflow.py +3 -1
  650. metadata/generated/schema/monitoring/__init__.py +1 -1
  651. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  652. metadata/generated/schema/scim/__init__.py +1 -1
  653. metadata/generated/schema/scim/scimConfiguration.py +1 -1
  654. metadata/generated/schema/search/__init__.py +1 -1
  655. metadata/generated/schema/search/aggregationRequest.py +1 -1
  656. metadata/generated/schema/search/searchRequest.py +1 -1
  657. metadata/generated/schema/security/__init__.py +1 -1
  658. metadata/generated/schema/security/client/__init__.py +1 -1
  659. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  660. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  661. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  662. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  663. metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
  664. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  665. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  666. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  667. metadata/generated/schema/security/credentials/__init__.py +1 -1
  668. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  669. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  670. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  671. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  672. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  673. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  674. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  675. metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
  676. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  677. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  678. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  679. metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
  680. metadata/generated/schema/security/credentials/kubernetesCredentials.py +40 -0
  681. metadata/generated/schema/security/sasl/__init__.py +1 -1
  682. metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
  683. metadata/generated/schema/security/secrets/__init__.py +1 -1
  684. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  685. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  686. metadata/generated/schema/security/secrets/secretsManagerProvider.py +2 -1
  687. metadata/generated/schema/security/securityConfiguration.py +1 -1
  688. metadata/generated/schema/security/ssl/__init__.py +1 -1
  689. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  690. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  691. metadata/generated/schema/settings/__init__.py +1 -1
  692. metadata/generated/schema/settings/settings.py +4 -1
  693. metadata/generated/schema/system/__init__.py +1 -1
  694. metadata/generated/schema/system/entityError.py +1 -1
  695. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  696. metadata/generated/schema/system/indexingError.py +1 -1
  697. metadata/generated/schema/system/limitsResponse.py +1 -1
  698. metadata/generated/schema/system/ui/__init__.py +1 -1
  699. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  700. metadata/generated/schema/system/ui/navigationItem.py +1 -1
  701. metadata/generated/schema/system/ui/page.py +5 -4
  702. metadata/generated/schema/system/ui/tab.py +1 -1
  703. metadata/generated/schema/system/ui/uiCustomization.py +9 -2
  704. metadata/generated/schema/system/validationResponse.py +1 -1
  705. metadata/generated/schema/tests/__init__.py +1 -1
  706. metadata/generated/schema/tests/assigned.py +1 -1
  707. metadata/generated/schema/tests/basic.py +1 -1
  708. metadata/generated/schema/tests/customMetric.py +1 -1
  709. metadata/generated/schema/tests/dataQualityReport.py +1 -1
  710. metadata/generated/schema/tests/resolved.py +1 -1
  711. metadata/generated/schema/tests/testCase.py +4 -4
  712. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  713. metadata/generated/schema/tests/testDefinition.py +5 -5
  714. metadata/generated/schema/tests/testSuite.py +11 -4
  715. metadata/generated/schema/type/__init__.py +1 -1
  716. metadata/generated/schema/type/apiSchema.py +1 -1
  717. metadata/generated/schema/type/assetCertification.py +1 -1
  718. metadata/generated/schema/type/auditLog.py +1 -1
  719. metadata/generated/schema/type/basic.py +43 -1
  720. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  721. metadata/generated/schema/type/changeEvent.py +5 -7
  722. metadata/generated/schema/type/changeEventType.py +1 -1
  723. metadata/generated/schema/type/changeSummaryMap.py +1 -1
  724. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  725. metadata/generated/schema/type/contractExecutionStatus.py +16 -0
  726. metadata/generated/schema/type/csvDocumentation.py +1 -1
  727. metadata/generated/schema/type/csvErrorType.py +1 -1
  728. metadata/generated/schema/type/csvFile.py +1 -1
  729. metadata/generated/schema/type/csvImportResult.py +1 -1
  730. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  731. metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
  732. metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
  733. metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
  734. metadata/generated/schema/type/customProperty.py +1 -1
  735. metadata/generated/schema/type/dailyCount.py +1 -1
  736. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  737. metadata/generated/schema/type/entityHierarchy.py +1 -1
  738. metadata/generated/schema/type/entityHistory.py +1 -1
  739. metadata/generated/schema/type/entityLineage.py +1 -1
  740. metadata/generated/schema/type/entityReference.py +1 -1
  741. metadata/generated/schema/type/entityReferenceList.py +1 -1
  742. metadata/generated/schema/type/{entityRelationship.py → entityRelationship/__init__.py} +2 -2
  743. metadata/generated/schema/type/entityRelationship/nodeInformation.py +25 -0
  744. metadata/generated/schema/type/entityUsage.py +1 -1
  745. metadata/generated/schema/type/filterPattern.py +1 -1
  746. metadata/generated/schema/type/function.py +1 -1
  747. metadata/generated/schema/type/include.py +1 -1
  748. metadata/generated/schema/type/jdbcConnection.py +1 -1
  749. metadata/generated/schema/type/layerPaging.py +24 -0
  750. metadata/generated/schema/type/lifeCycle.py +1 -1
  751. metadata/generated/schema/type/paging.py +1 -1
  752. metadata/generated/schema/type/personaPreferences.py +48 -0
  753. metadata/generated/schema/type/profile.py +1 -1
  754. metadata/generated/schema/type/queryParserData.py +1 -1
  755. metadata/generated/schema/type/reaction.py +1 -1
  756. metadata/generated/schema/type/schedule.py +1 -1
  757. metadata/generated/schema/type/schema.py +1 -1
  758. metadata/generated/schema/type/tableQuery.py +1 -1
  759. metadata/generated/schema/type/tableUsageCount.py +1 -1
  760. metadata/generated/schema/type/tagLabel.py +1 -1
  761. metadata/generated/schema/type/usageDetails.py +1 -1
  762. metadata/generated/schema/type/usageRequest.py +1 -1
  763. metadata/generated/schema/type/votes.py +1 -1
  764. metadata/ingestion/api/parser.py +13 -0
  765. metadata/ingestion/bulksink/metadata_usage.py +2 -2
  766. metadata/ingestion/connections/connection.py +18 -1
  767. metadata/ingestion/lineage/sql_lineage.py +98 -65
  768. metadata/ingestion/models/custom_properties.py +3 -3
  769. metadata/ingestion/models/patch_request.py +36 -4
  770. metadata/ingestion/ometa/mixins/data_contract_mixin.py +205 -0
  771. metadata/ingestion/ometa/mixins/lineage_mixin.py +1 -1
  772. metadata/ingestion/ometa/mixins/patch_mixin.py +131 -55
  773. metadata/ingestion/ometa/ometa_api.py +4 -1
  774. metadata/ingestion/ometa/routes.py +32 -0
  775. metadata/ingestion/sink/metadata_rest.py +51 -0
  776. metadata/ingestion/source/api/rest/connection.py +12 -6
  777. metadata/ingestion/source/api/rest/metadata.py +3 -1
  778. metadata/ingestion/source/api/rest/parser.py +103 -0
  779. metadata/ingestion/source/connections.py +1 -1
  780. metadata/ingestion/source/dashboard/grafana/__init__.py +10 -0
  781. metadata/ingestion/source/dashboard/grafana/client.py +223 -0
  782. metadata/ingestion/source/dashboard/grafana/connection.py +66 -0
  783. metadata/ingestion/source/dashboard/grafana/metadata.py +476 -0
  784. metadata/ingestion/source/dashboard/grafana/models.py +159 -0
  785. metadata/ingestion/source/dashboard/grafana/service_spec.py +17 -0
  786. metadata/ingestion/source/dashboard/microstrategy/metadata.py +1 -1
  787. metadata/ingestion/source/dashboard/powerbi/metadata.py +9 -9
  788. metadata/ingestion/source/dashboard/powerbi/models.py +1 -1
  789. metadata/ingestion/source/dashboard/superset/connection.py +5 -7
  790. metadata/ingestion/source/dashboard/tableau/client.py +4 -4
  791. metadata/ingestion/source/dashboard/tableau/metadata.py +1 -0
  792. metadata/ingestion/source/database/datalake/connection.py +51 -73
  793. metadata/ingestion/source/database/datalake/metadata.py +3 -4
  794. metadata/ingestion/source/database/datalake/service_spec.py +2 -0
  795. metadata/ingestion/source/database/dbt/constants.py +17 -1
  796. metadata/ingestion/source/database/dbt/dbt_service.py +30 -1
  797. metadata/ingestion/source/database/dbt/metadata.py +136 -1
  798. metadata/ingestion/source/database/deltalake/clients/pyspark.py +1 -1
  799. metadata/ingestion/source/database/exasol/connection.py +14 -3
  800. metadata/ingestion/source/database/exasol/queries.py +13 -0
  801. metadata/ingestion/source/database/lineage_source.py +18 -2
  802. metadata/ingestion/source/database/mysql/connection.py +13 -19
  803. metadata/ingestion/source/database/oracle/metadata.py +1 -1
  804. metadata/ingestion/source/database/oracle/utils.py +19 -0
  805. metadata/ingestion/source/database/postgres/connection.py +51 -48
  806. metadata/ingestion/source/database/postgres/service_spec.py +2 -0
  807. metadata/ingestion/source/database/sample_data.py +661 -2
  808. metadata/ingestion/source/database/snowflake/connection.py +196 -162
  809. metadata/ingestion/source/database/snowflake/service_spec.py +2 -0
  810. metadata/ingestion/source/database/stored_procedures_mixin.py +9 -1
  811. metadata/ingestion/source/database/trino/connection.py +279 -125
  812. metadata/ingestion/source/database/trino/service_spec.py +2 -0
  813. metadata/ingestion/source/database/unitycatalog/connection.py +20 -3
  814. metadata/ingestion/source/database/unitycatalog/queries.py +37 -1
  815. metadata/ingestion/source/database/unitycatalog/query_parser.py +4 -0
  816. metadata/ingestion/source/database/unitycatalog/usage.py +21 -35
  817. metadata/ingestion/source/drive/drive_service.py +648 -0
  818. metadata/ingestion/source/drives/__init__.py +13 -0
  819. metadata/ingestion/source/pipeline/airflow/connection.py +8 -6
  820. metadata/ingestion/source/pipeline/airflow/metadata.py +33 -10
  821. metadata/ingestion/source/pipeline/fivetran/metadata.py +2 -2
  822. metadata/profiler/processor/processor.py +18 -3
  823. metadata/profiler/source/database/base/profiler_resolver.py +5 -2
  824. metadata/profiler/source/database/base/profiler_source.py +8 -1
  825. metadata/profiler/source/profiler_source_interface.py +11 -2
  826. metadata/sampler/pandas/sampler.py +1 -1
  827. metadata/sampler/processor.py +19 -3
  828. metadata/sampler/sampler_interface.py +7 -0
  829. metadata/utils/credentials.py +35 -0
  830. metadata/utils/db_utils.py +12 -5
  831. metadata/utils/filters.py +60 -0
  832. metadata/utils/fqn.py +79 -0
  833. metadata/utils/helpers.py +6 -1
  834. metadata/utils/logger.py +9 -0
  835. metadata/utils/metadata_service_helper.py +1 -1
  836. metadata/utils/secrets/kubernetes_secrets_manager.py +176 -0
  837. metadata/utils/secrets/secrets_manager_factory.py +3 -0
  838. metadata/workflow/ingestion.py +15 -2
  839. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/METADATA +543 -536
  840. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/RECORD +844 -790
  841. metadata/ingestion/source/database/extended_sample_data.py +0 -534
  842. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/LICENSE +0 -0
  843. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/WHEEL +0 -0
  844. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/entry_points.txt +0 -0
  845. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/top_level.txt +0 -0
@@ -436,21 +436,21 @@ class PowerbiSource(DashboardServiceSource):
436
436
  measures = []
437
437
  for measure in table.measures or []:
438
438
  try:
439
- measure_type = (
440
- DataType.MEASURE_HIDDEN
441
- if measure.isHidden
442
- else DataType.MEASURE_VISIBLE
443
- )
439
+ measure_type = DataType.MEASURE_VISIBLE
440
+ if measure.isHidden:
441
+ measure_type = DataType.MEASURE_HIDDEN
442
+ expression_text = f"Expression : {measure.expression}"
444
443
  description_text = (
445
- f"{measure.description}\n\nExpression : {measure.expression}"
444
+ f"Description : {measure.description}"
446
445
  if measure.description
447
- else f"Expression : {measure.expression}"
446
+ else ""
448
447
  )
448
+ description_field_text = f"{expression_text}\n\n{description_text}"
449
449
  parsed_measure = PowerBiMeasureModel(
450
450
  dataType=measure_type,
451
451
  dataTypeDisplay=measure_type,
452
452
  name=measure.name,
453
- description=description_text,
453
+ description=description_field_text,
454
454
  )
455
455
  measures.append(Column(**parsed_measure.model_dump()))
456
456
  except Exception as err:
@@ -866,7 +866,7 @@ class PowerbiSource(DashboardServiceSource):
866
866
 
867
867
  try:
868
868
  table_info = self._parse_table_info_from_source_exp(table, datamodel_entity)
869
- table_name = table.name or table_info.get("table")
869
+ table_name = table_info.get("table") or table.name
870
870
  schema_name = table_info.get("schema")
871
871
  database_name = table_info.get("database")
872
872
  if (
@@ -135,7 +135,7 @@ class PowerBiMeasures(BaseModel):
135
135
  name: str
136
136
  expression: str
137
137
  description: Optional[str] = None
138
- isHidden: bool
138
+ isHidden: Optional[bool] = False
139
139
 
140
140
 
141
141
  class PowerBITableSource(BaseModel):
@@ -27,7 +27,7 @@ from metadata.generated.schema.entity.services.connections.database.mysqlConnect
27
27
  MysqlConnection as MysqlConnectionConfig,
28
28
  )
29
29
  from metadata.generated.schema.entity.services.connections.database.postgresConnection import (
30
- PostgresConnection,
30
+ PostgresConnection as PostgresConnectionConfig,
31
31
  )
32
32
  from metadata.generated.schema.entity.services.connections.testConnectionResult import (
33
33
  TestConnectionResult,
@@ -47,9 +47,7 @@ from metadata.ingestion.source.dashboard.superset.queries import (
47
47
  FETCH_DASHBOARDS_TEST,
48
48
  )
49
49
  from metadata.ingestion.source.database.mysql.connection import MySQLConnection
50
- from metadata.ingestion.source.database.postgres.connection import (
51
- get_connection as pg_get_connection,
52
- )
50
+ from metadata.ingestion.source.database.postgres.connection import PostgresConnection
53
51
  from metadata.utils.constants import THREE_MIN
54
52
 
55
53
 
@@ -61,10 +59,10 @@ def get_connection(
61
59
  """
62
60
  if isinstance(connection.connection, SupersetApiConnection):
63
61
  return SupersetAPIClient(connection)
64
- if isinstance(connection.connection, PostgresConnection):
65
- return pg_get_connection(connection=connection.connection)
62
+ if isinstance(connection.connection, PostgresConnectionConfig):
63
+ return PostgresConnection(connection.connection).client
66
64
  if isinstance(connection.connection, MysqlConnectionConfig):
67
- return MySQLConnection(connection.connection).get_client()
65
+ return MySQLConnection(connection.connection).client
68
66
  return None
69
67
 
70
68
 
@@ -113,7 +113,7 @@ class TableauClient:
113
113
  owner = self.tableau_server.users.get_by_id(owner_id) if owner_id else None
114
114
  if owner and owner.email:
115
115
  owner_obj = TableauOwner(
116
- id=owner.id, name=owner.name, email=owner.email
116
+ id=str(owner.id), name=owner.name, email=owner.email
117
117
  )
118
118
  self.owner_cache[owner_id] = owner_obj
119
119
  return owner_obj
@@ -133,7 +133,7 @@ class TableauClient:
133
133
  try:
134
134
  charts.append(
135
135
  TableauChart(
136
- id=view.id,
136
+ id=str(view.id),
137
137
  name=view.name,
138
138
  tags=view.tags,
139
139
  owner=self.get_tableau_owner(view.owner_id),
@@ -215,10 +215,10 @@ class TableauClient:
215
215
  workbook.views
216
216
  )
217
217
  workbook = TableauDashboard(
218
- id=workbook.id,
218
+ id=str(workbook.id),
219
219
  name=workbook.name,
220
220
  project=TableauBaseModel(
221
- id=workbook.project_id, name=workbook.project_name
221
+ id=str(workbook.project_id), name=workbook.project_name
222
222
  ),
223
223
  owner=self.get_tableau_owner(workbook.owner_id),
224
224
  description=workbook.description,
@@ -257,6 +257,7 @@ class TableauSource(DashboardServiceSource):
257
257
  ),
258
258
  sql=self._get_datamodel_sql_query(data_model=data_model),
259
259
  owners=self.get_owner_ref(dashboard_details=dashboard_details),
260
+ project=self.get_project_name(dashboard_details=dashboard_details),
260
261
  )
261
262
  yield Either(right=data_model_request)
262
263
  self.register_record_datamodel(datamodel_request=data_model_request)
@@ -12,8 +12,6 @@
12
12
  """
13
13
  Source connection handler
14
14
  """
15
- from dataclasses import dataclass
16
- from functools import singledispatch
17
15
  from typing import Optional
18
16
 
19
17
  from metadata.generated.schema.entity.automations.workflow import (
@@ -29,88 +27,68 @@ from metadata.generated.schema.entity.services.connections.database.datalake.s3C
29
27
  S3Config,
30
28
  )
31
29
  from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
32
- DatalakeConnection,
30
+ DatalakeConnection as DatalakeConnectionConfig,
33
31
  )
34
32
  from metadata.generated.schema.entity.services.connections.testConnectionResult import (
35
33
  TestConnectionResult,
36
34
  )
35
+ from metadata.ingestion.connections.connection import BaseConnection
37
36
  from metadata.ingestion.connections.test_connections import test_connection_steps
38
37
  from metadata.ingestion.ometa.ometa_api import OpenMetadata
39
38
  from metadata.ingestion.source.database.datalake.clients.azure_blob import (
40
39
  DatalakeAzureBlobClient,
41
40
  )
41
+ from metadata.ingestion.source.database.datalake.clients.base import DatalakeBaseClient
42
42
  from metadata.ingestion.source.database.datalake.clients.gcs import DatalakeGcsClient
43
43
  from metadata.ingestion.source.database.datalake.clients.s3 import DatalakeS3Client
44
44
  from metadata.utils.constants import THREE_MIN
45
45
 
46
46
 
47
- # Only import specific datalake dependencies if necessary
48
- # pylint: disable=import-outside-toplevel
49
- @dataclass
50
- class DatalakeClient:
51
- def __init__(self, client, config) -> None:
52
- self.client = client
53
- self.config = config
54
-
55
-
56
- @singledispatch
57
- def get_datalake_client(config):
58
- """
59
- Method to retrieve datalake client from the config
60
- """
61
- if config:
62
- msg = f"Config not implemented for type {type(config)}: {config}"
63
- raise NotImplementedError(msg)
64
-
65
-
66
- @get_datalake_client.register
67
- def _(config: S3Config):
68
- return DatalakeS3Client.from_config(config)
69
-
70
-
71
- @get_datalake_client.register
72
- def _(config: GCSConfig):
73
- return DatalakeGcsClient.from_config(config)
74
-
75
-
76
- @get_datalake_client.register
77
- def _(config: AzureConfig):
78
- return DatalakeAzureBlobClient.from_config(config)
79
-
80
-
81
- def get_connection(connection: DatalakeConnection) -> DatalakeClient:
82
- """
83
- Create connection.
84
-
85
- Returns an AWS, Azure or GCS Clients.
86
- """
87
- return DatalakeClient(
88
- client=get_datalake_client(connection.configSource),
89
- config=connection,
90
- )
91
-
92
-
93
- def test_connection(
94
- metadata: OpenMetadata,
95
- connection: DatalakeClient,
96
- service_connection: DatalakeConnection,
97
- automation_workflow: Optional[AutomationWorkflow] = None,
98
- timeout_seconds: Optional[int] = THREE_MIN,
99
- ) -> TestConnectionResult:
100
- """
101
- Test connection. This can be executed either as part
102
- of a metadata workflow or during an Automation Workflow
103
- """
104
- test_fn = {
105
- "ListBuckets": connection.client.get_test_list_buckets_fn(
106
- connection.config.bucketName
107
- ),
108
- }
109
-
110
- return test_connection_steps(
111
- metadata=metadata,
112
- test_fn=test_fn,
113
- service_type=service_connection.type.value,
114
- automation_workflow=automation_workflow,
115
- timeout_seconds=timeout_seconds,
116
- )
47
+ class DatalakeConnection(BaseConnection[DatalakeConnectionConfig, DatalakeBaseClient]):
48
+ def _get_client(self) -> DatalakeBaseClient:
49
+ """
50
+ Return the appropriate Datalake client based on configSource.
51
+ """
52
+ connection = self.service_connection
53
+
54
+ if isinstance(connection.configSource, S3Config):
55
+ return DatalakeS3Client.from_config(connection.configSource)
56
+ elif isinstance(connection.configSource, GCSConfig):
57
+ return DatalakeGcsClient.from_config(connection.configSource)
58
+ elif isinstance(connection.configSource, AzureConfig):
59
+ return DatalakeAzureBlobClient.from_config(connection.configSource)
60
+ else:
61
+ msg = f"Config not implemented for type {type(connection.configSource)}: {connection.configSource}"
62
+ raise NotImplementedError(msg)
63
+
64
+ def get_connection_dict(self) -> dict:
65
+ """
66
+ Return the connection dictionary for this service.
67
+ """
68
+ raise NotImplementedError("get_connection_dict is not implemented for Datalake")
69
+
70
+ def test_connection(
71
+ self,
72
+ metadata: OpenMetadata,
73
+ automation_workflow: Optional[AutomationWorkflow] = None,
74
+ timeout_seconds: Optional[int] = THREE_MIN,
75
+ ) -> TestConnectionResult:
76
+ """
77
+ Test connection. This can be executed either as part
78
+ of a metadata workflow or during an Automation Workflow
79
+ """
80
+ test_fn = {
81
+ "ListBuckets": self.client.get_test_list_buckets_fn(
82
+ self.service_connection.bucketName
83
+ ),
84
+ }
85
+
86
+ return test_connection_steps(
87
+ metadata=metadata,
88
+ test_fn=test_fn,
89
+ service_type=self.service_connection.type.value
90
+ if self.service_connection.type
91
+ else "Datalake",
92
+ automation_workflow=automation_workflow,
93
+ timeout_seconds=timeout_seconds,
94
+ )
@@ -88,15 +88,14 @@ class DatalakeSource(DatabaseServiceSource):
88
88
  )
89
89
  self.metadata = metadata
90
90
  self.service_connection = self.config.serviceConnection.root.config
91
- self.connection = get_connection(self.service_connection)
92
- self.client = self.connection.client
91
+ self.client = get_connection(self.service_connection)
93
92
  self.table_constraints = None
94
93
  self.database_source_state = set()
95
94
  self.config_source = self.service_connection.configSource
96
- self.connection_obj = self.connection
95
+ self.connection_obj = self.client
97
96
  self.test_connection()
98
97
  self.reader = get_reader(
99
- config_source=self.config_source, client=self.client._client
98
+ config_source=self.config_source, client=self.client.client
100
99
  )
101
100
 
102
101
  @classmethod
@@ -1,6 +1,7 @@
1
1
  from metadata.data_quality.interface.pandas.pandas_test_suite_interface import (
2
2
  PandasTestSuiteInterface,
3
3
  )
4
+ from metadata.ingestion.source.database.datalake.connection import DatalakeConnection
4
5
  from metadata.ingestion.source.database.datalake.metadata import DatalakeSource
5
6
  from metadata.profiler.interface.pandas.profiler_interface import (
6
7
  PandasProfilerInterface,
@@ -13,4 +14,5 @@ ServiceSpec = DefaultDatabaseSpec(
13
14
  profiler_class=PandasProfilerInterface,
14
15
  test_suite_class=PandasTestSuiteInterface,
15
16
  sampler_class=DatalakeSampler,
17
+ connection_class=DatalakeConnection,
16
18
  )
@@ -14,11 +14,17 @@ Constants required for dbt
14
14
 
15
15
  from enum import Enum
16
16
 
17
+ from metadata.generated.schema.entity.data.apiEndpoint import APIEndpoint
18
+ from metadata.generated.schema.entity.data.dashboard import Dashboard
19
+ from metadata.generated.schema.entity.data.mlmodel import MlModel
20
+
17
21
  DBT_RUN_RESULT_DATE_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
18
22
 
19
23
  # Based on https://schemas.getdbt.com/dbt/manifest/v7/index.html
20
24
  REQUIRED_MANIFEST_KEYS = ["name", "schema", "resource_type"]
21
25
 
26
+ REQUIRED_EXPOSURE_KEYS = ["name", "meta", "type", "resource_type", "sources"]
27
+
22
28
  # Based on https://schemas.getdbt.com/dbt/catalog/v1.json
23
29
  REQUIRED_CATALOG_KEYS = ["name", "type", "index"]
24
30
 
@@ -84,7 +90,6 @@ REQUIRED_NODE_KEYS = {
84
90
  "language",
85
91
  }
86
92
 
87
-
88
93
  NONE_KEYWORDS_LIST = ["none", "null"]
89
94
 
90
95
  DBT_CATALOG_FILE_NAME = "catalog.json"
@@ -148,6 +153,8 @@ class DbtCommonEnum(Enum):
148
153
  OWNER = "owner"
149
154
  NODES = "nodes"
150
155
  SOURCES = "sources"
156
+ EXPOSURE = "exposure"
157
+ EXPOSURES = "exposures"
151
158
  SOURCES_FILE = "sources_file"
152
159
  SOURCE = "source"
153
160
  RESOURCETYPE = "resource_type"
@@ -156,3 +163,12 @@ class DbtCommonEnum(Enum):
156
163
  RESULTS = "results"
157
164
  TEST_SUITE_NAME = "test_suite_name"
158
165
  DBT_TEST_SUITE = "DBT_TEST_SUITE"
166
+
167
+
168
+ # DBT Supports more types of exposures but only these map nicely
169
+ # https://docs.getdbt.com/docs/build/exposures#available-properties
170
+ ExposureTypeMap = {
171
+ "dashboard": {"entity_type": Dashboard, "entity_type_name": "dashboard"},
172
+ "ml": {"entity_type": MlModel, "entity_type_name": "mlmodel"},
173
+ "application": {"entity_type": APIEndpoint, "entity_type_name": "apiEndpoint"},
174
+ }
@@ -81,6 +81,7 @@ class DbtServiceTopology(ServiceTopology):
81
81
  "process_dbt_data_model",
82
82
  "process_dbt_entities",
83
83
  "process_dbt_tests",
84
+ "process_dbt_exposures",
84
85
  ],
85
86
  )
86
87
  process_dbt_data_model: Annotated[
@@ -151,6 +152,20 @@ class DbtServiceTopology(ServiceTopology):
151
152
  ],
152
153
  )
153
154
 
155
+ process_dbt_exposures: Annotated[
156
+ TopologyNode, Field(description="Process dbt exposures")
157
+ ] = TopologyNode(
158
+ producer="get_dbt_exposures",
159
+ stages=[
160
+ NodeStage(
161
+ type_=AddLineageRequest,
162
+ processor="create_dbt_exposures_lineage",
163
+ consumer=["yield_data_models"],
164
+ nullable=True,
165
+ ),
166
+ ],
167
+ )
168
+
154
169
 
155
170
  class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
156
171
  """
@@ -175,7 +190,7 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
175
190
  # This step is necessary as the manifest file may not always adhere to the schema definition
176
191
  # and the presence of other nodes can hinder the ingestion process from progressing any further.
177
192
  # Therefore, we are only retaining the essential data for further processing.
178
- required_manifest_keys = {"nodes", "sources", "metadata"}
193
+ required_manifest_keys = {"nodes", "sources", "metadata", "exposures"}
179
194
  manifest_dict.update(
180
195
  {
181
196
  key: {}
@@ -284,6 +299,12 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
284
299
  Method to process DBT lineage from upstream nodes
285
300
  """
286
301
 
302
+ @abstractmethod
303
+ def create_dbt_exposures_lineage(self, exposure_spec: dict) -> AddLineageRequest:
304
+ """
305
+ Method to process DBT lineage from exposures
306
+ """
307
+
287
308
  @abstractmethod
288
309
  def create_dbt_query_lineage(
289
310
  self, data_model_link: DataModelLink
@@ -311,6 +332,14 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
311
332
  for _, dbt_test in self.context.get().dbt_tests.items():
312
333
  yield dbt_test
313
334
 
335
+ def get_dbt_exposures(self) -> dict:
336
+ """
337
+ Prepare the DBT exposures
338
+ """
339
+
340
+ for _, exposure in self.context.get().exposures.items():
341
+ yield exposure
342
+
314
343
  @abstractmethod
315
344
  def create_dbt_tests_definition(
316
345
  self, dbt_test: dict
@@ -70,10 +70,12 @@ from metadata.ingestion.source.database.database_service import DataModelLink
70
70
  from metadata.ingestion.source.database.dbt.constants import (
71
71
  DBT_RUN_RESULT_DATE_FORMAT,
72
72
  REQUIRED_CATALOG_KEYS,
73
+ REQUIRED_EXPOSURE_KEYS,
73
74
  REQUIRED_MANIFEST_KEYS,
74
75
  DbtCommonEnum,
75
76
  DbtTestFailureEnum,
76
77
  DbtTestSuccessEnum,
78
+ ExposureTypeMap,
77
79
  SkipResourceTypeEnum,
78
80
  )
79
81
  from metadata.ingestion.source.database.dbt.dbt_service import (
@@ -236,6 +238,7 @@ class DbtSource(DbtServiceSource):
236
238
  manifest_entities = {
237
239
  **dbt_files.dbt_manifest[DbtCommonEnum.NODES.value],
238
240
  **dbt_files.dbt_manifest[DbtCommonEnum.SOURCES.value],
241
+ **dbt_files.dbt_manifest.get(DbtCommonEnum.EXPOSURES.value, {}),
239
242
  }
240
243
  catalog_entities = None
241
244
  if dbt_files.dbt_catalog:
@@ -249,6 +252,23 @@ class DbtSource(DbtServiceSource):
249
252
  ]:
250
253
  continue
251
254
 
255
+ if (
256
+ manifest_node[DbtCommonEnum.RESOURCETYPE.value]
257
+ == DbtCommonEnum.EXPOSURE.value
258
+ ):
259
+ if all(
260
+ required_key in manifest_node
261
+ for required_key in REQUIRED_EXPOSURE_KEYS
262
+ ):
263
+ logger.debug(f"Successfully Validated DBT Node: {key}")
264
+ else:
265
+ logger.warning(
266
+ f"Error validating DBT Node: {key}\n"
267
+ f"Please check if following keys exist for the node: {REQUIRED_EXPOSURE_KEYS}"
268
+ )
269
+
270
+ continue
271
+
252
272
  # Validate if all the required keys are present in the manifest nodes
253
273
  if all(
254
274
  required_key in manifest_node
@@ -373,6 +393,19 @@ class DbtSource(DbtServiceSource):
373
393
  None,
374
394
  )
375
395
 
396
+ def add_dbt_exposure(self, key: str, manifest_node, manifest_entities):
397
+ exposure_entity = self.parse_exposure_node(manifest_node)
398
+
399
+ if exposure_entity:
400
+ self.context.get().exposures[key] = {
401
+ DbtCommonEnum.EXPOSURE: exposure_entity,
402
+ DbtCommonEnum.MANIFEST_NODE: manifest_node,
403
+ }
404
+
405
+ self.context.get().exposures[key][
406
+ DbtCommonEnum.UPSTREAM
407
+ ] = self.parse_upstream_nodes(manifest_entities, manifest_node)
408
+
376
409
  def add_dbt_sources(
377
410
  self, key: str, manifest_node, manifest_entities, dbt_objects: DbtObjects
378
411
  ) -> None:
@@ -466,6 +499,7 @@ class DbtSource(DbtServiceSource):
466
499
  manifest_entities = {
467
500
  **dbt_objects.dbt_manifest.sources,
468
501
  **dbt_objects.dbt_manifest.nodes,
502
+ **dbt_objects.dbt_manifest.exposures,
469
503
  }
470
504
  catalog_entities = None
471
505
  if dbt_objects.dbt_catalog:
@@ -474,6 +508,7 @@ class DbtSource(DbtServiceSource):
474
508
  **dbt_objects.dbt_catalog.nodes,
475
509
  }
476
510
  self.context.get().data_model_links = []
511
+ self.context.get().exposures = {}
477
512
  self.context.get().dbt_tests = {}
478
513
  self.context.get().run_results_generate_time = None
479
514
  # Since we'll be processing multiple run_results for a single project
@@ -517,6 +552,10 @@ class DbtSource(DbtServiceSource):
517
552
  dbt_objects=dbt_objects,
518
553
  )
519
554
 
555
+ if resource_type == DbtCommonEnum.EXPOSURE.value:
556
+ self.add_dbt_exposure(key, manifest_node, manifest_entities)
557
+ continue
558
+
520
559
  # Skip the ephemeral nodes since it is not materialized
521
560
  if check_ephemeral_node(manifest_node):
522
561
  logger.debug(f"Skipping ephemeral DBT node: {key}.")
@@ -762,6 +801,57 @@ class DbtSource(DbtServiceSource):
762
801
 
763
802
  return columns
764
803
 
804
+ def parse_exposure_node(self, exposure_spec) -> Optional[Any]:
805
+ """
806
+ Parses the exposure node verifying if it's type is supported and if provided label matches FQN of
807
+ Open Metadata entity. Returns entity object if both conditions are met.
808
+
809
+ The implementation assumes that value of meta.open_metadata_fqn provided in DBT exposures object matches
810
+ to FQN of OpenMetadata entity.
811
+
812
+ ```yaml
813
+ exposures:
814
+ - name: orders_dashboard
815
+ label: orders
816
+ meta:
817
+ open_metadata_fqn: sample_looker.orders # OpenMetadata entity FullyQualifiedName
818
+ type: dashboard
819
+ maturity: high
820
+ url: http://localhost:808/looker/dashboard/8/
821
+ description: >
822
+ Exemplary OM Looker Dashboard.
823
+
824
+ depends_on:
825
+ - ref('fact_sales')
826
+ ```
827
+ """
828
+ exposure_type = exposure_spec.type.value
829
+ entity_type = ExposureTypeMap.get(exposure_type, {}).get("entity_type")
830
+
831
+ if not entity_type:
832
+ logger.warning(f"Exposure type [{exposure_spec.type.value}] not supported.")
833
+
834
+ return None
835
+
836
+ try:
837
+ entity_fqn = exposure_spec.meta["open_metadata_fqn"]
838
+ except KeyError:
839
+ logger.warning(
840
+ f"meta.open_metadata_fqn not found in [{exposure_spec.name}] exposure spec."
841
+ )
842
+ return None
843
+
844
+ entity = self.metadata.get_by_name(fqn=entity_fqn, entity=entity_type)
845
+
846
+ if not entity:
847
+ logger.warning(
848
+ f"Entity [{entity_fqn}] of [{exposure_type}] type not found in Open Metadata."
849
+ )
850
+
851
+ return None
852
+
853
+ return entity
854
+
765
855
  def create_dbt_lineage(
766
856
  self, data_model_link: DataModelLink
767
857
  ) -> Iterable[Either[AddLineageRequest]]:
@@ -834,7 +924,7 @@ class DbtSource(DbtServiceSource):
834
924
  lineages = get_lineage_by_query(
835
925
  self.metadata,
836
926
  query=query,
837
- service_name=source_elements[0],
927
+ service_names=source_elements[0],
838
928
  database_name=source_elements[1],
839
929
  schema_name=source_elements[2],
840
930
  dialect=dialect,
@@ -855,6 +945,51 @@ class DbtSource(DbtServiceSource):
855
945
  )
856
946
  )
857
947
 
948
+ def create_dbt_exposures_lineage(
949
+ self, exposure_spec: dict
950
+ ) -> Iterable[Either[AddLineageRequest]]:
951
+ to_entity = exposure_spec[DbtCommonEnum.EXPOSURE]
952
+ upstream = exposure_spec[DbtCommonEnum.UPSTREAM]
953
+ manifest_node = exposure_spec[DbtCommonEnum.MANIFEST_NODE]
954
+
955
+ for upstream_node in upstream:
956
+ try:
957
+ from_es_result = self.metadata.es_search_from_fqn(
958
+ entity_type=Table,
959
+ fqn_search_string=upstream_node,
960
+ )
961
+ from_entity: Optional[
962
+ Union[Table, List[Table]]
963
+ ] = get_entity_from_es_result(
964
+ entity_list=from_es_result, fetch_multiple_entities=False
965
+ )
966
+ if from_entity and to_entity:
967
+ yield Either(
968
+ right=AddLineageRequest(
969
+ edge=EntitiesEdge(
970
+ fromEntity=EntityReference(
971
+ id=Uuid(from_entity.id.root),
972
+ type="table",
973
+ ),
974
+ toEntity=EntityReference(
975
+ id=Uuid(to_entity.id.root),
976
+ type=ExposureTypeMap[manifest_node.type.value][
977
+ "entity_type_name"
978
+ ],
979
+ ),
980
+ lineageDetails=LineageDetails(
981
+ source=LineageSource.DbtLineage
982
+ ),
983
+ )
984
+ )
985
+ )
986
+
987
+ except Exception as exc: # pylint: disable=broad-except
988
+ logger.debug(traceback.format_exc())
989
+ logger.warning(
990
+ f"Failed to parse the node {upstream_node} to capture lineage: {exc}"
991
+ )
992
+
858
993
  def process_dbt_meta(self, manifest_meta):
859
994
  """
860
995
  Method to process DBT meta for Tags and GlossaryTerms
@@ -79,7 +79,7 @@ class DeltalakePySparkClient(DeltalakeBaseClient):
79
79
  "org.apache.spark.sql.delta.catalog.DeltaCatalog",
80
80
  )
81
81
  # Download delta-core jars when creating the SparkSession
82
- .config("spark.jars.packages", "io.delta:delta-core_2.12:2.0.0")
82
+ .config("spark.jars.packages", "io.delta:delta-spark_2.12:3.2.0")
83
83
  )
84
84
 
85
85
  # Check that the attribute exists and is properly informed