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
|
@@ -39,8 +39,8 @@ from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
|
39
39
|
from metadata.ingestion.models.topology import (
|
|
40
40
|
NodeStage,
|
|
41
41
|
ServiceTopology,
|
|
42
|
+
TopologyContext,
|
|
42
43
|
TopologyNode,
|
|
43
|
-
create_source_context,
|
|
44
44
|
)
|
|
45
45
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
46
46
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -100,7 +100,7 @@ class MlModelServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
100
100
|
service_connection: MlModelConnection.__fields__["config"].type_
|
|
101
101
|
|
|
102
102
|
topology = MlModelServiceTopology()
|
|
103
|
-
context =
|
|
103
|
+
context = TopologyContext.create(topology)
|
|
104
104
|
mlmodel_source_state: Set = set()
|
|
105
105
|
|
|
106
106
|
def __init__(
|
|
@@ -123,6 +123,10 @@ class MlModelServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
123
123
|
|
|
124
124
|
self.client = self.connection
|
|
125
125
|
|
|
126
|
+
@property
|
|
127
|
+
def name(self) -> str:
|
|
128
|
+
return self.service_connection.type.name
|
|
129
|
+
|
|
126
130
|
def get_services(self) -> Iterable[WorkflowSource]:
|
|
127
131
|
yield self.config
|
|
128
132
|
|
|
@@ -24,6 +24,9 @@ from metadata.generated.schema.entity.data.mlmodel import (
|
|
|
24
24
|
from metadata.generated.schema.entity.services.connections.mlmodel.sageMakerConnection import (
|
|
25
25
|
SageMakerConnection,
|
|
26
26
|
)
|
|
27
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
28
|
+
StackTraceError,
|
|
29
|
+
)
|
|
27
30
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
28
31
|
Source as WorkflowSource,
|
|
29
32
|
)
|
|
@@ -128,14 +131,23 @@ class SagemakerSource(MlModelServiceSource):
|
|
|
128
131
|
"""
|
|
129
132
|
Prepare the Request model
|
|
130
133
|
"""
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
try:
|
|
135
|
+
mlmodel_request = CreateMlModelRequest(
|
|
136
|
+
name=model.name,
|
|
137
|
+
algorithm=self._get_algorithm(), # Setting this to a constant
|
|
138
|
+
mlStore=self._get_ml_store(model.name),
|
|
139
|
+
service=self.context.mlmodel_service,
|
|
140
|
+
)
|
|
141
|
+
yield Either(right=mlmodel_request)
|
|
142
|
+
self.register_record(mlmodel_request=mlmodel_request)
|
|
143
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
144
|
+
yield Either(
|
|
145
|
+
left=StackTraceError(
|
|
146
|
+
name=model.name,
|
|
147
|
+
error=f"Error creating mlmodel: {exc}",
|
|
148
|
+
stackTrace=traceback.format_exc(),
|
|
149
|
+
)
|
|
150
|
+
)
|
|
139
151
|
|
|
140
152
|
def _get_ml_store( # pylint: disable=arguments-differ
|
|
141
153
|
self,
|
|
@@ -21,9 +21,6 @@ from sqlalchemy.engine import Engine
|
|
|
21
21
|
from metadata.generated.schema.entity.automations.workflow import (
|
|
22
22
|
Workflow as AutomationWorkflow,
|
|
23
23
|
)
|
|
24
|
-
from metadata.generated.schema.entity.services.connections.database.mssqlConnection import (
|
|
25
|
-
MssqlConnection,
|
|
26
|
-
)
|
|
27
24
|
from metadata.generated.schema.entity.services.connections.database.mysqlConnection import (
|
|
28
25
|
MysqlConnection,
|
|
29
26
|
)
|
|
@@ -81,15 +78,6 @@ def _(airflow_connection: PostgresConnection) -> Engine:
|
|
|
81
78
|
return get_postgres_connection(airflow_connection)
|
|
82
79
|
|
|
83
80
|
|
|
84
|
-
@_get_connection.register
|
|
85
|
-
def _(airflow_connection: MssqlConnection) -> Engine:
|
|
86
|
-
from metadata.ingestion.source.database.mssql.connection import (
|
|
87
|
-
get_connection as get_mssql_connection,
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
return get_mssql_connection(airflow_connection)
|
|
91
|
-
|
|
92
|
-
|
|
93
81
|
@_get_connection.register
|
|
94
82
|
def _(airflow_connection: SQLiteConnection) -> Engine:
|
|
95
83
|
from metadata.ingestion.source.database.sqlite.connection import (
|
|
@@ -64,6 +64,7 @@ and we'll treat this as independent sets of lineage
|
|
|
64
64
|
"""
|
|
65
65
|
import json
|
|
66
66
|
import logging
|
|
67
|
+
import textwrap
|
|
67
68
|
import traceback
|
|
68
69
|
from collections import defaultdict
|
|
69
70
|
from copy import deepcopy
|
|
@@ -134,16 +135,16 @@ class XLets(BaseModel):
|
|
|
134
135
|
|
|
135
136
|
|
|
136
137
|
def concat_dict_values(
|
|
137
|
-
|
|
138
|
+
dict_1: DefaultDict[str, List[Any]], dict_2: Optional[Dict[str, List[Any]]]
|
|
138
139
|
) -> DefaultDict[str, List[Any]]:
|
|
139
140
|
"""
|
|
140
141
|
Update d1 based on d2 values concatenating their results.
|
|
141
142
|
"""
|
|
142
|
-
if
|
|
143
|
-
for key, value in
|
|
144
|
-
|
|
143
|
+
if dict_2:
|
|
144
|
+
for key, value in dict_2.items():
|
|
145
|
+
dict_1[key] = dict_1[key] + value
|
|
145
146
|
|
|
146
|
-
return
|
|
147
|
+
return dict_1
|
|
147
148
|
|
|
148
149
|
|
|
149
150
|
def parse_xlets(xlet: List[Any]) -> Optional[Dict[str, List[OMEntity]]]:
|
|
@@ -200,7 +201,12 @@ def _parse_xlets(xlet: Any) -> None:
|
|
|
200
201
|
|
|
201
202
|
@_parse_xlets.register
|
|
202
203
|
@deprecated(
|
|
203
|
-
message=
|
|
204
|
+
message=textwrap.dedent(
|
|
205
|
+
"""
|
|
206
|
+
Please update your inlets/outlets to follow
|
|
207
|
+
https://docs.open-metadata.org/connectors/pipeline/airflow/configuring-lineage
|
|
208
|
+
"""
|
|
209
|
+
),
|
|
204
210
|
release="1.4.0",
|
|
205
211
|
)
|
|
206
212
|
def dictionary_lineage_annotation(xlet: dict) -> Dict[str, List[OMEntity]]:
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
Airflow source to extract metadata from OM UI
|
|
13
13
|
"""
|
|
14
14
|
import traceback
|
|
15
|
+
from collections import Counter
|
|
15
16
|
from datetime import datetime
|
|
16
17
|
from enum import Enum
|
|
17
18
|
from typing import Iterable, List, Optional, cast
|
|
@@ -34,13 +35,16 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
34
35
|
from metadata.generated.schema.entity.services.connections.pipeline.airflowConnection import (
|
|
35
36
|
AirflowConnection,
|
|
36
37
|
)
|
|
38
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
39
|
+
StackTraceError,
|
|
40
|
+
)
|
|
37
41
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
38
42
|
Source as WorkflowSource,
|
|
39
43
|
)
|
|
40
44
|
from metadata.generated.schema.type.entityLineage import EntitiesEdge, LineageDetails
|
|
41
45
|
from metadata.generated.schema.type.entityLineage import Source as LineageSource
|
|
42
46
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
43
|
-
from metadata.ingestion.api.models import Either
|
|
47
|
+
from metadata.ingestion.api.models import Either
|
|
44
48
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
45
49
|
from metadata.ingestion.connections.session import create_and_bind_session
|
|
46
50
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
@@ -52,6 +56,7 @@ from metadata.ingestion.source.pipeline.airflow.lineage_parser import (
|
|
|
52
56
|
from metadata.ingestion.source.pipeline.airflow.models import (
|
|
53
57
|
AirflowDag,
|
|
54
58
|
AirflowDagDetails,
|
|
59
|
+
AirflowTask,
|
|
55
60
|
)
|
|
56
61
|
from metadata.ingestion.source.pipeline.airflow.utils import get_schedule_interval
|
|
57
62
|
from metadata.ingestion.source.pipeline.pipeline_service import PipelineServiceSource
|
|
@@ -68,12 +73,14 @@ class AirflowTaskStatus(Enum):
|
|
|
68
73
|
FAILED = "failed"
|
|
69
74
|
QUEUED = "queued"
|
|
70
75
|
REMOVED = "removed"
|
|
76
|
+
SKIPPED = "skipped"
|
|
71
77
|
|
|
72
78
|
|
|
73
79
|
STATUS_MAP = {
|
|
74
80
|
AirflowTaskStatus.SUCCESS.value: StatusType.Successful.value,
|
|
75
81
|
AirflowTaskStatus.FAILED.value: StatusType.Failed.value,
|
|
76
82
|
AirflowTaskStatus.QUEUED.value: StatusType.Pending.value,
|
|
83
|
+
AirflowTaskStatus.SKIPPED.value: StatusType.Skipped.value,
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
|
|
@@ -104,7 +111,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
104
111
|
self._session = None
|
|
105
112
|
|
|
106
113
|
@classmethod
|
|
107
|
-
def create(cls, config_dict, metadata: OpenMetadata):
|
|
114
|
+
def create(cls, config_dict, metadata: OpenMetadata) -> "AirflowSource":
|
|
108
115
|
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
109
116
|
connection: AirflowConnection = config.serviceConnection.__root__.config
|
|
110
117
|
if not isinstance(connection, AirflowConnection):
|
|
@@ -158,7 +165,9 @@ class AirflowSource(PipelineServiceSource):
|
|
|
158
165
|
for elem in dag_run_dict
|
|
159
166
|
]
|
|
160
167
|
|
|
161
|
-
def get_task_instances(
|
|
168
|
+
def get_task_instances(
|
|
169
|
+
self, dag_id: str, run_id: str, serialized_tasks: List[AirflowTask]
|
|
170
|
+
) -> List[OMTaskInstance]:
|
|
162
171
|
"""
|
|
163
172
|
We are building our own scoped TaskInstance
|
|
164
173
|
class to only focus on core properties required
|
|
@@ -168,6 +177,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
168
177
|
sources we support.
|
|
169
178
|
"""
|
|
170
179
|
task_instance_list = None
|
|
180
|
+
serialized_tasks_ids = {task.task_id for task in serialized_tasks}
|
|
171
181
|
|
|
172
182
|
try:
|
|
173
183
|
task_instance_list = (
|
|
@@ -182,7 +192,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
182
192
|
TaskInstance.dag_id == dag_id,
|
|
183
193
|
TaskInstance.run_id == run_id,
|
|
184
194
|
# updating old runs flag deleted tasks as `removed`
|
|
185
|
-
TaskInstance.state != AirflowTaskStatus.REMOVED,
|
|
195
|
+
TaskInstance.state != AirflowTaskStatus.REMOVED.value,
|
|
186
196
|
)
|
|
187
197
|
.all()
|
|
188
198
|
)
|
|
@@ -204,6 +214,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
204
214
|
end_date=elem.get("end_date"),
|
|
205
215
|
)
|
|
206
216
|
for elem in task_instance_dict
|
|
217
|
+
if elem.get("task_id") in serialized_tasks_ids
|
|
207
218
|
]
|
|
208
219
|
|
|
209
220
|
def yield_pipeline_status(
|
|
@@ -217,7 +228,9 @@ class AirflowSource(PipelineServiceSource):
|
|
|
217
228
|
dag_run.run_id and self.context.task_names
|
|
218
229
|
): # Airflow dags can have old task which are turned off/commented out in code
|
|
219
230
|
tasks = self.get_task_instances(
|
|
220
|
-
dag_id=dag_run.dag_id,
|
|
231
|
+
dag_id=dag_run.dag_id,
|
|
232
|
+
run_id=dag_run.run_id,
|
|
233
|
+
serialized_tasks=pipeline_details.tasks,
|
|
221
234
|
)
|
|
222
235
|
|
|
223
236
|
task_statuses = [
|
|
@@ -259,7 +272,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
259
272
|
left=StackTraceError(
|
|
260
273
|
name=f"{pipeline_details.dag_id} Pipeline Status",
|
|
261
274
|
error=f"Wild error trying to extract status from DAG {pipeline_details.dag_id} - {exc}.",
|
|
262
|
-
|
|
275
|
+
stackTrace=traceback.format_exc(),
|
|
263
276
|
)
|
|
264
277
|
)
|
|
265
278
|
|
|
@@ -292,7 +305,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
292
305
|
start_date=data.get("start_date", None),
|
|
293
306
|
tasks=data.get("tasks", []),
|
|
294
307
|
schedule_interval=get_schedule_interval(data),
|
|
295
|
-
|
|
308
|
+
owner=self.fetch_dag_owners(data),
|
|
296
309
|
)
|
|
297
310
|
|
|
298
311
|
yield dag
|
|
@@ -305,12 +318,29 @@ class AirflowSource(PipelineServiceSource):
|
|
|
305
318
|
logger.debug(traceback.format_exc())
|
|
306
319
|
logger.warning(f"Wild error yielding dag {serialized_dag} - {err}")
|
|
307
320
|
|
|
308
|
-
def
|
|
321
|
+
def fetch_dag_owners(self, data) -> Optional[str]:
|
|
322
|
+
"""
|
|
323
|
+
In Airflow, ownership is defined as:
|
|
324
|
+
- `default_args`: Applied to all tasks and available on the DAG payload
|
|
325
|
+
- `owners`: Applied at the tasks. In Airflow's source code, DAG ownership is then a
|
|
326
|
+
list joined with the owners of all the tasks.
|
|
327
|
+
|
|
328
|
+
We will pick the owner from the tasks that appears in most tasks.
|
|
329
|
+
"""
|
|
309
330
|
try:
|
|
310
|
-
if self.source_config.includeOwners
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
331
|
+
if self.source_config.includeOwners:
|
|
332
|
+
task_owners = [
|
|
333
|
+
task.get("owner")
|
|
334
|
+
for task in data.get("tasks", [])
|
|
335
|
+
if task.get("owner") is not None
|
|
336
|
+
]
|
|
337
|
+
if task_owners:
|
|
338
|
+
most_common_owner, _ = Counter(task_owners).most_common(1)[0]
|
|
339
|
+
return most_common_owner
|
|
340
|
+
except Exception as exc:
|
|
341
|
+
self.status.warning(
|
|
342
|
+
data.get("dag_id"), f"Could not extract owner information due to {exc}"
|
|
343
|
+
)
|
|
314
344
|
return None
|
|
315
345
|
|
|
316
346
|
def get_pipeline_name(self, pipeline_details: SerializedDAG) -> str:
|
|
@@ -319,8 +349,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
319
349
|
"""
|
|
320
350
|
return pipeline_details.dag_id
|
|
321
351
|
|
|
322
|
-
|
|
323
|
-
def get_tasks_from_dag(dag: AirflowDagDetails, host_port: str) -> List[Task]:
|
|
352
|
+
def get_tasks_from_dag(self, dag: AirflowDagDetails, host_port: str) -> List[Task]:
|
|
324
353
|
"""
|
|
325
354
|
Obtain the tasks from a SerializedDAG
|
|
326
355
|
:param dag: AirflowDagDetails
|
|
@@ -341,28 +370,26 @@ class AirflowSource(PipelineServiceSource):
|
|
|
341
370
|
startDate=task.start_date.isoformat() if task.start_date else None,
|
|
342
371
|
endDate=task.end_date.isoformat() if task.end_date else None,
|
|
343
372
|
taskType=task.task_type,
|
|
373
|
+
owner=self.get_owner(task.owner),
|
|
344
374
|
)
|
|
345
375
|
for task in cast(Iterable[BaseOperator], dag.tasks)
|
|
346
376
|
]
|
|
347
377
|
|
|
348
|
-
def
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
return EntityReference(id=user.id.__root__, type="user")
|
|
352
|
-
return None
|
|
353
|
-
|
|
354
|
-
def get_owner(self, owners) -> Optional[EntityReference]:
|
|
355
|
-
try:
|
|
356
|
-
if isinstance(owners, str) and owners:
|
|
357
|
-
return self.get_user_details(email=owners)
|
|
378
|
+
def get_owner(self, owner) -> Optional[EntityReference]:
|
|
379
|
+
"""
|
|
380
|
+
Fetching users by name via ES to keep things as fast as possible.
|
|
358
381
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
382
|
+
We use the `owner` field since it's the onw used by Airflow to showcase
|
|
383
|
+
the info in its UI. In other connectors we might use the mail (e.g., in Looker),
|
|
384
|
+
but we use name here to be consistent with Airflow itself.
|
|
362
385
|
|
|
363
|
-
|
|
386
|
+
If data is not indexed, we can live without this information
|
|
387
|
+
until the next run.
|
|
388
|
+
"""
|
|
389
|
+
try:
|
|
390
|
+
return self.metadata.get_reference_by_name(name=owner)
|
|
364
391
|
except Exception as exc:
|
|
365
|
-
logger.warning(f"Error while getting details of user {
|
|
392
|
+
logger.warning(f"Error while getting details of user {owner} - {exc}")
|
|
366
393
|
return None
|
|
367
394
|
|
|
368
395
|
def yield_pipeline(
|
|
@@ -375,11 +402,13 @@ class AirflowSource(PipelineServiceSource):
|
|
|
375
402
|
"""
|
|
376
403
|
|
|
377
404
|
try:
|
|
405
|
+
# Airflow uses /dags/dag_id/grid to show pipeline / dag
|
|
406
|
+
source_url = f"{clean_uri(self.service_connection.hostPort)}/dags/{pipeline_details.dag_id}/grid"
|
|
378
407
|
|
|
379
408
|
pipeline_request = CreatePipelineRequest(
|
|
380
409
|
name=pipeline_details.dag_id,
|
|
381
410
|
description=pipeline_details.description,
|
|
382
|
-
sourceUrl=
|
|
411
|
+
sourceUrl=source_url,
|
|
383
412
|
concurrency=pipeline_details.max_active_runs,
|
|
384
413
|
pipelineLocation=pipeline_details.fileloc,
|
|
385
414
|
startDate=pipeline_details.start_date.isoformat()
|
|
@@ -389,7 +418,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
389
418
|
pipeline_details, self.service_connection.hostPort
|
|
390
419
|
),
|
|
391
420
|
service=self.context.pipeline_service,
|
|
392
|
-
owner=self.get_owner(pipeline_details.
|
|
421
|
+
owner=self.get_owner(pipeline_details.owner),
|
|
393
422
|
scheduleInterval=pipeline_details.schedule_interval,
|
|
394
423
|
)
|
|
395
424
|
yield Either(right=pipeline_request)
|
|
@@ -406,7 +435,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
406
435
|
f"Error building DAG information from {pipeline_details}. There might be Airflow version"
|
|
407
436
|
f" incompatibilities - {err}"
|
|
408
437
|
),
|
|
409
|
-
|
|
438
|
+
stackTrace=traceback.format_exc(),
|
|
410
439
|
)
|
|
411
440
|
)
|
|
412
441
|
except ValidationError as err:
|
|
@@ -415,7 +444,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
415
444
|
left=StackTraceError(
|
|
416
445
|
name=pipeline_details.dag_id,
|
|
417
446
|
error=f"Error building pydantic model for {pipeline_details} - {err}",
|
|
418
|
-
|
|
447
|
+
stackTrace=traceback.format_exc(),
|
|
419
448
|
)
|
|
420
449
|
)
|
|
421
450
|
|
|
@@ -425,7 +454,7 @@ class AirflowSource(PipelineServiceSource):
|
|
|
425
454
|
left=StackTraceError(
|
|
426
455
|
name=pipeline_details.dag_id,
|
|
427
456
|
error=f"Wild error ingesting pipeline {pipeline_details} - {err}",
|
|
428
|
-
|
|
457
|
+
stackTrace=traceback.format_exc(),
|
|
429
458
|
)
|
|
430
459
|
)
|
|
431
460
|
|
|
@@ -31,7 +31,7 @@ class AirflowBaseModel(BaseModel):
|
|
|
31
31
|
dag_id: str
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
class
|
|
34
|
+
class AirflowTask(BaseModel):
|
|
35
35
|
pool: Optional[str]
|
|
36
36
|
doc_md: Optional[str]
|
|
37
37
|
inlets: Optional[List[Any]] = Field(alias="_inlets")
|
|
@@ -41,6 +41,7 @@ class Task(BaseModel):
|
|
|
41
41
|
downstream_task_ids: Optional[List[str]]
|
|
42
42
|
start_date: Optional[datetime]
|
|
43
43
|
end_date: Optional[datetime]
|
|
44
|
+
owner: Optional[str]
|
|
44
45
|
|
|
45
46
|
# Allow picking up data from key `inlets` and `_inlets`
|
|
46
47
|
class Config:
|
|
@@ -48,7 +49,7 @@ class Task(BaseModel):
|
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
class TaskList(BaseModel):
|
|
51
|
-
__root__: List[
|
|
52
|
+
__root__: List[AirflowTask]
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
class Dag(BaseModel):
|
|
@@ -68,6 +69,6 @@ class AirflowDagDetails(AirflowBaseModel):
|
|
|
68
69
|
max_active_runs: Optional[int]
|
|
69
70
|
description: Optional[str]
|
|
70
71
|
start_date: Optional[datetime]
|
|
71
|
-
tasks: List[
|
|
72
|
-
|
|
72
|
+
tasks: List[AirflowTask]
|
|
73
|
+
owner: Optional[str]
|
|
73
74
|
schedule_interval: Optional[str]
|
|
@@ -26,10 +26,13 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
26
26
|
from metadata.generated.schema.entity.services.connections.pipeline.dagsterConnection import (
|
|
27
27
|
DagsterConnection,
|
|
28
28
|
)
|
|
29
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
30
|
+
StackTraceError,
|
|
31
|
+
)
|
|
29
32
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
30
33
|
Source as WorkflowSource,
|
|
31
34
|
)
|
|
32
|
-
from metadata.ingestion.api.models import Either
|
|
35
|
+
from metadata.ingestion.api.models import Either
|
|
33
36
|
from metadata.ingestion.api.step import WorkflowFatalError
|
|
34
37
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
35
38
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
@@ -141,7 +144,7 @@ class DagsterSource(PipelineServiceSource):
|
|
|
141
144
|
left=StackTraceError(
|
|
142
145
|
name=pipeline_details.name,
|
|
143
146
|
error=f"Error to yield pipeline for {pipeline_details}: {exc}",
|
|
144
|
-
|
|
147
|
+
stackTrace=traceback.format_exc(),
|
|
145
148
|
)
|
|
146
149
|
)
|
|
147
150
|
|
|
@@ -197,7 +200,7 @@ class DagsterSource(PipelineServiceSource):
|
|
|
197
200
|
left=StackTraceError(
|
|
198
201
|
name=run.runId,
|
|
199
202
|
error=f"Error to yield run status for {run}: {exc}",
|
|
200
|
-
|
|
203
|
+
stackTrace=traceback.format_exc(),
|
|
201
204
|
)
|
|
202
205
|
)
|
|
203
206
|
|
|
@@ -227,7 +230,7 @@ class DagsterSource(PipelineServiceSource):
|
|
|
227
230
|
left=StackTraceError(
|
|
228
231
|
name=f"{pipeline_details.name} Pipeline Status",
|
|
229
232
|
error=f"Error to yield pipeline status for {pipeline_details}: {exc}",
|
|
230
|
-
|
|
233
|
+
stackTrace=traceback.format_exc(),
|
|
231
234
|
)
|
|
232
235
|
)
|
|
233
236
|
|
|
@@ -44,11 +44,7 @@ def test_connection(
|
|
|
44
44
|
of a metadata workflow or during an Automation Workflow
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
result = client.list_jobs()
|
|
49
|
-
return list(result)
|
|
50
|
-
|
|
51
|
-
test_fn = {"GetPipelines": custom_executor_for_pipeline}
|
|
47
|
+
test_fn = {"GetPipelines": client.list_jobs_test_connection}
|
|
52
48
|
|
|
53
49
|
test_connection_steps(
|
|
54
50
|
metadata=metadata,
|
|
@@ -30,10 +30,13 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
30
30
|
from metadata.generated.schema.entity.services.connections.pipeline.databricksPipelineConnection import (
|
|
31
31
|
DatabricksPipelineConnection,
|
|
32
32
|
)
|
|
33
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
34
|
+
StackTraceError,
|
|
35
|
+
)
|
|
33
36
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
34
37
|
Source as WorkflowSource,
|
|
35
38
|
)
|
|
36
|
-
from metadata.ingestion.api.models import Either
|
|
39
|
+
from metadata.ingestion.api.models import Either
|
|
37
40
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
38
41
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
39
42
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -78,7 +81,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
78
81
|
return cls(config, metadata)
|
|
79
82
|
|
|
80
83
|
def get_pipelines_list(self) -> Iterable[dict]:
|
|
81
|
-
for workflow in self.client.list_jobs():
|
|
84
|
+
for workflow in self.client.list_jobs() or []:
|
|
82
85
|
yield workflow
|
|
83
86
|
|
|
84
87
|
def get_pipeline_name(self, pipeline_details: dict) -> str:
|
|
@@ -108,7 +111,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
108
111
|
f"Error building Databricks Pipeline information from {pipeline_details}."
|
|
109
112
|
f" There might be Databricks Jobs API version incompatibilities - {err}"
|
|
110
113
|
),
|
|
111
|
-
|
|
114
|
+
stackTrace=traceback.format_exc(),
|
|
112
115
|
)
|
|
113
116
|
)
|
|
114
117
|
except ValidationError as err:
|
|
@@ -116,7 +119,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
116
119
|
left=StackTraceError(
|
|
117
120
|
name="Pipeline",
|
|
118
121
|
error=f"Error building pydantic model for {pipeline_details} - {err}",
|
|
119
|
-
|
|
122
|
+
stackTrace=traceback.format_exc(),
|
|
120
123
|
)
|
|
121
124
|
)
|
|
122
125
|
except Exception as err:
|
|
@@ -124,18 +127,18 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
124
127
|
left=StackTraceError(
|
|
125
128
|
name="Pipeline",
|
|
126
129
|
error=f"Wild error ingesting pipeline {pipeline_details} - {err}",
|
|
127
|
-
|
|
130
|
+
stackTrace=traceback.format_exc(),
|
|
128
131
|
)
|
|
129
132
|
)
|
|
130
133
|
|
|
131
134
|
def get_tasks(self, pipeline_details: dict) -> List[Task]:
|
|
132
135
|
task_list = []
|
|
133
|
-
self.
|
|
136
|
+
self.context.append(key="job_id_list", value=pipeline_details["job_id"])
|
|
134
137
|
|
|
135
138
|
downstream_tasks = self.get_downstream_tasks(
|
|
136
139
|
pipeline_details["settings"].get("tasks")
|
|
137
140
|
)
|
|
138
|
-
for task in pipeline_details["settings"].get("tasks"):
|
|
141
|
+
for task in pipeline_details["settings"].get("tasks", []):
|
|
139
142
|
task_list.append(
|
|
140
143
|
Task(
|
|
141
144
|
name=task["task_key"],
|
|
@@ -156,7 +159,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
156
159
|
return task_key
|
|
157
160
|
|
|
158
161
|
def get_downstream_tasks(self, workflow):
|
|
159
|
-
task_key_list = [task["task_key"] for task in workflow]
|
|
162
|
+
task_key_list = [task["task_key"] for task in workflow or []]
|
|
160
163
|
|
|
161
164
|
dependent_tasks = self.get_dependent_tasks(workflow)
|
|
162
165
|
|
|
@@ -179,7 +182,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
179
182
|
def get_dependent_tasks(self, workflow):
|
|
180
183
|
dependent_tasks = {}
|
|
181
184
|
|
|
182
|
-
for task in workflow:
|
|
185
|
+
for task in workflow or []:
|
|
183
186
|
depends_on = task.get("depends_on")
|
|
184
187
|
if depends_on:
|
|
185
188
|
dependent_tasks[task["task_key"]] = [v["task_key"] for v in depends_on]
|
|
@@ -192,7 +195,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
192
195
|
for job_id in self.context.job_id_list:
|
|
193
196
|
try:
|
|
194
197
|
runs = self.client.get_job_runs(job_id=job_id)
|
|
195
|
-
for attempt in runs:
|
|
198
|
+
for attempt in runs or []:
|
|
196
199
|
for task_run in attempt["tasks"]:
|
|
197
200
|
task_status = []
|
|
198
201
|
task_status.append(
|
|
@@ -238,7 +241,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
238
241
|
left=StackTraceError(
|
|
239
242
|
name=pipeline_fqn,
|
|
240
243
|
error=f"Failed to yield pipeline status: {exc}",
|
|
241
|
-
|
|
244
|
+
stackTrace=traceback.format_exc(),
|
|
242
245
|
)
|
|
243
246
|
)
|
|
244
247
|
|
|
@@ -27,10 +27,13 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
27
27
|
from metadata.generated.schema.entity.services.connections.pipeline.domoPipelineConnection import (
|
|
28
28
|
DomoPipelineConnection,
|
|
29
29
|
)
|
|
30
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
31
|
+
StackTraceError,
|
|
32
|
+
)
|
|
30
33
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
31
34
|
Source as WorkflowSource,
|
|
32
35
|
)
|
|
33
|
-
from metadata.ingestion.api.models import Either
|
|
36
|
+
from metadata.ingestion.api.models import Either
|
|
34
37
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
35
38
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
36
39
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -103,7 +106,7 @@ class DomopipelineSource(PipelineServiceSource):
|
|
|
103
106
|
left=StackTraceError(
|
|
104
107
|
name=pipeline_details.get("name", "unknown"),
|
|
105
108
|
error=f"Error extracting data from {pipeline_details.get('name', 'unknown')} - {err}",
|
|
106
|
-
|
|
109
|
+
stackTrace=traceback.format_exc(),
|
|
107
110
|
)
|
|
108
111
|
)
|
|
109
112
|
except Exception as err:
|
|
@@ -111,7 +114,7 @@ class DomopipelineSource(PipelineServiceSource):
|
|
|
111
114
|
left=StackTraceError(
|
|
112
115
|
name=pipeline_details.get("name", "unknown"),
|
|
113
116
|
error=f"Wild error ingesting pipeline {pipeline_details.get('name', 'unknown')} - {err}",
|
|
114
|
-
|
|
117
|
+
stackTrace=traceback.format_exc(),
|
|
115
118
|
)
|
|
116
119
|
)
|
|
117
120
|
|
|
@@ -175,7 +178,7 @@ class DomopipelineSource(PipelineServiceSource):
|
|
|
175
178
|
left=StackTraceError(
|
|
176
179
|
name=pipeline_fqn,
|
|
177
180
|
error=f"Error extracting status for {pipeline_id} - {err}",
|
|
178
|
-
|
|
181
|
+
stackTrace=traceback.format_exc(),
|
|
179
182
|
)
|
|
180
183
|
)
|
|
181
184
|
|
|
@@ -28,10 +28,13 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
28
28
|
from metadata.generated.schema.entity.services.connections.pipeline.gluePipelineConnection import (
|
|
29
29
|
GluePipelineConnection,
|
|
30
30
|
)
|
|
31
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
32
|
+
StackTraceError,
|
|
33
|
+
)
|
|
31
34
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
32
35
|
Source as WorkflowSource,
|
|
33
36
|
)
|
|
34
|
-
from metadata.ingestion.api.models import Either
|
|
37
|
+
from metadata.ingestion.api.models import Either
|
|
35
38
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
36
39
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
37
40
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -183,7 +186,7 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
183
186
|
left=StackTraceError(
|
|
184
187
|
name=pipeline_fqn,
|
|
185
188
|
error=f"Failed to yield pipeline status: {exc}",
|
|
186
|
-
|
|
189
|
+
stackTrace=traceback.format_exc(),
|
|
187
190
|
)
|
|
188
191
|
)
|
|
189
192
|
|