openmetadata-ingestion 1.6.1.0__py3-none-any.whl → 1.6.2.1__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.
- metadata/clients/aws_client.py +70 -23
- metadata/data_quality/api/models.py +4 -0
- metadata/data_quality/processor/test_case_runner.py +8 -5
- metadata/data_quality/runner/base_test_suite_source.py +4 -5
- metadata/data_quality/source/test_suite.py +143 -39
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/addTagToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createAPICollection.py +1 -1
- metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMetric.py +1 -1
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +1 -1
- metadata/generated/schema/api/data/createQuery.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
- metadata/generated/schema/api/data/createTable.py +1 -1
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +2 -2
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/governance/__init__.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowDefinition.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowInstanceState.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createApiService.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +1 -1
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +1 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestCaseResult.py +8 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +7 -3
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
- metadata/generated/schema/configuration/assetCertificationSettings.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +14 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
- metadata/generated/schema/configuration/lineageSettings.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/searchSettings.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/configuration/workflowSettings.py +73 -0
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +1 -1
- metadata/generated/schema/entity/applications/appExtension.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +40 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +30 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +7 -1
- metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +1 -1
- metadata/generated/schema/entity/data/apiEndpoint.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metric.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +1 -1
- metadata/generated/schema/entity/data/table.py +1 -1
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +1 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +1 -1
- metadata/generated/schema/entity/domains/domain.py +1 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +1 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/exasolConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +1 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +1 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +1 -1
- metadata/generated/schema/events/api/eventsRecord.py +1 -1
- metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
- metadata/generated/schema/events/api/typedEvent.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/failedEventResponse.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/statusContext.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionStatus.py +1 -1
- metadata/generated/schema/events/testDestinationStatus.py +1 -1
- metadata/generated/schema/governance/workflows/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeSubType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +2 -6
- metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -1
- metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
- metadata/generated/schema/governance/workflows/workflowInstanceState.py +1 -1
- metadata/generated/schema/jobs/__init__.py +3 -0
- metadata/generated/schema/jobs/backgroundJob.py +66 -0
- metadata/generated/schema/jobs/enumCleanupArgs.py +23 -0
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +8 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +5 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +27 -3
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +4 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/limitsResponse.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +20 -20
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +8 -3
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +13 -6
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/assetCertification.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/customProperties/__init__.py +1 -1
- metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +1 -1
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +1 -1
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/great_expectations/action.py +1 -1
- metadata/ingestion/lineage/models.py +8 -0
- metadata/ingestion/ometa/mixins/es_mixin.py +10 -1
- metadata/ingestion/ometa/mixins/tests_mixin.py +1 -1
- metadata/ingestion/ometa/mixins/user_mixin.py +19 -5
- metadata/ingestion/ometa/routes.py +4 -0
- metadata/ingestion/source/dashboard/powerbi/client.py +31 -4
- metadata/ingestion/source/dashboard/powerbi/metadata.py +157 -135
- metadata/ingestion/source/database/db2/metadata.py +6 -0
- metadata/ingestion/source/database/db2/utils.py +63 -0
- metadata/ingestion/source/database/dbt/dbt_service.py +11 -0
- metadata/ingestion/source/database/dbt/metadata.py +42 -0
- metadata/ingestion/source/database/redshift/queries.py +1 -1
- metadata/ingestion/source/database/sample_data.py +1 -3
- metadata/ingestion/source/database/snowflake/queries.py +2 -2
- metadata/ingestion/source/database/sql_column_handler.py +6 -0
- metadata/ingestion/source/pipeline/airbyte/client.py +3 -2
- metadata/ingestion/source/pipeline/dbtcloud/metadata.py +22 -30
- metadata/ingestion/source/storage/s3/metadata.py +56 -9
- metadata/profiler/orm/converter/common.py +3 -1
- metadata/utils/constants.py +11 -12
- metadata/utils/elasticsearch.py +9 -1
- metadata/workflow/data_quality.py +5 -43
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/METADATA +356 -356
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/RECORD +671 -664
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.6.1.0.dist-info → openmetadata_ingestion-1.6.2.1.dist-info}/top_level.txt +0 -0
|
@@ -127,7 +127,13 @@ class PowerBiApiClient:
|
|
|
127
127
|
List[PowerBIDashboard]
|
|
128
128
|
"""
|
|
129
129
|
try:
|
|
130
|
-
|
|
130
|
+
admin = "admin/" if self.config.useAdminApis else ""
|
|
131
|
+
response_data = self.client.get(
|
|
132
|
+
f"/myorg/{admin}groups/{group_id}/dashboards"
|
|
133
|
+
)
|
|
134
|
+
if not response_data:
|
|
135
|
+
logger.debug(f"No dashboards found for workspace_id: {group_id}")
|
|
136
|
+
return None
|
|
131
137
|
response = DashboardsResponse(**response_data)
|
|
132
138
|
return response.value
|
|
133
139
|
except Exception as exc: # pylint: disable=broad-except
|
|
@@ -142,7 +148,11 @@ class PowerBiApiClient:
|
|
|
142
148
|
List[PowerBIReport]
|
|
143
149
|
"""
|
|
144
150
|
try:
|
|
145
|
-
|
|
151
|
+
admin = "admin/" if self.config.useAdminApis else ""
|
|
152
|
+
response_data = self.client.get(f"/myorg/{admin}groups/{group_id}/reports")
|
|
153
|
+
if not response_data:
|
|
154
|
+
logger.debug(f"No reports found for workspace_id: {group_id}")
|
|
155
|
+
return None
|
|
146
156
|
response = ReportsResponse(**response_data)
|
|
147
157
|
return response.value
|
|
148
158
|
except Exception as exc: # pylint: disable=broad-except
|
|
@@ -157,7 +167,11 @@ class PowerBiApiClient:
|
|
|
157
167
|
List[Dataset]
|
|
158
168
|
"""
|
|
159
169
|
try:
|
|
160
|
-
|
|
170
|
+
admin = "admin/" if self.config.useAdminApis else ""
|
|
171
|
+
response_data = self.client.get(f"/myorg/{admin}groups/{group_id}/datasets")
|
|
172
|
+
if not response_data:
|
|
173
|
+
logger.debug(f"No datasets found for workspace_id: {group_id}")
|
|
174
|
+
return None
|
|
161
175
|
response = DatasetResponse(**response_data)
|
|
162
176
|
return response.value
|
|
163
177
|
except Exception as exc: # pylint: disable=broad-except
|
|
@@ -174,9 +188,13 @@ class PowerBiApiClient:
|
|
|
174
188
|
List[Tile]
|
|
175
189
|
"""
|
|
176
190
|
try:
|
|
191
|
+
admin = "admin/" if self.config.useAdminApis else ""
|
|
177
192
|
response_data = self.client.get(
|
|
178
|
-
f"/myorg/
|
|
193
|
+
f"/myorg/{admin}dashboards/{dashboard_id}/tiles"
|
|
179
194
|
)
|
|
195
|
+
if not response_data:
|
|
196
|
+
logger.debug(f"No dashboard tiles found for workspace_id: {group_id}")
|
|
197
|
+
return None
|
|
180
198
|
response = TilesResponse(**response_data)
|
|
181
199
|
return response.value
|
|
182
200
|
except Exception as exc: # pylint: disable=broad-except
|
|
@@ -216,6 +234,9 @@ class PowerBiApiClient:
|
|
|
216
234
|
entities_per_page = self.config.pagination_entity_per_page
|
|
217
235
|
params_data = {"$top": "1"}
|
|
218
236
|
response_data = self.client.get(api_url, data=params_data)
|
|
237
|
+
if not response_data:
|
|
238
|
+
logger.debug("No groups/workspaces found")
|
|
239
|
+
return None
|
|
219
240
|
response = GroupsResponse(**response_data)
|
|
220
241
|
count = response.odata_count
|
|
221
242
|
indexes = math.ceil(count / entities_per_page)
|
|
@@ -227,6 +248,9 @@ class PowerBiApiClient:
|
|
|
227
248
|
"$skip": str(index * entities_per_page),
|
|
228
249
|
}
|
|
229
250
|
response_data = self.client.get(api_url, data=params_data)
|
|
251
|
+
if not response_data:
|
|
252
|
+
logger.debug("No more groups/workspaces found")
|
|
253
|
+
continue
|
|
230
254
|
response = GroupsResponse(**response_data)
|
|
231
255
|
workspaces.extend(response.value)
|
|
232
256
|
return workspaces
|
|
@@ -262,6 +286,7 @@ class PowerBiApiClient:
|
|
|
262
286
|
def fetch_workspace_scan_status(
|
|
263
287
|
self, scan_id: str
|
|
264
288
|
) -> Optional[WorkSpaceScanResponse]:
|
|
289
|
+
# deprecated in favour to avoide bulk data prepare
|
|
265
290
|
"""Get Workspace scan status by id method
|
|
266
291
|
Args:
|
|
267
292
|
scan_id:
|
|
@@ -280,6 +305,7 @@ class PowerBiApiClient:
|
|
|
280
305
|
return None
|
|
281
306
|
|
|
282
307
|
def fetch_workspace_scan_result(self, scan_id: str) -> Optional[Workspaces]:
|
|
308
|
+
# deprecated in favour to avoide bulk data prepare
|
|
283
309
|
"""Get Workspace scan result by id method
|
|
284
310
|
Args:
|
|
285
311
|
scan_id:
|
|
@@ -301,6 +327,7 @@ class PowerBiApiClient:
|
|
|
301
327
|
"""
|
|
302
328
|
Method to poll the scan status endpoint until the timeout
|
|
303
329
|
"""
|
|
330
|
+
# deprecated in favour to avoide bulk data prepare
|
|
304
331
|
min_sleep_time = 3
|
|
305
332
|
if min_sleep_time > timeout:
|
|
306
333
|
logger.info(f"Timeout is set to minimum sleep time: {timeout}")
|
|
@@ -49,6 +49,7 @@ from metadata.generated.schema.type.basic import (
|
|
|
49
49
|
)
|
|
50
50
|
from metadata.ingestion.api.models import Either
|
|
51
51
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
52
|
+
from metadata.ingestion.models.ometa_lineage import OMetaLineageRequest
|
|
52
53
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
53
54
|
from metadata.ingestion.ometa.utils import model_str
|
|
54
55
|
from metadata.ingestion.source.dashboard.dashboard_service import DashboardServiceSource
|
|
@@ -92,12 +93,6 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
92
93
|
self.datamodel_file_mappings = []
|
|
93
94
|
|
|
94
95
|
def prepare(self):
|
|
95
|
-
if self.service_connection.useAdminApis:
|
|
96
|
-
groups = self.get_admin_workspace_data()
|
|
97
|
-
else:
|
|
98
|
-
groups = self.get_org_workspace_data()
|
|
99
|
-
if groups:
|
|
100
|
-
self.workspace_data = self.get_filtered_workspaces(groups)
|
|
101
96
|
return super().prepare()
|
|
102
97
|
|
|
103
98
|
def close(self):
|
|
@@ -123,91 +118,6 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
123
118
|
filtered_groups.append(group)
|
|
124
119
|
return filtered_groups
|
|
125
120
|
|
|
126
|
-
def get_org_workspace_data(self) -> Optional[List[Group]]:
|
|
127
|
-
"""
|
|
128
|
-
fetch all the group workspace ids
|
|
129
|
-
"""
|
|
130
|
-
groups = self.client.api_client.fetch_all_workspaces()
|
|
131
|
-
for group in groups:
|
|
132
|
-
# add the dashboards to the groups
|
|
133
|
-
group.dashboards.extend(
|
|
134
|
-
self.client.api_client.fetch_all_org_dashboards(group_id=group.id) or []
|
|
135
|
-
)
|
|
136
|
-
for dashboard in group.dashboards:
|
|
137
|
-
# add the tiles to the dashboards
|
|
138
|
-
dashboard.tiles.extend(
|
|
139
|
-
self.client.api_client.fetch_all_org_tiles(
|
|
140
|
-
group_id=group.id, dashboard_id=dashboard.id
|
|
141
|
-
)
|
|
142
|
-
or []
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
# add the reports to the groups
|
|
146
|
-
group.reports.extend(
|
|
147
|
-
self.client.api_client.fetch_all_org_reports(group_id=group.id) or []
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
# add the datasets to the groups
|
|
151
|
-
group.datasets.extend(
|
|
152
|
-
self.client.api_client.fetch_all_org_datasets(group_id=group.id) or []
|
|
153
|
-
)
|
|
154
|
-
for dataset in group.datasets:
|
|
155
|
-
# add the tables to the datasets
|
|
156
|
-
dataset.tables.extend(
|
|
157
|
-
self.client.api_client.fetch_dataset_tables(
|
|
158
|
-
group_id=group.id, dataset_id=dataset.id
|
|
159
|
-
)
|
|
160
|
-
or []
|
|
161
|
-
)
|
|
162
|
-
return groups
|
|
163
|
-
|
|
164
|
-
def get_admin_workspace_data(self) -> Optional[List[Group]]:
|
|
165
|
-
"""
|
|
166
|
-
fetch all the workspace ids
|
|
167
|
-
"""
|
|
168
|
-
groups = []
|
|
169
|
-
workspaces = self.client.api_client.fetch_all_workspaces()
|
|
170
|
-
if workspaces:
|
|
171
|
-
workspace_id_list = [workspace.id for workspace in workspaces]
|
|
172
|
-
|
|
173
|
-
# Start the scan of the available workspaces for dashboard metadata
|
|
174
|
-
workspace_paginated_list = [
|
|
175
|
-
workspace_id_list[i : i + self.pagination_entity_per_page]
|
|
176
|
-
for i in range(
|
|
177
|
-
0, len(workspace_id_list), self.pagination_entity_per_page
|
|
178
|
-
)
|
|
179
|
-
]
|
|
180
|
-
count = 1
|
|
181
|
-
for workspace_ids_chunk in workspace_paginated_list:
|
|
182
|
-
logger.info(
|
|
183
|
-
f"Scanning {count}/{len(workspace_paginated_list)} set of workspaces"
|
|
184
|
-
)
|
|
185
|
-
workspace_scan = self.client.api_client.initiate_workspace_scan(
|
|
186
|
-
workspace_ids_chunk
|
|
187
|
-
)
|
|
188
|
-
|
|
189
|
-
# Keep polling the scan status endpoint to check if scan is succeeded
|
|
190
|
-
workspace_scan_status = self.client.api_client.wait_for_scan_complete(
|
|
191
|
-
scan_id=workspace_scan.id
|
|
192
|
-
)
|
|
193
|
-
if workspace_scan_status:
|
|
194
|
-
response = self.client.api_client.fetch_workspace_scan_result(
|
|
195
|
-
scan_id=workspace_scan.id
|
|
196
|
-
)
|
|
197
|
-
groups.extend(
|
|
198
|
-
[
|
|
199
|
-
active_workspace
|
|
200
|
-
for active_workspace in response.workspaces
|
|
201
|
-
if active_workspace.state == "Active"
|
|
202
|
-
]
|
|
203
|
-
)
|
|
204
|
-
else:
|
|
205
|
-
logger.error("Error in fetching dashboards and charts")
|
|
206
|
-
count += 1
|
|
207
|
-
else:
|
|
208
|
-
logger.error("Unable to fetch any PowerBI workspaces")
|
|
209
|
-
return groups or None
|
|
210
|
-
|
|
211
121
|
@classmethod
|
|
212
122
|
def create(
|
|
213
123
|
cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
|
|
@@ -220,12 +130,51 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
220
130
|
)
|
|
221
131
|
return cls(config, metadata)
|
|
222
132
|
|
|
133
|
+
def prepare_workspace_data(self, workspace: Group):
|
|
134
|
+
"""prepare one workspace data at a time"""
|
|
135
|
+
# add the dashboards to the groups
|
|
136
|
+
workspace.dashboards.extend(
|
|
137
|
+
self.client.api_client.fetch_all_org_dashboards(group_id=workspace.id) or []
|
|
138
|
+
)
|
|
139
|
+
for dashboard in workspace.dashboards:
|
|
140
|
+
# add the tiles to the dashboards
|
|
141
|
+
dashboard.tiles.extend(
|
|
142
|
+
self.client.api_client.fetch_all_org_tiles(
|
|
143
|
+
group_id=workspace.id, dashboard_id=dashboard.id
|
|
144
|
+
)
|
|
145
|
+
or []
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# add the reports to the groups
|
|
149
|
+
workspace.reports.extend(
|
|
150
|
+
self.client.api_client.fetch_all_org_reports(group_id=workspace.id) or []
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# add the datasets to the groups
|
|
154
|
+
workspace.datasets.extend(
|
|
155
|
+
self.client.api_client.fetch_all_org_datasets(group_id=workspace.id) or []
|
|
156
|
+
)
|
|
157
|
+
for dataset in workspace.datasets:
|
|
158
|
+
# add the tables to the datasets
|
|
159
|
+
dataset.tables.extend(
|
|
160
|
+
self.client.api_client.fetch_dataset_tables(
|
|
161
|
+
group_id=workspace.id, dataset_id=dataset.id
|
|
162
|
+
)
|
|
163
|
+
or []
|
|
164
|
+
)
|
|
165
|
+
|
|
223
166
|
def get_dashboard(self) -> Any:
|
|
224
167
|
"""
|
|
225
168
|
Method to iterate through dashboard lists filter dashboards & yield dashboard details
|
|
226
169
|
"""
|
|
227
|
-
|
|
170
|
+
# fetch all workspaces/groups & apply filter pattern
|
|
171
|
+
all_workspaces = self.client.api_client.fetch_all_workspaces() or []
|
|
172
|
+
all_workspaces = self.get_filtered_workspaces(all_workspaces)
|
|
173
|
+
for workspace in all_workspaces:
|
|
174
|
+
# prepare additional data for specific workspace (datasets, reports, dashboards)
|
|
175
|
+
self.prepare_workspace_data(workspace)
|
|
228
176
|
self.context.get().workspace = workspace
|
|
177
|
+
self.workspace_data.append(workspace)
|
|
229
178
|
for dashboard in self.get_dashboards_list():
|
|
230
179
|
try:
|
|
231
180
|
dashboard_details = self.get_dashboard_details(dashboard)
|
|
@@ -309,54 +258,45 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
309
258
|
f"{workspace_id}/{chart_url_postfix}"
|
|
310
259
|
)
|
|
311
260
|
|
|
312
|
-
def
|
|
261
|
+
def yield_datamodel(
|
|
262
|
+
self, dashboard_details: Union[PowerBIDashboard, PowerBIReport]
|
|
263
|
+
) -> Iterable[Either[CreateDashboardRequest]]:
|
|
313
264
|
"""
|
|
314
|
-
|
|
265
|
+
Method to yield datamodel for each workspace
|
|
315
266
|
"""
|
|
316
|
-
|
|
267
|
+
workspace_datasets = self.context.get().workspace.datasets
|
|
268
|
+
for dataset in workspace_datasets:
|
|
269
|
+
if filter_by_datamodel(
|
|
270
|
+
self.source_config.dataModelFilterPattern, dataset.name
|
|
271
|
+
):
|
|
272
|
+
self.status.filter(dataset.name, "Data model filtered out.")
|
|
273
|
+
continue
|
|
317
274
|
try:
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
Method to fetch DataModels in bulk
|
|
335
|
-
"""
|
|
336
|
-
try:
|
|
337
|
-
data_model_request = CreateDashboardDataModelRequest(
|
|
338
|
-
name=EntityName(dataset.id),
|
|
339
|
-
displayName=dataset.name,
|
|
340
|
-
description=Markdown(dataset.description)
|
|
341
|
-
if dataset.description
|
|
342
|
-
else None,
|
|
343
|
-
service=FullyQualifiedEntityName(self.context.get().dashboard_service),
|
|
344
|
-
dataModelType=DataModelType.PowerBIDataModel.value,
|
|
345
|
-
serviceType=DashboardServiceType.PowerBI.value,
|
|
346
|
-
columns=self._get_column_info(dataset),
|
|
347
|
-
project=self._fetch_dataset_workspace(dataset_id=dataset.id),
|
|
348
|
-
)
|
|
349
|
-
yield Either(right=data_model_request)
|
|
350
|
-
self.register_record_datamodel(datamodel_request=data_model_request)
|
|
275
|
+
data_model_request = CreateDashboardDataModelRequest(
|
|
276
|
+
name=EntityName(dataset.id),
|
|
277
|
+
displayName=dataset.name,
|
|
278
|
+
description=Markdown(dataset.description)
|
|
279
|
+
if dataset.description
|
|
280
|
+
else None,
|
|
281
|
+
service=FullyQualifiedEntityName(
|
|
282
|
+
self.context.get().dashboard_service
|
|
283
|
+
),
|
|
284
|
+
dataModelType=DataModelType.PowerBIDataModel.value,
|
|
285
|
+
serviceType=DashboardServiceType.PowerBI.value,
|
|
286
|
+
columns=self._get_column_info(dataset),
|
|
287
|
+
project=self.get_project_name(dashboard_details),
|
|
288
|
+
)
|
|
289
|
+
yield Either(right=data_model_request)
|
|
290
|
+
self.register_record_datamodel(datamodel_request=data_model_request)
|
|
351
291
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
292
|
+
except Exception as exc:
|
|
293
|
+
yield Either(
|
|
294
|
+
left=StackTraceError(
|
|
295
|
+
name=dataset.name,
|
|
296
|
+
error=f"Error yielding Data Model [{dataset.name}]: {exc}",
|
|
297
|
+
stackTrace=traceback.format_exc(),
|
|
298
|
+
)
|
|
358
299
|
)
|
|
359
|
-
)
|
|
360
300
|
|
|
361
301
|
def _get_child_columns(self, table: PowerBiTable) -> List[Column]:
|
|
362
302
|
"""
|
|
@@ -822,3 +762,85 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
822
762
|
f"Error fetching project name for {dashboard_details.id}: {exc}"
|
|
823
763
|
)
|
|
824
764
|
return None
|
|
765
|
+
|
|
766
|
+
def yield_dashboard_lineage(
|
|
767
|
+
self, dashboard_details: Any
|
|
768
|
+
) -> Iterable[Either[OMetaLineageRequest]]:
|
|
769
|
+
"""
|
|
770
|
+
Yields lineage if config is enabled.
|
|
771
|
+
|
|
772
|
+
We will look for the data in all the services
|
|
773
|
+
we have informed.
|
|
774
|
+
"""
|
|
775
|
+
for lineage in self.yield_datamodel_dashboard_lineage(dashboard_details) or []:
|
|
776
|
+
if lineage.right is not None:
|
|
777
|
+
yield Either(
|
|
778
|
+
right=OMetaLineageRequest(
|
|
779
|
+
lineage_request=lineage.right,
|
|
780
|
+
override_lineage=self.source_config.overrideLineage,
|
|
781
|
+
)
|
|
782
|
+
)
|
|
783
|
+
else:
|
|
784
|
+
yield lineage
|
|
785
|
+
|
|
786
|
+
db_service_names = self.get_db_service_names()
|
|
787
|
+
for db_service_name in db_service_names or []:
|
|
788
|
+
yield from self.yield_dashboard_lineage_details(
|
|
789
|
+
dashboard_details, db_service_name
|
|
790
|
+
) or []
|
|
791
|
+
|
|
792
|
+
def yield_datamodel_dashboard_lineage(
|
|
793
|
+
self, dashboard_details: Any
|
|
794
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
795
|
+
"""
|
|
796
|
+
Returns:
|
|
797
|
+
Lineage request between Data Models and Dashboards
|
|
798
|
+
"""
|
|
799
|
+
dashboard_fqn = fqn.build(
|
|
800
|
+
self.metadata,
|
|
801
|
+
entity_type=Dashboard,
|
|
802
|
+
service_name=self.context.get().dashboard_service,
|
|
803
|
+
dashboard_name=dashboard_details.id,
|
|
804
|
+
)
|
|
805
|
+
dashboard_entity = self.metadata.get_by_name(
|
|
806
|
+
entity=Dashboard, fqn=dashboard_fqn
|
|
807
|
+
)
|
|
808
|
+
if isinstance(dashboard_details, PowerBIReport):
|
|
809
|
+
datamodel_fqn = fqn.build(
|
|
810
|
+
metadata=self.metadata,
|
|
811
|
+
entity_type=DashboardDataModel,
|
|
812
|
+
service_name=self.context.get().dashboard_service,
|
|
813
|
+
data_model_name=dashboard_details.datasetId,
|
|
814
|
+
)
|
|
815
|
+
datamodel_entity = self.metadata.get_by_name(
|
|
816
|
+
entity=DashboardDataModel, fqn=datamodel_fqn
|
|
817
|
+
)
|
|
818
|
+
if dashboard_entity and datamodel_entity:
|
|
819
|
+
yield self._get_add_lineage_request(
|
|
820
|
+
to_entity=dashboard_entity, from_entity=datamodel_entity
|
|
821
|
+
)
|
|
822
|
+
else:
|
|
823
|
+
if (
|
|
824
|
+
hasattr(self.context.get(), "dataModels")
|
|
825
|
+
and self.context.get().dataModels
|
|
826
|
+
):
|
|
827
|
+
for datamodel in self.context.get().dataModels:
|
|
828
|
+
try:
|
|
829
|
+
datamodel_fqn = fqn.build(
|
|
830
|
+
metadata=self.metadata,
|
|
831
|
+
entity_type=DashboardDataModel,
|
|
832
|
+
service_name=self.context.get().dashboard_service,
|
|
833
|
+
data_model_name=datamodel,
|
|
834
|
+
)
|
|
835
|
+
datamodel_entity = self.metadata.get_by_name(
|
|
836
|
+
entity=DashboardDataModel, fqn=datamodel_fqn
|
|
837
|
+
)
|
|
838
|
+
if dashboard_entity and datamodel_entity:
|
|
839
|
+
yield self._get_add_lineage_request(
|
|
840
|
+
to_entity=dashboard_entity, from_entity=datamodel_entity
|
|
841
|
+
)
|
|
842
|
+
except Exception as err:
|
|
843
|
+
logger.debug(traceback.format_exc())
|
|
844
|
+
logger.error(
|
|
845
|
+
f"Error to yield dashboard lineage details for data model name [{str(datamodel)}]: {err}"
|
|
846
|
+
)
|
|
@@ -13,6 +13,7 @@ import traceback
|
|
|
13
13
|
from typing import Iterable, Optional
|
|
14
14
|
|
|
15
15
|
from ibm_db_sa.base import ischema_names
|
|
16
|
+
from ibm_db_sa.reflection import DB2Reflector, OS390Reflector
|
|
16
17
|
from sqlalchemy.engine.reflection import Inspector
|
|
17
18
|
from sqlalchemy.engine.row import LegacyRow
|
|
18
19
|
from sqlalchemy.sql.sqltypes import BOOLEAN
|
|
@@ -26,6 +27,7 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
26
27
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
27
28
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
28
29
|
from metadata.ingestion.source.database.common_db_source import CommonDbSourceService
|
|
30
|
+
from metadata.ingestion.source.database.db2.utils import get_unique_constraints
|
|
29
31
|
from metadata.utils.logger import ingestion_logger
|
|
30
32
|
|
|
31
33
|
logger = ingestion_logger()
|
|
@@ -34,6 +36,10 @@ logger = ingestion_logger()
|
|
|
34
36
|
ischema_names.update({"BOOLEAN": BOOLEAN})
|
|
35
37
|
|
|
36
38
|
|
|
39
|
+
DB2Reflector.get_unique_constraints = get_unique_constraints
|
|
40
|
+
OS390Reflector.get_unique_constraints = get_unique_constraints
|
|
41
|
+
|
|
42
|
+
|
|
37
43
|
class Db2Source(CommonDbSourceService):
|
|
38
44
|
"""
|
|
39
45
|
Implements the necessary methods to extract
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Module to define overriden dialect methods
|
|
14
|
+
"""
|
|
15
|
+
from sqlalchemy import and_, join, sql
|
|
16
|
+
from sqlalchemy.engine import reflection
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@reflection.cache
|
|
20
|
+
def get_unique_constraints(
|
|
21
|
+
self, connection, table_name, schema=None, **kw
|
|
22
|
+
): # pylint: disable=unused-argument
|
|
23
|
+
"""Small Method to override the Dialect default as it is not filtering properly the Schema and Table Name."""
|
|
24
|
+
current_schema = self.denormalize_name(schema or self.default_schema_name)
|
|
25
|
+
table_name = self.denormalize_name(table_name)
|
|
26
|
+
syskeycol = self.sys_keycoluse
|
|
27
|
+
sysconst = self.sys_tabconst
|
|
28
|
+
query = (
|
|
29
|
+
sql.select(syskeycol.c.constname, syskeycol.c.colname)
|
|
30
|
+
.select_from(
|
|
31
|
+
join(
|
|
32
|
+
syskeycol,
|
|
33
|
+
sysconst,
|
|
34
|
+
and_(
|
|
35
|
+
syskeycol.c.constname == sysconst.c.constname,
|
|
36
|
+
syskeycol.c.tabschema == sysconst.c.tabschema,
|
|
37
|
+
syskeycol.c.tabname == sysconst.c.tabname,
|
|
38
|
+
),
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
.where(
|
|
42
|
+
and_(
|
|
43
|
+
sysconst.c.tabname == table_name,
|
|
44
|
+
sysconst.c.tabschema == current_schema,
|
|
45
|
+
sysconst.c.type == "U",
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
.order_by(syskeycol.c.constname)
|
|
49
|
+
)
|
|
50
|
+
unique_consts = []
|
|
51
|
+
curr_const = None
|
|
52
|
+
for r in connection.execute(query):
|
|
53
|
+
if curr_const == r[0]:
|
|
54
|
+
unique_consts[-1]["column_names"].append(self.normalize_name(r[1]))
|
|
55
|
+
else:
|
|
56
|
+
curr_const = r[0]
|
|
57
|
+
unique_consts.append(
|
|
58
|
+
{
|
|
59
|
+
"name": self.normalize_name(curr_const),
|
|
60
|
+
"column_names": [self.normalize_name(r[1])],
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
return unique_consts
|
|
@@ -122,6 +122,11 @@ class DbtServiceTopology(ServiceTopology):
|
|
|
122
122
|
processor="process_dbt_descriptions",
|
|
123
123
|
nullable=True,
|
|
124
124
|
),
|
|
125
|
+
NodeStage(
|
|
126
|
+
type_=DataModelLink,
|
|
127
|
+
processor="process_dbt_owners",
|
|
128
|
+
nullable=True,
|
|
129
|
+
),
|
|
125
130
|
],
|
|
126
131
|
)
|
|
127
132
|
process_dbt_tests: Annotated[
|
|
@@ -293,6 +298,12 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
293
298
|
Method to process DBT descriptions using patch APIs
|
|
294
299
|
"""
|
|
295
300
|
|
|
301
|
+
@abstractmethod
|
|
302
|
+
def process_dbt_owners(self, data_model_link: DataModelLink):
|
|
303
|
+
"""
|
|
304
|
+
Method to process DBT owners using patch APIs
|
|
305
|
+
"""
|
|
306
|
+
|
|
296
307
|
def get_dbt_tests(self) -> dict:
|
|
297
308
|
"""
|
|
298
309
|
Prepare the DBT tests
|
|
@@ -61,6 +61,7 @@ from metadata.ingestion.api.models import Either
|
|
|
61
61
|
from metadata.ingestion.lineage.models import ConnectionTypeDialectMapper
|
|
62
62
|
from metadata.ingestion.lineage.sql_lineage import get_lineage_by_query
|
|
63
63
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
64
|
+
from metadata.ingestion.models.patch_request import PatchedEntity, PatchRequest
|
|
64
65
|
from metadata.ingestion.models.table_metadata import ColumnDescription
|
|
65
66
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
66
67
|
from metadata.ingestion.source.database.column_type_parser import ColumnTypeParser
|
|
@@ -886,6 +887,47 @@ class DbtSource(DbtServiceSource):
|
|
|
886
887
|
f"to update dbt description: {exc}"
|
|
887
888
|
)
|
|
888
889
|
|
|
890
|
+
def process_dbt_owners(
|
|
891
|
+
self, data_model_link: DataModelLink
|
|
892
|
+
) -> Iterable[Either[PatchedEntity]]:
|
|
893
|
+
"""
|
|
894
|
+
Method to process DBT owners
|
|
895
|
+
"""
|
|
896
|
+
table_entity: Table = data_model_link.table_entity
|
|
897
|
+
if table_entity:
|
|
898
|
+
logger.debug(
|
|
899
|
+
f"Processing DBT owners for: {table_entity.fullyQualifiedName.root}"
|
|
900
|
+
)
|
|
901
|
+
try:
|
|
902
|
+
data_model = data_model_link.datamodel
|
|
903
|
+
if (
|
|
904
|
+
data_model.resourceType != DbtCommonEnum.SOURCE.value
|
|
905
|
+
and self.source_config.dbtUpdateOwners
|
|
906
|
+
):
|
|
907
|
+
logger.debug(
|
|
908
|
+
f"Overwriting owners with DBT owners: {table_entity.fullyQualifiedName.root}"
|
|
909
|
+
)
|
|
910
|
+
if data_model.owners:
|
|
911
|
+
new_entity = deepcopy(table_entity)
|
|
912
|
+
new_entity.owners = data_model.owners
|
|
913
|
+
yield Either(
|
|
914
|
+
right=PatchRequest(
|
|
915
|
+
original_entity=table_entity,
|
|
916
|
+
new_entity=new_entity,
|
|
917
|
+
override_metadata=True,
|
|
918
|
+
)
|
|
919
|
+
)
|
|
920
|
+
|
|
921
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
922
|
+
yield Either(
|
|
923
|
+
left=StackTraceError(
|
|
924
|
+
name=str(table_entity.fullyQualifiedName.root),
|
|
925
|
+
error=f"Failed to parse the node"
|
|
926
|
+
f"{table_entity.fullyQualifiedName.root} to update dbt owner: {exc}",
|
|
927
|
+
stackTrace=traceback.format_exc(),
|
|
928
|
+
)
|
|
929
|
+
)
|
|
930
|
+
|
|
889
931
|
def create_dbt_tests_definition(
|
|
890
932
|
self, dbt_test: dict
|
|
891
933
|
) -> Iterable[Either[CreateTestDefinitionRequest]]:
|
|
@@ -328,7 +328,7 @@ Q_HISTORY as (
|
|
|
328
328
|
pid as query_session_id,
|
|
329
329
|
starttime as query_start_time,
|
|
330
330
|
endtime as query_end_time,
|
|
331
|
-
b.usename as query_user_name
|
|
331
|
+
cast(b.usename as varchar) as query_user_name
|
|
332
332
|
from STL_QUERY q
|
|
333
333
|
join pg_catalog.pg_user b
|
|
334
334
|
on b.usesysid = q.userid
|
|
@@ -1548,9 +1548,7 @@ class SampleDataSource(
|
|
|
1548
1548
|
test_suite=CreateTestSuiteRequest(
|
|
1549
1549
|
name=test_suite["testSuiteName"],
|
|
1550
1550
|
description=test_suite["testSuiteDescription"],
|
|
1551
|
-
|
|
1552
|
-
"executableEntityReference"
|
|
1553
|
-
],
|
|
1551
|
+
basicEntityReference=test_suite["executableEntityReference"],
|
|
1554
1552
|
)
|
|
1555
1553
|
)
|
|
1556
1554
|
)
|
|
@@ -296,7 +296,7 @@ SELECT
|
|
|
296
296
|
ARGUMENT_SIGNATURE AS signature,
|
|
297
297
|
COMMENT as comment,
|
|
298
298
|
'StoredProcedure' as procedure_type
|
|
299
|
-
FROM
|
|
299
|
+
FROM SNOWFLAKE.ACCOUNT_USAGE.PROCEDURES
|
|
300
300
|
WHERE PROCEDURE_CATALOG = '{database_name}'
|
|
301
301
|
AND PROCEDURE_SCHEMA = '{schema_name}'
|
|
302
302
|
"""
|
|
@@ -312,7 +312,7 @@ SELECT
|
|
|
312
312
|
ARGUMENT_SIGNATURE AS signature,
|
|
313
313
|
COMMENT as comment,
|
|
314
314
|
'UDF' as procedure_type
|
|
315
|
-
FROM
|
|
315
|
+
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
|
|
316
316
|
WHERE FUNCTION_CATALOG = '{database_name}'
|
|
317
317
|
AND FUNCTION_SCHEMA = '{schema_name}'
|
|
318
318
|
"""
|
|
@@ -94,6 +94,12 @@ class SqlColumnHandlerMixin:
|
|
|
94
94
|
parsed_string["name"] = column["name"]
|
|
95
95
|
else:
|
|
96
96
|
col_type = ColumnTypeParser.get_column_type(column["type"])
|
|
97
|
+
# For arrays, we'll get the item type if possible, or parse the string representation of the column
|
|
98
|
+
# if SQLAlchemy does not provide any further information
|
|
99
|
+
if col_type == "ARRAY" and getattr(column["type"], "item_type"):
|
|
100
|
+
arr_data_type = ColumnTypeParser.get_column_type(
|
|
101
|
+
column["type"].item_type
|
|
102
|
+
)
|
|
97
103
|
if col_type == "ARRAY" and re.match(
|
|
98
104
|
r"(?:\w*)(?:\()(\w*)(?:.*)", str(column["type"])
|
|
99
105
|
):
|