openmetadata-ingestion 1.2.5.1__py3-none-any.whl → 1.3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- 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 +6 -3
- metadata/clients/aws_client.py +4 -0
- metadata/clients/domo_client.py +0 -2
- metadata/cmd.py +24 -13
- 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/source/metadata.py +11 -4
- 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 +8 -2
- 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/examples/workflows/databricks.yaml +0 -1
- 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 +391 -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 +1 -1
- 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 +2 -3
- 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 +1 -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 +1 -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 +28 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- 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 +18 -4
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +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} +13 -3
- 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 +1 -1
- 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 +6 -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 +2 -2
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
- 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/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 +2 -2
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +2 -2
- 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/sapHanaConnection.py +2 -2
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +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 +13 -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 +2 -2
- 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 +89 -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 +6 -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/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/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 +2 -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/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 +5 -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 +5 -5
- 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/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 +3 -2
- 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 +20 -0
- metadata/ingestion/api/topology_runner.py +114 -168
- metadata/ingestion/bulksink/metadata_usage.py +11 -5
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/lineage/parser.py +4 -5
- metadata/ingestion/lineage/sql_lineage.py +9 -17
- metadata/ingestion/models/custom_pydantic.py +4 -2
- metadata/ingestion/models/lf_tags_model.py +33 -0
- metadata/ingestion/models/patch_request.py +108 -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/mixins/es_mixin.py +17 -0
- metadata/ingestion/ometa/mixins/patch_mixin.py +17 -68
- 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 +18 -25
- metadata/ingestion/ometa/routes.py +7 -0
- metadata/ingestion/processor/query_parser.py +9 -2
- metadata/ingestion/sink/metadata_rest.py +25 -6
- 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 +38 -25
- metadata/ingestion/source/dashboard/metabase/metadata.py +23 -6
- 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/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 -10
- 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 +58 -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/metadata.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +24 -3
- metadata/ingestion/source/database/bigquery/metadata.py +39 -27
- metadata/ingestion/source/database/bigquery/queries.py +11 -4
- metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
- metadata/ingestion/source/database/bigquery/usage.py +1 -3
- 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 +8 -2
- metadata/ingestion/source/database/common_nosql_source.py +8 -4
- metadata/ingestion/source/database/database_service.py +89 -7
- metadata/ingestion/source/database/databricks/client.py +5 -10
- 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 +448 -11
- metadata/ingestion/source/database/databricks/queries.py +28 -0
- metadata/ingestion/source/database/databricks/query_parser.py +5 -1
- metadata/ingestion/source/database/databricks/usage.py +2 -2
- metadata/ingestion/source/database/datalake/connection.py +31 -4
- metadata/ingestion/source/database/datalake/metadata.py +113 -27
- metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
- 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 +11 -25
- 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 +2 -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 +179 -1
- metadata/ingestion/source/database/mssql/utils.py +207 -4
- 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 +98 -17
- metadata/ingestion/source/database/oracle/utils.py +0 -1
- 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 +8 -51
- metadata/ingestion/source/database/snowflake/models.py +6 -1
- metadata/ingestion/source/database/snowflake/queries.py +0 -4
- metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
- metadata/ingestion/source/database/snowflake/utils.py +2 -6
- 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 +6 -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/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/metadata.py +12 -9
- 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/profiler/api/models.py +19 -1
- metadata/profiler/interface/pandas/profiler_interface.py +59 -18
- metadata/profiler/interface/profiler_interface.py +13 -2
- 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/length.py +1 -0
- metadata/profiler/orm/functions/median.py +7 -0
- metadata/profiler/orm/functions/table_metric_computer.py +462 -0
- metadata/profiler/orm/registry.py +1 -0
- metadata/profiler/processor/core.py +116 -52
- metadata/profiler/processor/default.py +14 -3
- metadata/profiler/processor/handle_partition.py +2 -2
- metadata/profiler/processor/processor.py +9 -4
- 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/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 +43 -10
- metadata/profiler/source/metadata_ext.py +16 -50
- 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/datalake/datalake_utils.py +363 -129
- metadata/utils/entity_link.py +26 -6
- metadata/utils/fqn.py +20 -0
- metadata/utils/helpers.py +55 -9
- 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/client/loader.py +0 -1
- metadata/utils/secrets/noop_secrets_manager.py +4 -3
- metadata/utils/secrets/secrets_manager_factory.py +3 -4
- 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 -1
- 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 +84 -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 +204 -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.0.0.dist-info/METADATA +749 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/RECORD +812 -725
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.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
- openmetadata_ingestion-1.2.5.1.dist-info/METADATA +0 -426
- /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks/unity_catalog → doris}/__init__.py +0 -0
- /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/sas}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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]
|
|
@@ -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
|
|
|
@@ -37,8 +37,8 @@ from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
|
37
37
|
from metadata.ingestion.models.topology import (
|
|
38
38
|
NodeStage,
|
|
39
39
|
ServiceTopology,
|
|
40
|
+
TopologyContext,
|
|
40
41
|
TopologyNode,
|
|
41
|
-
create_source_context,
|
|
42
42
|
)
|
|
43
43
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
44
44
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -116,7 +116,7 @@ class PipelineServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
116
116
|
service_connection: PipelineConnection.__fields__["config"].type_
|
|
117
117
|
|
|
118
118
|
topology = PipelineServiceTopology()
|
|
119
|
-
context =
|
|
119
|
+
context = TopologyContext.create(topology)
|
|
120
120
|
pipeline_source_state: Set = set()
|
|
121
121
|
|
|
122
122
|
def __init__(
|
|
@@ -138,6 +138,10 @@ class PipelineServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
138
138
|
self.client = self.connection
|
|
139
139
|
self.test_connection()
|
|
140
140
|
|
|
141
|
+
@property
|
|
142
|
+
def name(self) -> str:
|
|
143
|
+
return self.service_connection.type.name
|
|
144
|
+
|
|
141
145
|
@abstractmethod
|
|
142
146
|
def yield_pipeline(
|
|
143
147
|
self, pipeline_details: Any
|
|
@@ -191,9 +191,12 @@ def test_connection(
|
|
|
191
191
|
of a metadata workflow or during an Automation Workflow
|
|
192
192
|
"""
|
|
193
193
|
|
|
194
|
+
def test_get_search_indexes():
|
|
195
|
+
client.indices.get_alias(expand_wildcards="open")
|
|
196
|
+
|
|
194
197
|
test_fn = {
|
|
195
198
|
"CheckAccess": client.info,
|
|
196
|
-
"GetSearchIndexes":
|
|
199
|
+
"GetSearchIndexes": test_get_search_indexes,
|
|
197
200
|
}
|
|
198
201
|
|
|
199
202
|
test_connection_steps(
|
|
@@ -69,7 +69,7 @@ class ElasticsearchSource(SearchServiceSource):
|
|
|
69
69
|
"""
|
|
70
70
|
Get List of all search index
|
|
71
71
|
"""
|
|
72
|
-
index_list = self.client.indices.get_alias() or {}
|
|
72
|
+
index_list = self.client.indices.get_alias(expand_wildcards="open") or {}
|
|
73
73
|
for index in index_list.keys():
|
|
74
74
|
yield self.client.indices.get(index=str(index))
|
|
75
75
|
|
|
@@ -111,7 +111,6 @@ class ElasticsearchSource(SearchServiceSource):
|
|
|
111
111
|
Method to Get Sample Data of Search Index Entity
|
|
112
112
|
"""
|
|
113
113
|
if self.source_config.includeSampleData and self.context.search_index:
|
|
114
|
-
|
|
115
114
|
sample_data = self.client.search(
|
|
116
115
|
index=self.context.search_index,
|
|
117
116
|
q=WILDCARD_SEARCH,
|
|
@@ -43,8 +43,8 @@ from metadata.ingestion.models.search_index_data import OMetaIndexSampleData
|
|
|
43
43
|
from metadata.ingestion.models.topology import (
|
|
44
44
|
NodeStage,
|
|
45
45
|
ServiceTopology,
|
|
46
|
+
TopologyContext,
|
|
46
47
|
TopologyNode,
|
|
47
|
-
create_source_context,
|
|
48
48
|
)
|
|
49
49
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
50
50
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -110,7 +110,7 @@ class SearchServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
110
110
|
service_connection: SearchConnection.__fields__["config"].type_
|
|
111
111
|
|
|
112
112
|
topology = SearchServiceTopology()
|
|
113
|
-
context =
|
|
113
|
+
context = TopologyContext.create(topology)
|
|
114
114
|
index_source_state: Set = set()
|
|
115
115
|
|
|
116
116
|
def __init__(
|
|
@@ -131,6 +131,10 @@ class SearchServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
131
131
|
self.connection_obj = self.connection
|
|
132
132
|
self.test_connection()
|
|
133
133
|
|
|
134
|
+
@property
|
|
135
|
+
def name(self) -> str:
|
|
136
|
+
return self.service_connection.type.name
|
|
137
|
+
|
|
134
138
|
@abstractmethod
|
|
135
139
|
def yield_search_index(
|
|
136
140
|
self, search_index_details: Any
|
|
@@ -30,6 +30,9 @@ from metadata.generated.schema.entity.services.connections.database.datalake.s3C
|
|
|
30
30
|
from metadata.generated.schema.entity.services.connections.storage.s3Connection import (
|
|
31
31
|
S3Connection,
|
|
32
32
|
)
|
|
33
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
34
|
+
StackTraceError,
|
|
35
|
+
)
|
|
33
36
|
from metadata.generated.schema.metadataIngestion.storage.containerMetadataConfig import (
|
|
34
37
|
MetadataEntry,
|
|
35
38
|
StorageContainerConfig,
|
|
@@ -38,7 +41,7 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
38
41
|
Source as WorkflowSource,
|
|
39
42
|
)
|
|
40
43
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
41
|
-
from metadata.ingestion.api.models import Either
|
|
44
|
+
from metadata.ingestion.api.models import Either
|
|
42
45
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
43
46
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
44
47
|
from metadata.ingestion.source.storage.s3.models import (
|
|
@@ -159,7 +162,7 @@ class S3Source(StorageServiceSource):
|
|
|
159
162
|
StackTraceError(
|
|
160
163
|
name=bucket_response.name,
|
|
161
164
|
error=f"Validation error while creating Container from bucket details - {err}",
|
|
162
|
-
|
|
165
|
+
stackTrace=traceback.format_exc(),
|
|
163
166
|
)
|
|
164
167
|
)
|
|
165
168
|
except Exception as err:
|
|
@@ -167,26 +170,26 @@ class S3Source(StorageServiceSource):
|
|
|
167
170
|
StackTraceError(
|
|
168
171
|
name=bucket_response.name,
|
|
169
172
|
error=f"Wild error while creating Container from bucket details - {err}",
|
|
170
|
-
|
|
173
|
+
stackTrace=traceback.format_exc(),
|
|
171
174
|
)
|
|
172
175
|
)
|
|
173
176
|
|
|
174
177
|
def yield_create_container_requests(
|
|
175
178
|
self, container_details: S3ContainerDetails
|
|
176
179
|
) -> Iterable[Either[CreateContainerRequest]]:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
fileFormats=container_details.file_formats,
|
|
188
|
-
)
|
|
180
|
+
container_request = CreateContainerRequest(
|
|
181
|
+
name=container_details.name,
|
|
182
|
+
prefix=container_details.prefix,
|
|
183
|
+
numberOfObjects=container_details.number_of_objects,
|
|
184
|
+
size=container_details.size,
|
|
185
|
+
dataModel=container_details.data_model,
|
|
186
|
+
service=self.context.objectstore_service,
|
|
187
|
+
parent=container_details.parent,
|
|
188
|
+
sourceUrl=container_details.sourceUrl,
|
|
189
|
+
fileFormats=container_details.file_formats,
|
|
189
190
|
)
|
|
191
|
+
yield Either(right=container_request)
|
|
192
|
+
self.register_record(container_request=container_request)
|
|
190
193
|
|
|
191
194
|
def _generate_container_details(
|
|
192
195
|
self,
|
|
@@ -424,7 +427,7 @@ class S3Source(StorageServiceSource):
|
|
|
424
427
|
"""
|
|
425
428
|
try:
|
|
426
429
|
logger.info(
|
|
427
|
-
f"
|
|
430
|
+
f"Looking for metadata template file at - s3://{bucket_name}/{OPENMETADATA_TEMPLATE_FILE_NAME}"
|
|
428
431
|
)
|
|
429
432
|
response_object = self.s3_reader.read(
|
|
430
433
|
path=OPENMETADATA_TEMPLATE_FILE_NAME,
|
|
@@ -435,7 +438,9 @@ class S3Source(StorageServiceSource):
|
|
|
435
438
|
metadata_config = StorageContainerConfig.parse_obj(content)
|
|
436
439
|
return metadata_config
|
|
437
440
|
except ReadException:
|
|
438
|
-
|
|
441
|
+
logger.warning(
|
|
442
|
+
f"No metadata file found at s3://{bucket_name}/{OPENMETADATA_TEMPLATE_FILE_NAME}"
|
|
443
|
+
)
|
|
439
444
|
except Exception as exc:
|
|
440
445
|
logger.debug(traceback.format_exc())
|
|
441
446
|
logger.warning(
|