openmetadata-ingestion 1.2.4.0__py3-none-any.whl → 1.3.2.0rc1__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.
- airflow_provider_openmetadata/lineage/runner.py +44 -5
- airflow_provider_openmetadata/lineage/status.py +1 -1
- metadata/antlr/split_listener.py +1 -4
- metadata/applications/auto_tagger.py +212 -0
- metadata/cli/app.py +47 -0
- metadata/cli/db_dump.py +7 -3
- metadata/clients/aws_client.py +4 -0
- metadata/clients/azure_client.py +85 -0
- metadata/clients/domo_client.py +0 -2
- metadata/cmd.py +24 -13
- metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +40 -48
- metadata/data_insight/processor/reports/data_processor.py +1 -0
- metadata/data_insight/processor/reports/entity_report_data_processor.py +8 -2
- metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +4 -0
- metadata/data_insight/producer/cost_analysis_producer.py +78 -14
- metadata/data_insight/producer/entity_producer.py +1 -1
- metadata/data_insight/producer/producer_interface.py +1 -1
- metadata/data_insight/producer/web_analytics_producer.py +1 -1
- metadata/data_insight/source/metadata.py +21 -5
- metadata/data_quality/interface/sqlalchemy/databricks/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/snowflake/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +6 -6
- metadata/data_quality/interface/sqlalchemy/unity_catalog/test_suite_interface.py +35 -0
- metadata/data_quality/interface/test_suite_interface_factory.py +40 -0
- metadata/data_quality/processor/test_case_runner.py +17 -8
- metadata/data_quality/source/test_suite.py +10 -4
- metadata/data_quality/validations/base_test_handler.py +21 -17
- metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +38 -1
- metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +36 -1
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotNull.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeUnique.py +15 -0
- metadata/data_quality/validations/column/base/columnValuesToMatchRegex.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToNotMatchRegex.py +27 -0
- metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +27 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/mixins/pandas_validator_mixin.py +13 -2
- metadata/data_quality/validations/mixins/sqa_validator_mixin.py +40 -0
- metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
- metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
- metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
- metadata/examples/workflows/bigtable.yaml +32 -0
- metadata/examples/workflows/databricks.yaml +0 -1
- metadata/examples/workflows/datalake_azure_default.yaml +29 -0
- metadata/examples/workflows/mongodb.yaml +4 -2
- metadata/examples/workflows/mstr.yaml +24 -0
- metadata/examples/workflows/sas.yaml +28 -0
- metadata/examples/workflows/unity_catalog.yaml +27 -0
- metadata/examples/workflows/unity_catalog_lineage.yaml +18 -0
- metadata/examples/workflows/unity_catalog_usage.yaml +35 -0
- metadata/generated/antlr/EntityLinkLexer.py +425 -292
- metadata/generated/antlr/EntityLinkListener.py +12 -12
- metadata/generated/antlr/EntityLinkParser.py +228 -103
- 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/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 +2 -3
- metadata/generated/schema/api/createEventPublisherJob.py +2 -2
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +2 -2
- metadata/generated/schema/api/data/createCustomProperty.py +7 -12
- 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 +2 -3
- metadata/generated/schema/api/data/createDatabaseSchema.py +2 -3
- metadata/generated/schema/api/data/createGlossary.py +2 -3
- metadata/generated/schema/api/data/createGlossaryTerm.py +2 -3
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +2 -2
- metadata/generated/schema/api/data/createQuery.py +2 -2
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +2 -4
- metadata/generated/schema/api/data/createTable.py +2 -2
- 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/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 +1 -1
- 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 +8 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +30 -0
- metadata/generated/schema/api/feed/createThread.py +5 -1
- metadata/generated/schema/api/feed/resolveTask.py +12 -1
- metadata/generated/schema/api/feed/threadCount.py +18 -14
- 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/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 +2 -3
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +2 -2
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +4 -2
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +4 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +31 -0
- metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- 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 +3 -3
- 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 +2 -2
- 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 +32 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +13 -2
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +7 -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 +28 -2
- 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/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.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/dataInsight/__init__.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/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.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/smtpSettings.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 +24 -5
- metadata/generated/schema/entity/applications/appRunRecord.py +2 -7
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +30 -0
- metadata/generated/schema/entity/{services/connections/database/mongoDB → applications/configuration/external}/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +28 -0
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +46 -0
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +14 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +27 -0
- metadata/generated/schema/entity/applications/configuration/{searchIndexingApp.py → internal/searchIndexingAppConfig.py} +14 -4
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +3 -3
- 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 +12 -3
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +12 -3
- 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 +2 -2
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +2 -3
- 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 +2 -2
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +4 -9
- 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 +4 -8
- metadata/generated/schema/entity/data/databaseSchema.py +2 -8
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +2 -2
- metadata/generated/schema/entity/data/pipeline.py +6 -9
- metadata/generated/schema/entity/data/query.py +2 -2
- 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 +3 -9
- metadata/generated/schema/entity/data/table.py +18 -12
- 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 +6 -3
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +61 -0
- metadata/generated/schema/entity/feed/thread.py +17 -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 +2 -5
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.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/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +46 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +2 -2
- 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/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 +2 -2
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +35 -2
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +20 -0
- 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/couchbaseConnection.py +6 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +2 -7
- 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 +2 -2
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +3 -2
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +86 -0
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +17 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +16 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +43 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +20 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +69 -0
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +35 -0
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +24 -14
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -2
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +8 -4
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +9 -7
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +8 -4
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +20 -0
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +36 -0
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +7 -41
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +48 -0
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +90 -0
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +2 -2
- 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 +14 -2
- 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 +14 -2
- 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/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +5 -20
- 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/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +2 -8
- 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/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.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/{adlsConection.py → adlsConnection.py} +2 -2
- 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 +4 -1
- metadata/generated/schema/entity/services/databaseService.py +16 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +27 -22
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +56 -0
- 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 +4 -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 +10 -3
- 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 +2 -6
- 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 +3 -10
- metadata/generated/schema/entity/type.py +4 -19
- 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 +27 -0
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +14 -12
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +13 -2
- metadata/generated/schema/events/eventSubscription.py +91 -49
- metadata/generated/schema/events/eventSubscriptionOffset.py +21 -0
- metadata/generated/schema/events/failedEvent.py +26 -0
- metadata/generated/schema/events/filterResourceDescriptor.py +27 -0
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +11 -10
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +40 -0
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +15 -6
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +11 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
- 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 +6 -3
- 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 +6 -3
- 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 +1 -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 +2 -2
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +24 -0
- 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 +8 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- 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 +46 -0
- 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 +21 -9
- 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 +7 -3
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +37 -0
- metadata/generated/schema/security/credentials/gcpValues.py +2 -2
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.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 +14 -4
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +4 -2
- 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 +4 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +17 -0
- metadata/generated/schema/system/eventPublisherJob.py +5 -19
- metadata/generated/schema/system/indexingError.py +34 -0
- 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 +43 -0
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +18 -0
- metadata/generated/schema/tests/basic.py +17 -39
- metadata/generated/schema/tests/customMetric.py +4 -2
- metadata/generated/schema/tests/resolved.py +35 -0
- metadata/generated/schema/tests/testCase.py +11 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +63 -0
- metadata/generated/schema/tests/testDefinition.py +6 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +10 -6
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -75
- metadata/generated/schema/type/changeEventType.py +29 -0
- 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 +3 -0
- metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
- metadata/generated/schema/type/customProperty.py +52 -0
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +2 -1
- metadata/generated/schema/type/entityReference.py +5 -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 +7 -6
- 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 +2 -2
- 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 +2 -2
- 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 +12 -20
- metadata/ingestion/api/delete.py +5 -2
- metadata/ingestion/api/models.py +4 -10
- metadata/ingestion/api/parser.py +3 -37
- metadata/ingestion/api/status.py +15 -4
- metadata/ingestion/api/step.py +39 -6
- metadata/ingestion/api/steps.py +34 -1
- metadata/ingestion/api/topology_runner.py +117 -168
- metadata/ingestion/bulksink/metadata_usage.py +11 -5
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/lineage/parser.py +28 -12
- metadata/ingestion/lineage/sql_lineage.py +9 -17
- metadata/ingestion/models/custom_properties.py +0 -1
- metadata/ingestion/models/custom_pydantic.py +4 -2
- metadata/ingestion/models/lf_tags_model.py +33 -0
- metadata/ingestion/models/patch_request.py +160 -2
- metadata/ingestion/models/tests_data.py +9 -0
- metadata/ingestion/models/topology.py +177 -60
- metadata/ingestion/ometa/auth_provider.py +0 -349
- metadata/ingestion/ometa/client.py +12 -3
- metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
- metadata/ingestion/ometa/mixins/es_mixin.py +17 -0
- metadata/ingestion/ometa/mixins/patch_mixin.py +21 -72
- metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
- metadata/ingestion/ometa/mixins/table_mixin.py +18 -0
- metadata/ingestion/ometa/mixins/tests_mixin.py +24 -3
- metadata/ingestion/ometa/mixins/user_mixin.py +117 -22
- metadata/ingestion/ometa/ometa_api.py +19 -26
- metadata/ingestion/ometa/routes.py +7 -0
- metadata/ingestion/processor/query_parser.py +9 -2
- metadata/ingestion/sink/metadata_rest.py +29 -8
- metadata/ingestion/source/dashboard/dashboard_service.py +38 -61
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +13 -14
- metadata/ingestion/source/dashboard/lightdash/metadata.py +2 -1
- metadata/ingestion/source/dashboard/looker/metadata.py +41 -29
- metadata/ingestion/source/dashboard/looker/utils.py +4 -2
- metadata/ingestion/source/dashboard/metabase/client.py +4 -0
- metadata/ingestion/source/dashboard/metabase/metadata.py +28 -10
- metadata/ingestion/source/dashboard/metabase/models.py +2 -2
- metadata/ingestion/source/dashboard/mode/client.py +10 -23
- metadata/ingestion/source/dashboard/mode/connection.py +6 -1
- metadata/ingestion/source/dashboard/mode/metadata.py +8 -4
- metadata/ingestion/source/dashboard/mstr/client.py +208 -0
- metadata/ingestion/source/dashboard/mstr/connection.py +53 -0
- metadata/ingestion/source/dashboard/mstr/metadata.py +182 -0
- metadata/ingestion/source/dashboard/mstr/models.py +144 -0
- metadata/ingestion/source/dashboard/powerbi/client.py +4 -1
- metadata/ingestion/source/dashboard/powerbi/metadata.py +15 -10
- metadata/ingestion/source/dashboard/qliksense/metadata.py +11 -7
- metadata/ingestion/source/dashboard/quicksight/metadata.py +9 -5
- metadata/ingestion/source/dashboard/redash/metadata.py +23 -14
- metadata/ingestion/source/dashboard/superset/api_source.py +11 -8
- metadata/ingestion/source/dashboard/superset/client.py +16 -9
- metadata/ingestion/source/dashboard/superset/connection.py +3 -3
- metadata/ingestion/source/dashboard/superset/db_source.py +14 -11
- metadata/ingestion/source/dashboard/superset/mixin.py +22 -18
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/client.py +91 -11
- metadata/ingestion/source/dashboard/tableau/connection.py +10 -1
- metadata/ingestion/source/dashboard/tableau/metadata.py +76 -70
- metadata/ingestion/source/dashboard/tableau/models.py +0 -8
- metadata/ingestion/source/dashboard/tableau/queries.py +5 -5
- metadata/ingestion/source/database/athena/client.py +80 -0
- metadata/ingestion/source/database/athena/connection.py +7 -0
- metadata/ingestion/source/database/athena/metadata.py +161 -19
- metadata/ingestion/source/database/azuresql/connection.py +21 -3
- metadata/ingestion/source/database/azuresql/metadata.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +24 -3
- metadata/ingestion/source/database/bigquery/helper.py +68 -1
- metadata/ingestion/source/database/bigquery/metadata.py +49 -28
- metadata/ingestion/source/database/bigquery/queries.py +33 -4
- metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
- metadata/ingestion/source/database/bigquery/usage.py +1 -3
- metadata/ingestion/source/database/bigtable/client.py +62 -0
- metadata/ingestion/source/database/bigtable/connection.py +116 -0
- metadata/ingestion/source/database/bigtable/metadata.py +224 -0
- metadata/ingestion/source/database/bigtable/models.py +60 -0
- metadata/ingestion/source/database/column_helpers.py +0 -10
- metadata/ingestion/source/database/column_type_parser.py +11 -5
- metadata/ingestion/source/database/common_db_source.py +33 -8
- metadata/ingestion/source/database/common_nosql_source.py +27 -6
- metadata/ingestion/source/database/database_service.py +89 -7
- metadata/ingestion/source/database/databricks/client.py +55 -103
- metadata/ingestion/source/database/databricks/connection.py +16 -55
- metadata/ingestion/source/database/databricks/lineage.py +29 -26
- metadata/ingestion/source/database/databricks/metadata.py +534 -11
- metadata/ingestion/source/database/databricks/queries.py +27 -0
- metadata/ingestion/source/database/databricks/query_parser.py +5 -1
- metadata/ingestion/source/database/databricks/usage.py +3 -3
- metadata/ingestion/source/database/datalake/connection.py +33 -18
- metadata/ingestion/source/database/datalake/metadata.py +113 -27
- metadata/ingestion/source/database/dbt/dbt_config.py +7 -14
- metadata/ingestion/source/database/dbt/dbt_service.py +10 -14
- metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
- metadata/ingestion/source/database/dbt/metadata.py +27 -53
- metadata/ingestion/source/database/deltalake/metadata.py +6 -3
- metadata/ingestion/source/database/domodatabase/metadata.py +7 -6
- metadata/ingestion/source/database/doris/connection.py +72 -0
- metadata/ingestion/source/database/doris/metadata.py +315 -0
- metadata/ingestion/source/database/doris/queries.py +54 -0
- metadata/ingestion/source/database/doris/utils.py +64 -0
- metadata/ingestion/source/database/extended_sample_data.py +532 -0
- metadata/ingestion/source/database/glue/metadata.py +8 -5
- metadata/ingestion/source/database/hive/connection.py +0 -2
- metadata/ingestion/source/database/hive/utils.py +3 -0
- metadata/ingestion/source/database/iceberg/catalog/__init__.py +65 -0
- metadata/ingestion/source/database/iceberg/catalog/base.py +40 -0
- metadata/ingestion/source/database/iceberg/catalog/dynamodb.py +102 -0
- metadata/ingestion/source/database/iceberg/catalog/glue.py +88 -0
- metadata/ingestion/source/database/iceberg/catalog/hive.py +51 -0
- metadata/ingestion/source/database/iceberg/catalog/rest.py +84 -0
- metadata/ingestion/source/database/iceberg/connection.py +68 -0
- metadata/ingestion/source/database/iceberg/fs/__init__.py +52 -0
- metadata/ingestion/source/database/iceberg/fs/azure.py +44 -0
- metadata/ingestion/source/database/iceberg/fs/base.py +30 -0
- metadata/ingestion/source/database/iceberg/fs/s3.py +77 -0
- metadata/ingestion/source/database/iceberg/helper.py +124 -0
- metadata/ingestion/source/database/iceberg/metadata.py +311 -0
- metadata/ingestion/source/database/iceberg/models.py +66 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +72 -3
- metadata/ingestion/source/database/mongodb/connection.py +1 -5
- metadata/ingestion/source/database/mssql/lineage.py +3 -0
- metadata/ingestion/source/database/mssql/metadata.py +108 -4
- metadata/ingestion/source/database/mssql/models.py +30 -0
- metadata/ingestion/source/database/mssql/queries.py +178 -1
- metadata/ingestion/source/database/mssql/usage.py +5 -1
- metadata/ingestion/source/database/mssql/utils.py +207 -4
- metadata/ingestion/source/database/mysql/connection.py +14 -0
- metadata/ingestion/source/database/mysql/metadata.py +0 -2
- metadata/ingestion/source/database/oracle/metadata.py +108 -2
- metadata/ingestion/source/database/oracle/models.py +30 -0
- metadata/ingestion/source/database/oracle/queries.py +99 -18
- metadata/ingestion/source/database/oracle/utils.py +0 -1
- metadata/ingestion/source/database/postgres/connection.py +15 -0
- metadata/ingestion/source/database/postgres/lineage.py +32 -14
- metadata/ingestion/source/database/postgres/metadata.py +15 -7
- metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
- metadata/ingestion/source/database/postgres/queries.py +4 -2
- metadata/ingestion/source/database/postgres/query_parser.py +4 -72
- metadata/ingestion/source/database/postgres/usage.py +41 -0
- metadata/ingestion/source/database/postgres/utils.py +34 -0
- metadata/ingestion/source/database/query_parser_source.py +8 -2
- metadata/ingestion/source/database/redshift/metadata.py +14 -4
- metadata/ingestion/source/database/redshift/queries.py +10 -4
- metadata/ingestion/source/database/redshift/query_parser.py +16 -0
- metadata/ingestion/source/database/redshift/usage.py +0 -2
- metadata/ingestion/source/database/salesforce/metadata.py +32 -3
- metadata/ingestion/source/database/sample_data.py +120 -6
- metadata/ingestion/source/database/sas/client.py +184 -0
- metadata/ingestion/source/database/sas/connection.py +47 -0
- metadata/ingestion/source/database/sas/extension_attr.py +103 -0
- metadata/ingestion/source/database/sas/metadata.py +914 -0
- metadata/ingestion/source/database/snowflake/metadata.py +34 -48
- metadata/ingestion/source/database/snowflake/models.py +6 -1
- metadata/ingestion/source/database/snowflake/queries.py +6 -4
- metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
- metadata/ingestion/source/database/snowflake/utils.py +23 -8
- metadata/ingestion/source/database/stored_procedures_mixin.py +12 -8
- metadata/ingestion/source/database/unitycatalog/__init__.py +0 -0
- metadata/ingestion/source/database/unitycatalog/client.py +87 -0
- metadata/ingestion/source/database/unitycatalog/connection.py +97 -0
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/lineage.py +11 -11
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/metadata.py +42 -49
- metadata/ingestion/source/database/unitycatalog/query_parser.py +60 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +31 -0
- metadata/ingestion/source/database/usage_source.py +3 -2
- metadata/ingestion/source/messaging/common_broker_source.py +15 -11
- metadata/ingestion/source/messaging/kafka/connection.py +45 -4
- metadata/ingestion/source/messaging/kinesis/metadata.py +6 -3
- metadata/ingestion/source/messaging/messaging_service.py +6 -2
- metadata/ingestion/source/metadata/amundsen/metadata.py +10 -7
- metadata/ingestion/source/metadata/atlas/metadata.py +5 -5
- metadata/ingestion/source/mlmodel/mlflow/metadata.py +5 -2
- metadata/ingestion/source/mlmodel/mlmodel_service.py +6 -2
- metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
- metadata/ingestion/source/pipeline/airflow/connection.py +0 -12
- metadata/ingestion/source/pipeline/airflow/lineage_parser.py +12 -6
- metadata/ingestion/source/pipeline/airflow/metadata.py +63 -34
- metadata/ingestion/source/pipeline/airflow/models.py +5 -4
- metadata/ingestion/source/pipeline/dagster/metadata.py +7 -4
- metadata/ingestion/source/pipeline/databrickspipeline/connection.py +1 -5
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +14 -11
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +7 -4
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +5 -2
- metadata/ingestion/source/pipeline/pipeline_service.py +6 -2
- metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
- metadata/ingestion/source/search/elasticsearch/connection.py +4 -1
- metadata/ingestion/source/search/elasticsearch/metadata.py +1 -2
- metadata/ingestion/source/search/search_service.py +6 -2
- metadata/ingestion/source/storage/s3/metadata.py +22 -17
- metadata/ingestion/source/storage/storage_service.py +53 -11
- metadata/ingestion/stage/table_usage.py +9 -2
- metadata/mixins/sqalchemy/sqa_mixin.py +14 -7
- metadata/parsers/protobuf_parser.py +29 -11
- metadata/pii/processor.py +9 -2
- metadata/pii/scanners/ner_scanner.py +5 -3
- metadata/profiler/api/models.py +19 -1
- metadata/profiler/interface/pandas/profiler_interface.py +59 -18
- metadata/profiler/interface/profiler_interface.py +14 -4
- metadata/profiler/interface/profiler_interface_factory.py +49 -14
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -0
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +26 -0
- metadata/profiler/interface/sqlalchemy/db2/__init__.py +0 -0
- metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +85 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +77 -34
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +7 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +33 -0
- metadata/profiler/metrics/composed/null_ratio.py +1 -1
- metadata/profiler/metrics/hybrid/histogram.py +1 -0
- metadata/profiler/metrics/static/max.py +4 -1
- metadata/profiler/metrics/static/min.py +4 -1
- metadata/profiler/metrics/system/queries/snowflake.py +89 -17
- metadata/profiler/metrics/system/system.py +62 -20
- metadata/profiler/orm/functions/conn_test.py +1 -0
- metadata/profiler/orm/functions/length.py +1 -0
- metadata/profiler/orm/functions/median.py +9 -1
- metadata/profiler/orm/functions/sum.py +1 -0
- metadata/profiler/orm/functions/table_metric_computer.py +462 -0
- metadata/profiler/orm/registry.py +2 -0
- metadata/profiler/processor/core.py +129 -62
- metadata/profiler/processor/default.py +14 -3
- metadata/profiler/processor/handle_partition.py +2 -2
- metadata/profiler/processor/processor.py +10 -7
- metadata/profiler/processor/sample_data_handler.py +6 -2
- metadata/profiler/processor/sampler/sqlalchemy/bigquery/sampler.py +31 -3
- metadata/profiler/processor/sampler/sqlalchemy/sampler.py +29 -6
- metadata/profiler/processor/sampler/sqlalchemy/trino/sampler.py +10 -4
- metadata/profiler/source/base/profiler_source.py +5 -2
- metadata/profiler/source/bigquery/type_mapper.py +0 -1
- metadata/profiler/source/databricks/profiler_source.py +36 -0
- metadata/profiler/source/mariadb/functions/median.py +20 -0
- metadata/profiler/source/mariadb/metrics/window/first_quartile.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/median.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/third_quartile.py +10 -0
- metadata/profiler/source/metadata.py +49 -10
- metadata/profiler/source/metadata_ext.py +16 -50
- metadata/profiler/source/profiler_source_factory.py +8 -0
- metadata/py.typed +0 -0
- metadata/readers/dataframe/json.py +5 -4
- metadata/readers/file/api_reader.py +0 -1
- metadata/utils/constants.py +5 -0
- metadata/utils/credentials.py +36 -19
- metadata/utils/datalake/datalake_utils.py +369 -129
- metadata/utils/entity_link.py +26 -6
- metadata/utils/execution_time_tracker.py +199 -0
- metadata/utils/filters.py +4 -0
- metadata/utils/fqn.py +20 -0
- metadata/utils/helpers.py +34 -39
- metadata/utils/importer.py +2 -3
- metadata/utils/life_cycle_utils.py +4 -4
- metadata/utils/logger.py +13 -2
- metadata/utils/partition.py +10 -5
- metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
- metadata/utils/secrets/aws_secrets_manager.py +7 -2
- metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
- metadata/utils/secrets/azure_kv_secrets_manager.py +132 -0
- metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +4 -3
- metadata/utils/secrets/external_secrets_manager.py +25 -3
- metadata/utils/secrets/secrets_manager_factory.py +15 -33
- metadata/utils/{source_hash_utils.py → source_hash.py} +10 -1
- metadata/utils/sqlalchemy_utils.py +21 -0
- metadata/utils/storage_metadata_config.py +42 -14
- metadata/utils/tag_utils.py +5 -2
- metadata/workflow/application.py +154 -0
- metadata/workflow/application_output_handler.py +34 -0
- metadata/workflow/base.py +88 -153
- metadata/workflow/data_insight.py +8 -7
- metadata/workflow/data_quality.py +3 -2
- metadata/workflow/ingestion.py +203 -0
- metadata/workflow/metadata.py +2 -3
- metadata/workflow/output_handler.py +226 -0
- metadata/workflow/profiler.py +2 -2
- metadata/workflow/usage.py +3 -4
- metadata/workflow/workflow_output_handler.py +15 -255
- metadata/workflow/workflow_status_mixin.py +44 -52
- openmetadata_ingestion-1.3.2.0rc1.dist-info/METADATA +758 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/RECORD +870 -762
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/WHEEL +1 -1
- metadata/generated/schema/entity/applications/appConfig.py +0 -21
- metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +0 -17
- metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +0 -38
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +0 -44
- metadata/generated/schema/events/dataInsightAlertConfig.py +0 -17
- metadata/generated/schema/events/entitySpelFilters.py +0 -19
- metadata/ingestion/models/es_documents.py +0 -339
- metadata/ingestion/ometa/mixins/glossary_mixin.py +0 -501
- metadata/ingestion/ometa/provider_registry.py +0 -144
- metadata/ingestion/source/database/databricks/legacy/lineage.py +0 -51
- metadata/ingestion/source/database/databricks/legacy/metadata.py +0 -339
- metadata/ingestion/source/metadata/metadata_elasticsearch/metadata.py +0 -144
- metadata/profiler/orm/functions/table_metric_construct.py +0 -365
- metadata/utils/secrets/client/loader.py +0 -78
- openmetadata_ingestion-1.2.4.0.dist-info/METADATA +0 -429
- /metadata/examples/workflows/{datalake_azure.yaml → datalake_azure_client_secret.yaml} +0 -0
- /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks/unity_catalog → bigtable}/__init__.py +0 -0
- /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/doris}/__init__.py +0 -0
- /metadata/{utils/secrets/client → ingestion/source/database/sas}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/top_level.txt +0 -0
metadata/workflow/base.py
CHANGED
|
@@ -10,20 +10,12 @@
|
|
|
10
10
|
# limitations under the License.
|
|
11
11
|
"""
|
|
12
12
|
Base workflow definition.
|
|
13
|
-
|
|
14
|
-
To be extended by any other workflow:
|
|
15
|
-
- ingestion
|
|
16
|
-
- lineage
|
|
17
|
-
- usage
|
|
18
|
-
- profiler
|
|
19
|
-
- test suite
|
|
20
|
-
- data insights
|
|
21
13
|
"""
|
|
22
|
-
|
|
14
|
+
|
|
23
15
|
import uuid
|
|
24
16
|
from abc import ABC, abstractmethod
|
|
25
17
|
from datetime import datetime
|
|
26
|
-
from typing import
|
|
18
|
+
from typing import Any, Dict, List, Optional, TypeVar, Union
|
|
27
19
|
|
|
28
20
|
from metadata.generated.schema.api.services.ingestionPipelines.createIngestionPipeline import (
|
|
29
21
|
CreateIngestionPipelineRequest,
|
|
@@ -31,23 +23,18 @@ from metadata.generated.schema.api.services.ingestionPipelines.createIngestionPi
|
|
|
31
23
|
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
32
24
|
OpenMetadataConnection,
|
|
33
25
|
)
|
|
34
|
-
from metadata.generated.schema.entity.services.connections.serviceConnection import (
|
|
35
|
-
ServiceConnection,
|
|
36
|
-
)
|
|
37
26
|
from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipeline import (
|
|
38
27
|
AirflowConfig,
|
|
39
28
|
IngestionPipeline,
|
|
40
29
|
PipelineState,
|
|
41
30
|
)
|
|
42
|
-
from metadata.generated.schema.
|
|
43
|
-
|
|
31
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
32
|
+
StackTraceError,
|
|
44
33
|
)
|
|
34
|
+
from metadata.generated.schema.metadataIngestion.workflow import LogLevels
|
|
45
35
|
from metadata.generated.schema.tests.testSuite import ServiceType
|
|
46
36
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
47
|
-
from metadata.ingestion.api.parser import parse_workflow_config_gracefully
|
|
48
37
|
from metadata.ingestion.api.step import Step
|
|
49
|
-
from metadata.ingestion.api.steps import BulkSink, Processor, Sink, Source, Stage
|
|
50
|
-
from metadata.ingestion.models.custom_types import ServiceWithConnectionType
|
|
51
38
|
from metadata.ingestion.ometa.client_utils import create_ometa_client
|
|
52
39
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
53
40
|
from metadata.timer.repeated_timer import RepeatedTimer
|
|
@@ -56,15 +43,19 @@ from metadata.utils.class_helper import (
|
|
|
56
43
|
get_pipeline_type_from_source_config,
|
|
57
44
|
get_reference_type_from_service_type,
|
|
58
45
|
get_service_class_from_service_type,
|
|
59
|
-
get_service_type_from_source_type,
|
|
60
46
|
)
|
|
47
|
+
from metadata.utils.execution_time_tracker import ExecutionTimeTracker
|
|
61
48
|
from metadata.utils.helpers import datetime_to_ts
|
|
62
49
|
from metadata.utils.logger import ingestion_logger, set_loggers_level
|
|
63
|
-
from metadata.workflow.
|
|
64
|
-
from metadata.workflow.workflow_status_mixin import
|
|
50
|
+
from metadata.workflow.output_handler import report_ingestion_status
|
|
51
|
+
from metadata.workflow.workflow_status_mixin import (
|
|
52
|
+
SUCCESS_THRESHOLD_VALUE,
|
|
53
|
+
WorkflowStatusMixin,
|
|
54
|
+
)
|
|
65
55
|
|
|
66
56
|
logger = ingestion_logger()
|
|
67
57
|
|
|
58
|
+
# Type of service linked to the Ingestion Pipeline
|
|
68
59
|
T = TypeVar("T")
|
|
69
60
|
|
|
70
61
|
REPORTS_INTERVAL_SECONDS = 60
|
|
@@ -81,110 +72,47 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
81
72
|
Base workflow implementation
|
|
82
73
|
"""
|
|
83
74
|
|
|
84
|
-
config:
|
|
75
|
+
config: Union[Any, Dict]
|
|
85
76
|
_run_id: Optional[str] = None
|
|
86
|
-
service_type: ServiceType
|
|
87
|
-
metadata_config: OpenMetadataConnection
|
|
88
77
|
metadata: OpenMetadata
|
|
78
|
+
metadata_config: OpenMetadataConnection
|
|
79
|
+
service_type: ServiceType
|
|
89
80
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
81
|
+
def __init__(
|
|
82
|
+
self,
|
|
83
|
+
config: Union[Any, Dict],
|
|
84
|
+
log_level: LogLevels,
|
|
85
|
+
metadata_config: OpenMetadataConnection,
|
|
86
|
+
service_type: ServiceType,
|
|
87
|
+
):
|
|
96
88
|
"""
|
|
97
89
|
Disabling pylint to wait for workflow reimplementation as a topology
|
|
98
90
|
"""
|
|
99
91
|
self.config = config
|
|
92
|
+
self.service_type = service_type
|
|
100
93
|
self._timer: Optional[RepeatedTimer] = None
|
|
101
94
|
self._ingestion_pipeline: Optional[IngestionPipeline] = None
|
|
102
95
|
self._start_ts = datetime_to_ts(datetime.now())
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
self.service_type: ServiceType = get_service_type_from_source_type(
|
|
107
|
-
self.config.source.type
|
|
96
|
+
self._execution_time_tracker = ExecutionTimeTracker(
|
|
97
|
+
log_level == LogLevels.DEBUG
|
|
108
98
|
)
|
|
109
99
|
|
|
110
|
-
|
|
111
|
-
self.config.workflowConfig.openMetadataServerConfig
|
|
112
|
-
)
|
|
100
|
+
set_loggers_level(log_level.value)
|
|
113
101
|
|
|
114
102
|
# We create the ometa client at the workflow level and pass it to the steps
|
|
115
|
-
self.
|
|
116
|
-
|
|
117
|
-
self.set_ingestion_pipeline_status(state=PipelineState.running)
|
|
103
|
+
self.metadata_config = metadata_config
|
|
104
|
+
self.metadata = create_ometa_client(metadata_config)
|
|
118
105
|
|
|
119
|
-
|
|
120
|
-
self._retrieve_service_connection_if_needed(self.service_type)
|
|
121
|
-
|
|
122
|
-
# Informs the `source` and the rest of `steps` to execute
|
|
123
|
-
self.set_steps()
|
|
106
|
+
self.post_init()
|
|
124
107
|
|
|
125
108
|
@property
|
|
126
109
|
def ingestion_pipeline(self):
|
|
127
110
|
"""Get or create the Ingestion Pipeline from the configuration"""
|
|
128
|
-
if not self._ingestion_pipeline:
|
|
111
|
+
if not self._ingestion_pipeline and self.config.ingestionPipelineFQN:
|
|
129
112
|
self._ingestion_pipeline = self.get_or_create_ingestion_pipeline()
|
|
130
113
|
|
|
131
114
|
return self._ingestion_pipeline
|
|
132
115
|
|
|
133
|
-
@abstractmethod
|
|
134
|
-
def set_steps(self):
|
|
135
|
-
"""
|
|
136
|
-
initialize the tuple of steps to run for each workflow
|
|
137
|
-
and the source
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
def _execute_internal(self):
|
|
141
|
-
"""
|
|
142
|
-
Internal execution that needs to be filled
|
|
143
|
-
by each ingestion workflow.
|
|
144
|
-
|
|
145
|
-
Pass each record from the source down the pipeline:
|
|
146
|
-
Source -> (Processor) -> Sink
|
|
147
|
-
or Source -> (Processor) -> Stage -> BulkSink
|
|
148
|
-
|
|
149
|
-
Note how the Source class needs to be an Iterator. Specifically,
|
|
150
|
-
we are defining Sources as Generators.
|
|
151
|
-
"""
|
|
152
|
-
for record in self.source.run():
|
|
153
|
-
processed_record = record
|
|
154
|
-
for step in self.steps:
|
|
155
|
-
# We only process the records for these Step types
|
|
156
|
-
if processed_record is not None and isinstance(
|
|
157
|
-
step, (Processor, Stage, Sink)
|
|
158
|
-
):
|
|
159
|
-
processed_record = step.run(processed_record)
|
|
160
|
-
|
|
161
|
-
# Try to pick up the BulkSink and execute it, if needed
|
|
162
|
-
bulk_sink = next(
|
|
163
|
-
(step for step in self.steps if isinstance(step, BulkSink)), None
|
|
164
|
-
)
|
|
165
|
-
if bulk_sink:
|
|
166
|
-
bulk_sink.run()
|
|
167
|
-
|
|
168
|
-
def execute(self) -> None:
|
|
169
|
-
"""
|
|
170
|
-
Main entrypoint
|
|
171
|
-
"""
|
|
172
|
-
self.timer.trigger()
|
|
173
|
-
try:
|
|
174
|
-
self._execute_internal()
|
|
175
|
-
|
|
176
|
-
# If we reach this point, compute the success % and update the associated Ingestion Pipeline status
|
|
177
|
-
self.update_ingestion_status_at_end()
|
|
178
|
-
|
|
179
|
-
# Any unhandled exception breaking the workflow should update the status
|
|
180
|
-
except Exception as err:
|
|
181
|
-
self.set_ingestion_pipeline_status(PipelineState.failed)
|
|
182
|
-
raise err
|
|
183
|
-
|
|
184
|
-
# Force resource closing. Required for killing the threading
|
|
185
|
-
finally:
|
|
186
|
-
self.stop()
|
|
187
|
-
|
|
188
116
|
def stop(self) -> None:
|
|
189
117
|
"""
|
|
190
118
|
Main stopping logic
|
|
@@ -194,30 +122,80 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
194
122
|
self.timer.stop()
|
|
195
123
|
self.metadata.close()
|
|
196
124
|
|
|
197
|
-
for step in self.
|
|
125
|
+
for step in self.workflow_steps():
|
|
198
126
|
try:
|
|
199
127
|
step.close()
|
|
200
128
|
except Exception as exc:
|
|
201
129
|
logger.warning(f"Error trying to close the step {step} due to [{exc}]")
|
|
202
130
|
|
|
203
|
-
self.source.close()
|
|
204
|
-
|
|
205
131
|
@property
|
|
206
132
|
def timer(self) -> RepeatedTimer:
|
|
207
133
|
"""
|
|
208
134
|
Status timer: It will print the source & sink status every `interval` seconds.
|
|
209
135
|
"""
|
|
210
136
|
if not self._timer:
|
|
211
|
-
self._timer =
|
|
212
|
-
|
|
137
|
+
self._timer = RepeatedTimer(
|
|
138
|
+
REPORTS_INTERVAL_SECONDS, report_ingestion_status, logger, self
|
|
213
139
|
)
|
|
214
140
|
|
|
215
141
|
return self._timer
|
|
216
142
|
|
|
217
143
|
@classmethod
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
144
|
+
@abstractmethod
|
|
145
|
+
def create(cls, config_dict: dict):
|
|
146
|
+
"""Single function to execute to create a Workflow instance"""
|
|
147
|
+
|
|
148
|
+
@abstractmethod
|
|
149
|
+
def post_init(self) -> None:
|
|
150
|
+
"""Method to execute after we have initialized all the internals"""
|
|
151
|
+
|
|
152
|
+
@abstractmethod
|
|
153
|
+
def execute_internal(self) -> None:
|
|
154
|
+
"""Workflow-specific logic to execute safely"""
|
|
155
|
+
|
|
156
|
+
@abstractmethod
|
|
157
|
+
def calculate_success(self) -> float:
|
|
158
|
+
"""Get the success % of the internal execution"""
|
|
159
|
+
|
|
160
|
+
@abstractmethod
|
|
161
|
+
def get_failures(self) -> List[StackTraceError]:
|
|
162
|
+
"""Get the failures to flag whether if the workflow succeeded or not"""
|
|
163
|
+
|
|
164
|
+
@abstractmethod
|
|
165
|
+
def workflow_steps(self) -> List[Step]:
|
|
166
|
+
"""Steps to report status from"""
|
|
167
|
+
|
|
168
|
+
@abstractmethod
|
|
169
|
+
def raise_from_status_internal(self, raise_warnings=False) -> None:
|
|
170
|
+
"""Based on the internal workflow status, raise a WorkflowExecutionError"""
|
|
171
|
+
|
|
172
|
+
def execute(self) -> None:
|
|
173
|
+
"""
|
|
174
|
+
Main entrypoint:
|
|
175
|
+
1. Start logging timer. It will be closed at `stop`
|
|
176
|
+
2. Execute the workflow
|
|
177
|
+
3. Validate the pipeline status
|
|
178
|
+
4. Update the pipeline status at the end
|
|
179
|
+
"""
|
|
180
|
+
pipeline_state = PipelineState.success
|
|
181
|
+
self.timer.trigger()
|
|
182
|
+
try:
|
|
183
|
+
self.set_ingestion_pipeline_status(state=PipelineState.running)
|
|
184
|
+
self.execute_internal()
|
|
185
|
+
|
|
186
|
+
if SUCCESS_THRESHOLD_VALUE <= self.calculate_success() < 100:
|
|
187
|
+
pipeline_state = PipelineState.partialSuccess
|
|
188
|
+
|
|
189
|
+
# Any unhandled exception breaking the workflow should update the status
|
|
190
|
+
except Exception as err:
|
|
191
|
+
pipeline_state = PipelineState.failed
|
|
192
|
+
raise err
|
|
193
|
+
|
|
194
|
+
# Force resource closing. Required for killing the threading
|
|
195
|
+
finally:
|
|
196
|
+
ingestion_status = self.build_ingestion_status()
|
|
197
|
+
self.set_ingestion_pipeline_status(pipeline_state, ingestion_status)
|
|
198
|
+
self.stop()
|
|
221
199
|
|
|
222
200
|
@property
|
|
223
201
|
def run_id(self) -> str:
|
|
@@ -233,48 +211,6 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
233
211
|
|
|
234
212
|
return self._run_id
|
|
235
213
|
|
|
236
|
-
def _retrieve_service_connection_if_needed(self, service_type: ServiceType) -> None:
|
|
237
|
-
"""
|
|
238
|
-
We override the current `serviceConnection` source config object if source workflow service already exists
|
|
239
|
-
in OM. When secrets' manager is configured, we retrieve the service connection from the secrets' manager.
|
|
240
|
-
Otherwise, we get the service connection from the service object itself through the default `SecretsManager`.
|
|
241
|
-
|
|
242
|
-
:param service_type: source workflow service type
|
|
243
|
-
:return:
|
|
244
|
-
"""
|
|
245
|
-
if (
|
|
246
|
-
not self.config.source.serviceConnection
|
|
247
|
-
and not self.metadata.config.forceEntityOverwriting
|
|
248
|
-
):
|
|
249
|
-
service_name = self.config.source.serviceName
|
|
250
|
-
try:
|
|
251
|
-
service: ServiceWithConnectionType = cast(
|
|
252
|
-
ServiceWithConnectionType,
|
|
253
|
-
self.metadata.get_by_name(
|
|
254
|
-
get_service_class_from_service_type(service_type),
|
|
255
|
-
service_name,
|
|
256
|
-
),
|
|
257
|
-
)
|
|
258
|
-
if service:
|
|
259
|
-
self.config.source.serviceConnection = ServiceConnection(
|
|
260
|
-
__root__=service.connection
|
|
261
|
-
)
|
|
262
|
-
else:
|
|
263
|
-
raise InvalidWorkflowJSONException(
|
|
264
|
-
f"Error getting the service [{service_name}] from the API. If it exists in OpenMetadata,"
|
|
265
|
-
" make sure the ingestion-bot JWT token is valid and that the Workflow is deployed"
|
|
266
|
-
" with the latest one. If this error persists, recreate the JWT token and"
|
|
267
|
-
" redeploy the Workflow."
|
|
268
|
-
)
|
|
269
|
-
except InvalidWorkflowJSONException as exc:
|
|
270
|
-
raise exc
|
|
271
|
-
except Exception as exc:
|
|
272
|
-
logger.debug(traceback.format_exc())
|
|
273
|
-
logger.error(
|
|
274
|
-
f"Unknown error getting service connection for service name [{service_name}]"
|
|
275
|
-
f" using the secrets manager provider [{self.metadata.config.secretsManagerProvider}]: {exc}"
|
|
276
|
-
)
|
|
277
|
-
|
|
278
214
|
def get_or_create_ingestion_pipeline(self) -> Optional[IngestionPipeline]:
|
|
279
215
|
"""
|
|
280
216
|
If we get the `ingestionPipelineFqn` from the `workflowConfig`, it means we want to
|
|
@@ -303,7 +239,6 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
303
239
|
service = self._get_ingestion_pipeline_service()
|
|
304
240
|
|
|
305
241
|
if service is not None:
|
|
306
|
-
|
|
307
242
|
return self.metadata.create_or_update(
|
|
308
243
|
CreateIngestionPipelineRequest(
|
|
309
244
|
name=pipeline_name,
|
|
@@ -19,12 +19,12 @@ from metadata.ingestion.api.steps import Sink
|
|
|
19
19
|
from metadata.utils.importer import import_sink_class
|
|
20
20
|
from metadata.utils.logger import data_insight_logger
|
|
21
21
|
from metadata.utils.time_utils import get_beginning_of_day_timestamp_mill
|
|
22
|
-
from metadata.workflow.
|
|
22
|
+
from metadata.workflow.ingestion import IngestionWorkflow
|
|
23
23
|
|
|
24
24
|
logger = data_insight_logger()
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
class DataInsightWorkflow(
|
|
27
|
+
class DataInsightWorkflow(IngestionWorkflow):
|
|
28
28
|
"""Data insight ingestion workflow implementation"""
|
|
29
29
|
|
|
30
30
|
retention_days = 7
|
|
@@ -39,7 +39,8 @@ class DataInsightWorkflow(BaseWorkflow):
|
|
|
39
39
|
kpi_runner = KpiRunner(self.metadata)
|
|
40
40
|
|
|
41
41
|
for kpi_result in kpi_runner.run():
|
|
42
|
-
|
|
42
|
+
# Pick up the sink
|
|
43
|
+
self.steps[0].run(kpi_result)
|
|
43
44
|
|
|
44
45
|
def _clean_up_web_analytics_events(self) -> None:
|
|
45
46
|
"""
|
|
@@ -64,14 +65,14 @@ class DataInsightWorkflow(BaseWorkflow):
|
|
|
64
65
|
|
|
65
66
|
return sink
|
|
66
67
|
|
|
67
|
-
def
|
|
68
|
+
def execute_internal(self):
|
|
68
69
|
"""Use parent logic and add step to process KPIs"""
|
|
69
|
-
super().
|
|
70
|
+
super().execute_internal()
|
|
70
71
|
self._run_kpi_processor()
|
|
71
72
|
self._clean_up_web_analytics_events()
|
|
72
73
|
|
|
73
74
|
def set_steps(self):
|
|
74
75
|
self.source = DataInsightSource.create(self.metadata) # type: ignore
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
self.steps = (
|
|
77
|
+
sink = self._get_sink()
|
|
78
|
+
self.steps = (sink,)
|
|
@@ -25,12 +25,13 @@ from metadata.ingestion.api.steps import Processor, Sink
|
|
|
25
25
|
from metadata.utils import fqn
|
|
26
26
|
from metadata.utils.importer import import_sink_class
|
|
27
27
|
from metadata.utils.logger import test_suite_logger
|
|
28
|
-
from metadata.workflow.base import
|
|
28
|
+
from metadata.workflow.base import T
|
|
29
|
+
from metadata.workflow.ingestion import IngestionWorkflow
|
|
29
30
|
|
|
30
31
|
logger = test_suite_logger()
|
|
31
32
|
|
|
32
33
|
|
|
33
|
-
class TestSuiteWorkflow(
|
|
34
|
+
class TestSuiteWorkflow(IngestionWorkflow):
|
|
34
35
|
"""
|
|
35
36
|
DAta Quality ingestion workflow implementation
|
|
36
37
|
|
|
@@ -0,0 +1,203 @@
|
|
|
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
|
+
Generic Workflow entrypoint to execute Ingestions
|
|
13
|
+
|
|
14
|
+
To be extended by any other workflow:
|
|
15
|
+
- metadata
|
|
16
|
+
- lineage
|
|
17
|
+
- usage
|
|
18
|
+
- profiler
|
|
19
|
+
- test suite
|
|
20
|
+
- data insights
|
|
21
|
+
"""
|
|
22
|
+
import traceback
|
|
23
|
+
from abc import ABC, abstractmethod
|
|
24
|
+
from typing import List, Tuple, cast
|
|
25
|
+
|
|
26
|
+
from metadata.config.common import WorkflowExecutionError
|
|
27
|
+
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
28
|
+
OpenMetadataConnection,
|
|
29
|
+
)
|
|
30
|
+
from metadata.generated.schema.entity.services.connections.serviceConnection import (
|
|
31
|
+
ServiceConnection,
|
|
32
|
+
)
|
|
33
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
34
|
+
StackTraceError,
|
|
35
|
+
)
|
|
36
|
+
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
37
|
+
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
38
|
+
OpenMetadataWorkflowConfig,
|
|
39
|
+
)
|
|
40
|
+
from metadata.ingestion.api.parser import parse_workflow_config_gracefully
|
|
41
|
+
from metadata.ingestion.api.step import Step, Summary
|
|
42
|
+
from metadata.ingestion.api.steps import BulkSink, Processor, Sink, Source, Stage
|
|
43
|
+
from metadata.ingestion.models.custom_types import ServiceWithConnectionType
|
|
44
|
+
from metadata.utils.class_helper import (
|
|
45
|
+
get_service_class_from_service_type,
|
|
46
|
+
get_service_type_from_source_type,
|
|
47
|
+
)
|
|
48
|
+
from metadata.utils.logger import ingestion_logger
|
|
49
|
+
from metadata.workflow.base import BaseWorkflow, InvalidWorkflowJSONException
|
|
50
|
+
from metadata.workflow.workflow_status_mixin import SUCCESS_THRESHOLD_VALUE
|
|
51
|
+
|
|
52
|
+
logger = ingestion_logger()
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class IngestionWorkflow(BaseWorkflow, ABC):
|
|
56
|
+
"""
|
|
57
|
+
Base Ingestion Workflow implementation
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
config: OpenMetadataWorkflowConfig
|
|
61
|
+
|
|
62
|
+
# All workflows require a source as a first step
|
|
63
|
+
source: Source
|
|
64
|
+
# All workflows execute a series of steps, aside from the source
|
|
65
|
+
steps: Tuple[Step]
|
|
66
|
+
|
|
67
|
+
def __init__(self, config: OpenMetadataWorkflowConfig):
|
|
68
|
+
self.config = config
|
|
69
|
+
|
|
70
|
+
self.service_type: ServiceType = get_service_type_from_source_type(
|
|
71
|
+
self.config.source.type
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
metadata_config: OpenMetadataConnection = (
|
|
75
|
+
self.config.workflowConfig.openMetadataServerConfig
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
super().__init__(
|
|
79
|
+
config=config,
|
|
80
|
+
log_level=config.workflowConfig.loggerLevel,
|
|
81
|
+
metadata_config=metadata_config,
|
|
82
|
+
service_type=self.service_type,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@abstractmethod
|
|
86
|
+
def set_steps(self):
|
|
87
|
+
"""
|
|
88
|
+
initialize the tuple of steps to run for each workflow
|
|
89
|
+
and the source
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
def post_init(self) -> None:
|
|
93
|
+
# Pick up the service connection from the API if needed
|
|
94
|
+
self._retrieve_service_connection_if_needed(self.service_type)
|
|
95
|
+
|
|
96
|
+
# Informs the `source` and the rest of `steps` to execute
|
|
97
|
+
self.set_steps()
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def create(cls, config_dict: dict):
|
|
101
|
+
config = parse_workflow_config_gracefully(config_dict)
|
|
102
|
+
return cls(config)
|
|
103
|
+
|
|
104
|
+
def execute_internal(self):
|
|
105
|
+
"""
|
|
106
|
+
Internal execution that needs to be filled
|
|
107
|
+
by each ingestion workflow.
|
|
108
|
+
|
|
109
|
+
Pass each record from the source down the pipeline:
|
|
110
|
+
Source -> (Processor) -> Sink
|
|
111
|
+
or Source -> (Processor) -> Stage -> BulkSink
|
|
112
|
+
|
|
113
|
+
Note how the Source class needs to be an Iterator. Specifically,
|
|
114
|
+
we are defining Sources as Generators.
|
|
115
|
+
"""
|
|
116
|
+
for record in self.source.run():
|
|
117
|
+
processed_record = record
|
|
118
|
+
for step in self.steps:
|
|
119
|
+
# We only process the records for these Step types
|
|
120
|
+
if processed_record is not None and isinstance(
|
|
121
|
+
step, (Processor, Stage, Sink)
|
|
122
|
+
):
|
|
123
|
+
processed_record = step.run(processed_record)
|
|
124
|
+
|
|
125
|
+
# Try to pick up the BulkSink and execute it, if needed
|
|
126
|
+
bulk_sink = next(
|
|
127
|
+
(step for step in self.steps if isinstance(step, BulkSink)), None
|
|
128
|
+
)
|
|
129
|
+
if bulk_sink:
|
|
130
|
+
bulk_sink.run()
|
|
131
|
+
|
|
132
|
+
def calculate_success(self) -> float:
|
|
133
|
+
return self.source.get_status().calculate_success()
|
|
134
|
+
|
|
135
|
+
def get_failures(self) -> List[StackTraceError]:
|
|
136
|
+
return self.source.get_status().failures
|
|
137
|
+
|
|
138
|
+
def workflow_steps(self) -> List[Step]:
|
|
139
|
+
return [self.source] + list(self.steps)
|
|
140
|
+
|
|
141
|
+
def raise_from_status_internal(self, raise_warnings=False):
|
|
142
|
+
"""
|
|
143
|
+
Check the status of all steps
|
|
144
|
+
"""
|
|
145
|
+
if (
|
|
146
|
+
self.source.get_status().failures
|
|
147
|
+
and self.calculate_success() < SUCCESS_THRESHOLD_VALUE
|
|
148
|
+
):
|
|
149
|
+
raise WorkflowExecutionError(
|
|
150
|
+
f"{self.source.name} reported errors: {Summary.from_step(self.source)}"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
for step in self.steps:
|
|
154
|
+
if step.status.failures:
|
|
155
|
+
raise WorkflowExecutionError(
|
|
156
|
+
f"{step.name} reported errors: {Summary.from_step(step)}"
|
|
157
|
+
)
|
|
158
|
+
if raise_warnings and step.status.warnings:
|
|
159
|
+
raise WorkflowExecutionError(
|
|
160
|
+
f"{step.name} reported warnings: {Summary.from_step(step)}"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
def _retrieve_service_connection_if_needed(self, service_type: ServiceType) -> None:
|
|
164
|
+
"""
|
|
165
|
+
We override the current `serviceConnection` source config object if source workflow service already exists
|
|
166
|
+
in OM. When secrets' manager is configured, we retrieve the service connection from the secrets' manager.
|
|
167
|
+
Otherwise, we get the service connection from the service object itself through the default `SecretsManager`.
|
|
168
|
+
|
|
169
|
+
:param service_type: source workflow service type
|
|
170
|
+
:return:
|
|
171
|
+
"""
|
|
172
|
+
if (
|
|
173
|
+
not self.config.source.serviceConnection
|
|
174
|
+
and not self.metadata.config.forceEntityOverwriting
|
|
175
|
+
):
|
|
176
|
+
service_name = self.config.source.serviceName
|
|
177
|
+
try:
|
|
178
|
+
service: ServiceWithConnectionType = cast(
|
|
179
|
+
ServiceWithConnectionType,
|
|
180
|
+
self.metadata.get_by_name(
|
|
181
|
+
get_service_class_from_service_type(service_type),
|
|
182
|
+
service_name,
|
|
183
|
+
),
|
|
184
|
+
)
|
|
185
|
+
if service:
|
|
186
|
+
self.config.source.serviceConnection = ServiceConnection(
|
|
187
|
+
__root__=service.connection
|
|
188
|
+
)
|
|
189
|
+
else:
|
|
190
|
+
raise InvalidWorkflowJSONException(
|
|
191
|
+
f"Error getting the service [{service_name}] from the API. If it exists in OpenMetadata,"
|
|
192
|
+
" make sure the ingestion-bot JWT token is valid and that the Workflow is deployed"
|
|
193
|
+
" with the latest one. If this error persists, recreate the JWT token and"
|
|
194
|
+
" redeploy the Workflow."
|
|
195
|
+
)
|
|
196
|
+
except InvalidWorkflowJSONException as exc:
|
|
197
|
+
raise exc
|
|
198
|
+
except Exception as exc:
|
|
199
|
+
logger.debug(traceback.format_exc())
|
|
200
|
+
logger.error(
|
|
201
|
+
f"Unknown error getting service connection for service name [{service_name}]"
|
|
202
|
+
f" using the secrets manager provider [{self.metadata.config.secretsManagerProvider}]: {exc}"
|
|
203
|
+
)
|
metadata/workflow/metadata.py
CHANGED
|
@@ -20,18 +20,17 @@ from metadata.utils.importer import (
|
|
|
20
20
|
import_source_class,
|
|
21
21
|
)
|
|
22
22
|
from metadata.utils.logger import ingestion_logger
|
|
23
|
-
from metadata.workflow.
|
|
23
|
+
from metadata.workflow.ingestion import IngestionWorkflow
|
|
24
24
|
|
|
25
25
|
logger = ingestion_logger()
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
class MetadataWorkflow(
|
|
28
|
+
class MetadataWorkflow(IngestionWorkflow):
|
|
29
29
|
"""
|
|
30
30
|
Metadata ingestion workflow implementation.
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
33
|
def set_steps(self):
|
|
34
|
-
|
|
35
34
|
# We keep the source registered in the workflow
|
|
36
35
|
self.source = self._get_source()
|
|
37
36
|
sink = self._get_sink()
|