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
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
DataLake connector to fetch metadata from a files stored s3, gcs and Hdfs
|
|
14
14
|
"""
|
|
15
15
|
import json
|
|
16
|
+
import os
|
|
16
17
|
import traceback
|
|
17
18
|
from typing import Any, Iterable, Tuple, Union
|
|
18
19
|
|
|
@@ -41,6 +42,9 @@ from metadata.generated.schema.entity.services.connections.database.datalake.s3C
|
|
|
41
42
|
from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
|
|
42
43
|
DatalakeConnection,
|
|
43
44
|
)
|
|
45
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
46
|
+
StackTraceError,
|
|
47
|
+
)
|
|
44
48
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
45
49
|
DatabaseServiceMetadataPipeline,
|
|
46
50
|
)
|
|
@@ -50,12 +54,18 @@ from metadata.generated.schema.metadataIngestion.storage.containerMetadataConfig
|
|
|
50
54
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
51
55
|
Source as WorkflowSource,
|
|
52
56
|
)
|
|
53
|
-
from metadata.
|
|
57
|
+
from metadata.generated.schema.security.credentials.gcpValues import (
|
|
58
|
+
GcpCredentialsValues,
|
|
59
|
+
)
|
|
60
|
+
from metadata.ingestion.api.models import Either
|
|
54
61
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
55
62
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
56
63
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
57
64
|
from metadata.ingestion.source.connections import get_connection
|
|
58
65
|
from metadata.ingestion.source.database.database_service import DatabaseServiceSource
|
|
66
|
+
from metadata.ingestion.source.database.datalake.connection import (
|
|
67
|
+
set_gcs_datalake_client,
|
|
68
|
+
)
|
|
59
69
|
from metadata.ingestion.source.database.stored_procedures_mixin import QueryByProcedure
|
|
60
70
|
from metadata.ingestion.source.storage.storage_service import (
|
|
61
71
|
OPENMETADATA_TEMPLATE_FILE_NAME,
|
|
@@ -65,12 +75,13 @@ from metadata.readers.file.base import ReadException
|
|
|
65
75
|
from metadata.readers.file.config_source_factory import get_reader
|
|
66
76
|
from metadata.utils import fqn
|
|
67
77
|
from metadata.utils.constants import DEFAULT_DATABASE
|
|
78
|
+
from metadata.utils.credentials import GOOGLE_CREDENTIALS
|
|
68
79
|
from metadata.utils.datalake.datalake_utils import (
|
|
80
|
+
DataFrameColumnParser,
|
|
69
81
|
fetch_dataframe,
|
|
70
|
-
get_columns,
|
|
71
82
|
get_file_format_type,
|
|
72
83
|
)
|
|
73
|
-
from metadata.utils.filters import filter_by_schema, filter_by_table
|
|
84
|
+
from metadata.utils.filters import filter_by_database, filter_by_schema, filter_by_table
|
|
74
85
|
from metadata.utils.logger import ingestion_logger
|
|
75
86
|
from metadata.utils.s3_utils import list_s3_objects
|
|
76
87
|
|
|
@@ -93,8 +104,10 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
93
104
|
)
|
|
94
105
|
self.metadata = metadata
|
|
95
106
|
self.service_connection = self.config.serviceConnection.__root__.config
|
|
107
|
+
self.temp_credentials_file_path = []
|
|
96
108
|
self.connection = get_connection(self.service_connection)
|
|
97
|
-
|
|
109
|
+
if GOOGLE_CREDENTIALS in os.environ:
|
|
110
|
+
self.temp_credentials_file_path.append(os.environ[GOOGLE_CREDENTIALS])
|
|
98
111
|
self.client = self.connection.client
|
|
99
112
|
self.table_constraints = None
|
|
100
113
|
self.database_source_state = set()
|
|
@@ -122,8 +135,47 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
122
135
|
Sources with multiple databases should overwrite this and
|
|
123
136
|
apply the necessary filters.
|
|
124
137
|
"""
|
|
125
|
-
|
|
126
|
-
|
|
138
|
+
if isinstance(self.config_source, GCSConfig):
|
|
139
|
+
project_id_list = (
|
|
140
|
+
self.service_connection.configSource.securityConfig.gcpConfig.projectId.__root__
|
|
141
|
+
)
|
|
142
|
+
if not isinstance(
|
|
143
|
+
project_id_list,
|
|
144
|
+
list,
|
|
145
|
+
):
|
|
146
|
+
project_id_list = [project_id_list]
|
|
147
|
+
for project_id in project_id_list:
|
|
148
|
+
database_fqn = fqn.build(
|
|
149
|
+
self.metadata,
|
|
150
|
+
entity_type=Database,
|
|
151
|
+
service_name=self.context.database_service,
|
|
152
|
+
database_name=project_id,
|
|
153
|
+
)
|
|
154
|
+
if filter_by_database(
|
|
155
|
+
self.source_config.databaseFilterPattern,
|
|
156
|
+
database_fqn
|
|
157
|
+
if self.source_config.useFqnForFiltering
|
|
158
|
+
else project_id,
|
|
159
|
+
):
|
|
160
|
+
self.status.filter(database_fqn, "Database Filtered out")
|
|
161
|
+
else:
|
|
162
|
+
try:
|
|
163
|
+
self.client = set_gcs_datalake_client(
|
|
164
|
+
config=self.config_source, project_id=project_id
|
|
165
|
+
)
|
|
166
|
+
if GOOGLE_CREDENTIALS in os.environ:
|
|
167
|
+
self.temp_credentials_file_path.append(
|
|
168
|
+
os.environ[GOOGLE_CREDENTIALS]
|
|
169
|
+
)
|
|
170
|
+
yield project_id
|
|
171
|
+
except Exception as exc:
|
|
172
|
+
logger.debug(traceback.format_exc())
|
|
173
|
+
logger.error(
|
|
174
|
+
f"Error trying to connect to database {project_id}: {exc}"
|
|
175
|
+
)
|
|
176
|
+
else:
|
|
177
|
+
database_name = self.service_connection.databaseName or DEFAULT_DATABASE
|
|
178
|
+
yield database_name
|
|
127
179
|
|
|
128
180
|
def yield_database(
|
|
129
181
|
self, database_name: str
|
|
@@ -132,6 +184,8 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
132
184
|
From topology.
|
|
133
185
|
Prepare a database request and pass it to the sink
|
|
134
186
|
"""
|
|
187
|
+
if isinstance(self.config_source, GCSConfig):
|
|
188
|
+
database_name = self.client.project
|
|
135
189
|
yield Either(
|
|
136
190
|
right=CreateDatabaseRequest(
|
|
137
191
|
name=database_name,
|
|
@@ -140,24 +194,42 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
140
194
|
)
|
|
141
195
|
|
|
142
196
|
def fetch_gcs_bucket_names(self):
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
197
|
+
"""
|
|
198
|
+
Fetch Google cloud storage buckets
|
|
199
|
+
"""
|
|
200
|
+
try:
|
|
201
|
+
# List all the buckets in the project
|
|
202
|
+
for bucket in self.client.list_buckets():
|
|
203
|
+
# Build a fully qualified name (FQN) for each bucket
|
|
204
|
+
schema_fqn = fqn.build(
|
|
205
|
+
self.metadata,
|
|
206
|
+
entity_type=DatabaseSchema,
|
|
207
|
+
service_name=self.context.database_service,
|
|
208
|
+
database_name=self.context.database,
|
|
209
|
+
schema_name=bucket.name,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Check if the bucket matches a certain filter pattern
|
|
213
|
+
if filter_by_schema(
|
|
214
|
+
self.config.sourceConfig.config.schemaFilterPattern,
|
|
215
|
+
schema_fqn
|
|
216
|
+
if self.config.sourceConfig.config.useFqnForFiltering
|
|
217
|
+
else bucket.name,
|
|
218
|
+
):
|
|
219
|
+
# If it does not match, the bucket is filtered out
|
|
220
|
+
self.status.filter(schema_fqn, "Bucket Filtered Out")
|
|
221
|
+
continue
|
|
159
222
|
|
|
160
|
-
|
|
223
|
+
# If it does match, the bucket name is yielded
|
|
224
|
+
yield bucket.name
|
|
225
|
+
except Exception as exc:
|
|
226
|
+
yield Either(
|
|
227
|
+
left=StackTraceError(
|
|
228
|
+
name="Bucket",
|
|
229
|
+
error=f"Unexpected exception to yield bucket: {exc}",
|
|
230
|
+
stackTrace=traceback.format_exc(),
|
|
231
|
+
)
|
|
232
|
+
)
|
|
161
233
|
|
|
162
234
|
def fetch_s3_bucket_names(self):
|
|
163
235
|
for bucket in self.client.list_buckets()["Buckets"]:
|
|
@@ -344,9 +416,14 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
344
416
|
file_extension=table_extension,
|
|
345
417
|
),
|
|
346
418
|
)
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
419
|
+
if data_frame:
|
|
420
|
+
column_parser = DataFrameColumnParser.create(
|
|
421
|
+
data_frame[0], table_extension
|
|
422
|
+
)
|
|
423
|
+
columns = column_parser.get_columns()
|
|
424
|
+
else:
|
|
425
|
+
# If no data_frame (due to unsupported type), ignore
|
|
426
|
+
columns = None
|
|
350
427
|
if columns:
|
|
351
428
|
table_request = CreateTableRequest(
|
|
352
429
|
name=table_name,
|
|
@@ -369,7 +446,7 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
369
446
|
left=StackTraceError(
|
|
370
447
|
name="Table",
|
|
371
448
|
error=f"Unexpected exception to yield table [{table_name}]: {exc}",
|
|
372
|
-
|
|
449
|
+
stackTrace=traceback.format_exc(),
|
|
373
450
|
)
|
|
374
451
|
)
|
|
375
452
|
|
|
@@ -431,3 +508,12 @@ class DatalakeSource(DatabaseServiceSource):
|
|
|
431
508
|
def close(self):
|
|
432
509
|
if isinstance(self.config_source, AzureConfig):
|
|
433
510
|
self.client.close()
|
|
511
|
+
if isinstance(self.config_source, GCSConfig):
|
|
512
|
+
os.environ.pop("GOOGLE_CLOUD_PROJECT", "")
|
|
513
|
+
if isinstance(self.service_connection, GcpCredentialsValues) and (
|
|
514
|
+
GOOGLE_CREDENTIALS in os.environ
|
|
515
|
+
):
|
|
516
|
+
del os.environ[GOOGLE_CREDENTIALS]
|
|
517
|
+
for temp_file_path in self.temp_credentials_file_path:
|
|
518
|
+
if os.path.exists(temp_file_path):
|
|
519
|
+
os.remove(temp_file_path)
|
|
@@ -172,6 +172,11 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
|
|
|
172
172
|
params_data["job_definition_id"] = job_id
|
|
173
173
|
|
|
174
174
|
response = client.get(f"/accounts/{account_id}/runs", data=params_data)
|
|
175
|
+
if not response and not response.get("data"):
|
|
176
|
+
raise DBTConfigException(
|
|
177
|
+
"Unable to get the dbt job runs information.\n"
|
|
178
|
+
"Please check if the auth token is correct and has the necessary scopes to fetch dbt runs"
|
|
179
|
+
)
|
|
175
180
|
runs_data = response.get("data")
|
|
176
181
|
if runs_data:
|
|
177
182
|
run_id = runs_data[0]["id"]
|
|
@@ -31,8 +31,8 @@ from metadata.ingestion.models.ometa_classification import OMetaTagAndClassifica
|
|
|
31
31
|
from metadata.ingestion.models.topology import (
|
|
32
32
|
NodeStage,
|
|
33
33
|
ServiceTopology,
|
|
34
|
+
TopologyContext,
|
|
34
35
|
TopologyNode,
|
|
35
|
-
create_source_context,
|
|
36
36
|
)
|
|
37
37
|
from metadata.ingestion.source.database.database_service import DataModelLink
|
|
38
38
|
from metadata.ingestion.source.database.dbt.dbt_config import get_dbt_details
|
|
@@ -56,11 +56,6 @@ class DbtServiceTopology(ServiceTopology):
|
|
|
56
56
|
|
|
57
57
|
root = TopologyNode(
|
|
58
58
|
producer="get_dbt_files",
|
|
59
|
-
stages=[],
|
|
60
|
-
children=["process_dbt_files"],
|
|
61
|
-
)
|
|
62
|
-
process_dbt_files = TopologyNode(
|
|
63
|
-
producer="process_dbt_files",
|
|
64
59
|
stages=[
|
|
65
60
|
NodeStage(
|
|
66
61
|
type_=DbtFiles,
|
|
@@ -82,12 +77,13 @@ class DbtServiceTopology(ServiceTopology):
|
|
|
82
77
|
context="tags",
|
|
83
78
|
processor="yield_dbt_tags",
|
|
84
79
|
nullable=True,
|
|
85
|
-
|
|
80
|
+
store_all_in_context=True,
|
|
86
81
|
),
|
|
87
82
|
NodeStage(
|
|
88
83
|
type_=DataModelLink,
|
|
89
84
|
processor="yield_data_models",
|
|
90
85
|
nullable=True,
|
|
86
|
+
consumer=["validate_dbt_files"],
|
|
91
87
|
),
|
|
92
88
|
],
|
|
93
89
|
)
|
|
@@ -97,6 +93,7 @@ class DbtServiceTopology(ServiceTopology):
|
|
|
97
93
|
NodeStage(
|
|
98
94
|
type_=AddLineageRequest,
|
|
99
95
|
processor="create_dbt_lineage",
|
|
96
|
+
consumer=["yield_data_models"],
|
|
100
97
|
),
|
|
101
98
|
NodeStage(
|
|
102
99
|
type_=AddLineageRequest,
|
|
@@ -115,6 +112,7 @@ class DbtServiceTopology(ServiceTopology):
|
|
|
115
112
|
NodeStage(
|
|
116
113
|
type_=CreateTestDefinitionRequest,
|
|
117
114
|
processor="create_dbt_tests_definition",
|
|
115
|
+
consumer=["yield_data_models"],
|
|
118
116
|
),
|
|
119
117
|
NodeStage(
|
|
120
118
|
type_=CreateTestCaseRequest,
|
|
@@ -135,9 +133,13 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
135
133
|
"""
|
|
136
134
|
|
|
137
135
|
topology = DbtServiceTopology()
|
|
138
|
-
context =
|
|
136
|
+
context = TopologyContext.create(topology)
|
|
139
137
|
source_config: DbtPipeline
|
|
140
138
|
|
|
139
|
+
@property
|
|
140
|
+
def name(self) -> str:
|
|
141
|
+
return "dbt"
|
|
142
|
+
|
|
141
143
|
def remove_manifest_non_required_keys(self, manifest_dict: dict):
|
|
142
144
|
"""
|
|
143
145
|
Method to remove the non required keys from manifest file
|
|
@@ -157,12 +159,6 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
157
159
|
}
|
|
158
160
|
)
|
|
159
161
|
|
|
160
|
-
def process_dbt_files(self) -> Iterable[DbtFiles]:
|
|
161
|
-
"""
|
|
162
|
-
Method return the dbt file from topology
|
|
163
|
-
"""
|
|
164
|
-
yield self.context.dbt_file
|
|
165
|
-
|
|
166
162
|
def get_dbt_files(self) -> Iterable[DbtFiles]:
|
|
167
163
|
dbt_files = get_dbt_details(self.source_config.dbtConfigSource)
|
|
168
164
|
for dbt_file in dbt_files:
|
|
@@ -14,6 +14,7 @@ DBT utils methods.
|
|
|
14
14
|
import traceback
|
|
15
15
|
from typing import Optional, Union
|
|
16
16
|
|
|
17
|
+
from metadata.generated.schema.entity.data.table import Table
|
|
17
18
|
from metadata.generated.schema.tests.testSuite import TestSuite
|
|
18
19
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
19
20
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -81,7 +82,8 @@ def generate_entity_link(dbt_test):
|
|
|
81
82
|
manifest_node = dbt_test.get(DbtCommonEnum.MANIFEST_NODE.value)
|
|
82
83
|
entity_link_list = [
|
|
83
84
|
entity_link.get_entity_link(
|
|
84
|
-
|
|
85
|
+
Table,
|
|
86
|
+
fqn=table_fqn,
|
|
85
87
|
column_name=manifest_node.column_name
|
|
86
88
|
if hasattr(manifest_node, "column_name")
|
|
87
89
|
else None,
|
|
@@ -28,14 +28,15 @@ from metadata.generated.schema.entity.data.table import (
|
|
|
28
28
|
Table,
|
|
29
29
|
)
|
|
30
30
|
from metadata.generated.schema.entity.services.databaseService import DatabaseService
|
|
31
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
32
|
+
StackTraceError,
|
|
33
|
+
)
|
|
31
34
|
from metadata.generated.schema.entity.teams.team import Team
|
|
32
35
|
from metadata.generated.schema.entity.teams.user import User
|
|
33
36
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
34
37
|
Source as WorkflowSource,
|
|
35
38
|
)
|
|
36
39
|
from metadata.generated.schema.tests.basic import (
|
|
37
|
-
TestCaseFailureStatus,
|
|
38
|
-
TestCaseFailureStatusType,
|
|
39
40
|
TestCaseResult,
|
|
40
41
|
TestCaseStatus,
|
|
41
42
|
TestResultValue,
|
|
@@ -46,11 +47,11 @@ from metadata.generated.schema.tests.testDefinition import (
|
|
|
46
47
|
TestDefinition,
|
|
47
48
|
TestPlatform,
|
|
48
49
|
)
|
|
49
|
-
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
50
|
+
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
50
51
|
from metadata.generated.schema.type.entityLineage import EntitiesEdge, LineageDetails
|
|
51
52
|
from metadata.generated.schema.type.entityLineage import Source as LineageSource
|
|
52
53
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
53
|
-
from metadata.ingestion.api.models import Either
|
|
54
|
+
from metadata.ingestion.api.models import Either
|
|
54
55
|
from metadata.ingestion.lineage.models import ConnectionTypeDialectMapper
|
|
55
56
|
from metadata.ingestion.lineage.sql_lineage import get_lineage_by_query
|
|
56
57
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
@@ -270,7 +271,7 @@ class DbtSource(DbtServiceSource):
|
|
|
270
271
|
left=StackTraceError(
|
|
271
272
|
name=key,
|
|
272
273
|
error=f"Unable to process DBT tags for node: f{key} - {exc}",
|
|
273
|
-
|
|
274
|
+
stackTrace=traceback.format_exc(),
|
|
274
275
|
)
|
|
275
276
|
)
|
|
276
277
|
try:
|
|
@@ -298,7 +299,7 @@ class DbtSource(DbtServiceSource):
|
|
|
298
299
|
left=StackTraceError(
|
|
299
300
|
name="Tags and Classification",
|
|
300
301
|
error=f"Unexpected exception creating DBT tags: {exc}",
|
|
301
|
-
|
|
302
|
+
stackTrace=traceback.format_exc(),
|
|
302
303
|
)
|
|
303
304
|
)
|
|
304
305
|
|
|
@@ -469,7 +470,7 @@ class DbtSource(DbtServiceSource):
|
|
|
469
470
|
left=StackTraceError(
|
|
470
471
|
name=key,
|
|
471
472
|
error=f"Unexpected exception parsing DBT node due to {exc}",
|
|
472
|
-
|
|
473
|
+
stackTrace=traceback.format_exc(),
|
|
473
474
|
)
|
|
474
475
|
)
|
|
475
476
|
|
|
@@ -677,7 +678,7 @@ class DbtSource(DbtServiceSource):
|
|
|
677
678
|
f"Failed to parse the query {data_model_link.datamodel.sql.__root__}"
|
|
678
679
|
f" to capture lineage: {exc}"
|
|
679
680
|
),
|
|
680
|
-
|
|
681
|
+
stackTrace=traceback.format_exc(),
|
|
681
682
|
)
|
|
682
683
|
)
|
|
683
684
|
|
|
@@ -691,7 +692,6 @@ class DbtSource(DbtServiceSource):
|
|
|
691
692
|
)
|
|
692
693
|
if table_entity:
|
|
693
694
|
try:
|
|
694
|
-
|
|
695
695
|
service_name, database_name, schema_name, table_name = fqn.split(
|
|
696
696
|
table_entity.fullyQualifiedName.__root__
|
|
697
697
|
)
|
|
@@ -783,7 +783,7 @@ class DbtSource(DbtServiceSource):
|
|
|
783
783
|
left=StackTraceError(
|
|
784
784
|
name="Test Definition",
|
|
785
785
|
error=f"Failed to parse the node to capture tests {err}",
|
|
786
|
-
|
|
786
|
+
stackTrace=traceback.format_exc(),
|
|
787
787
|
)
|
|
788
788
|
)
|
|
789
789
|
|
|
@@ -821,11 +821,10 @@ class DbtSource(DbtServiceSource):
|
|
|
821
821
|
left=StackTraceError(
|
|
822
822
|
name="Test Cases",
|
|
823
823
|
error=f"Failed to parse the node to capture tests {err}",
|
|
824
|
-
|
|
824
|
+
stackTrace=traceback.format_exc(),
|
|
825
825
|
)
|
|
826
826
|
)
|
|
827
827
|
|
|
828
|
-
# pylint: disable=too-many-locals
|
|
829
828
|
def add_dbt_test_result(self, dbt_test: dict):
|
|
830
829
|
"""
|
|
831
830
|
After test cases has been processed, add the tests results info
|
|
@@ -840,7 +839,6 @@ class DbtSource(DbtServiceSource):
|
|
|
840
839
|
dbt_test_result = dbt_test.get(DbtCommonEnum.RESULTS.value)
|
|
841
840
|
test_case_status = TestCaseStatus.Aborted
|
|
842
841
|
test_result_value = 0
|
|
843
|
-
test_case_failure_status = TestCaseFailureStatus() # type: ignore
|
|
844
842
|
if dbt_test_result.status.value in [
|
|
845
843
|
item.value for item in DbtTestSuccessEnum
|
|
846
844
|
]:
|
|
@@ -851,17 +849,6 @@ class DbtSource(DbtServiceSource):
|
|
|
851
849
|
]:
|
|
852
850
|
test_case_status = TestCaseStatus.Failed
|
|
853
851
|
test_result_value = 0
|
|
854
|
-
test_case_failure_status = TestCaseFailureStatus(
|
|
855
|
-
testCaseFailureStatusType=TestCaseFailureStatusType.New,
|
|
856
|
-
testCaseFailureReason=None,
|
|
857
|
-
testCaseFailureComment=None,
|
|
858
|
-
updatedAt=Timestamp(
|
|
859
|
-
__root__=convert_timestamp_to_milliseconds(
|
|
860
|
-
datetime.utcnow().timestamp()
|
|
861
|
-
)
|
|
862
|
-
),
|
|
863
|
-
updatedBy=None,
|
|
864
|
-
)
|
|
865
852
|
|
|
866
853
|
# Process the Test Timings
|
|
867
854
|
dbt_test_timings = dbt_test_result.timing
|
|
@@ -893,7 +880,6 @@ class DbtSource(DbtServiceSource):
|
|
|
893
880
|
value=str(test_result_value),
|
|
894
881
|
)
|
|
895
882
|
],
|
|
896
|
-
testCaseFailureStatus=test_case_failure_status,
|
|
897
883
|
sampleData=None,
|
|
898
884
|
result=None,
|
|
899
885
|
)
|
|
@@ -34,13 +34,16 @@ from metadata.generated.schema.entity.data.table import Column, Table, TableType
|
|
|
34
34
|
from metadata.generated.schema.entity.services.connections.database.deltaLakeConnection import (
|
|
35
35
|
DeltaLakeConnection,
|
|
36
36
|
)
|
|
37
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
38
|
+
StackTraceError,
|
|
39
|
+
)
|
|
37
40
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
38
41
|
DatabaseServiceMetadataPipeline,
|
|
39
42
|
)
|
|
40
43
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
41
44
|
Source as WorkflowSource,
|
|
42
45
|
)
|
|
43
|
-
from metadata.ingestion.api.models import Either
|
|
46
|
+
from metadata.ingestion.api.models import Either
|
|
44
47
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
45
48
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
46
49
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -201,7 +204,7 @@ class DeltalakeSource(DatabaseServiceSource):
|
|
|
201
204
|
:return: tables or views, depending on config
|
|
202
205
|
"""
|
|
203
206
|
schema_name = self.context.database_schema
|
|
204
|
-
for table in self.spark.catalog.listTables(schema_name):
|
|
207
|
+
for table in self.spark.catalog.listTables(dbName=schema_name):
|
|
205
208
|
try:
|
|
206
209
|
table_name = table.name
|
|
207
210
|
table_fqn = fqn.build(
|
|
@@ -289,7 +292,7 @@ class DeltalakeSource(DatabaseServiceSource):
|
|
|
289
292
|
left=StackTraceError(
|
|
290
293
|
name=table_name,
|
|
291
294
|
error=f"Unexpected exception to yield table [{table_name}]: {exc}",
|
|
292
|
-
|
|
295
|
+
stackTrace=traceback.format_exc(),
|
|
293
296
|
)
|
|
294
297
|
)
|
|
295
298
|
|
|
@@ -32,6 +32,9 @@ from metadata.generated.schema.entity.data.table import Column, Table, TableType
|
|
|
32
32
|
from metadata.generated.schema.entity.services.connections.database.domoDatabaseConnection import (
|
|
33
33
|
DomoDatabaseConnection,
|
|
34
34
|
)
|
|
35
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
36
|
+
StackTraceError,
|
|
37
|
+
)
|
|
35
38
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
36
39
|
DatabaseServiceMetadataPipeline,
|
|
37
40
|
)
|
|
@@ -39,7 +42,7 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
39
42
|
Source as WorkflowSource,
|
|
40
43
|
)
|
|
41
44
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
42
|
-
from metadata.ingestion.api.models import Either
|
|
45
|
+
from metadata.ingestion.api.models import Either
|
|
43
46
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
44
47
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
45
48
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -155,7 +158,7 @@ class DomodatabaseSource(DatabaseServiceSource):
|
|
|
155
158
|
StackTraceError(
|
|
156
159
|
name=schema_name,
|
|
157
160
|
error=f"Fetching tables names failed for schema {schema_name} due to - {exc}",
|
|
158
|
-
|
|
161
|
+
stackTrace=traceback.format_exc(),
|
|
159
162
|
)
|
|
160
163
|
)
|
|
161
164
|
|
|
@@ -163,9 +166,7 @@ class DomodatabaseSource(DatabaseServiceSource):
|
|
|
163
166
|
try:
|
|
164
167
|
owner_details = User(**self.domo_client.users_get(owner.id))
|
|
165
168
|
if owner_details.email:
|
|
166
|
-
|
|
167
|
-
if user:
|
|
168
|
-
return EntityReference(id=user.id.__root__, type="user")
|
|
169
|
+
return self.metadata.get_reference_by_email(owner_details.email)
|
|
169
170
|
except Exception as exc:
|
|
170
171
|
logger.warning(f"Error while getting details of user {owner.name} - {exc}")
|
|
171
172
|
return None
|
|
@@ -208,7 +209,7 @@ class DomodatabaseSource(DatabaseServiceSource):
|
|
|
208
209
|
left=StackTraceError(
|
|
209
210
|
name=table_id,
|
|
210
211
|
error=f"Unexpected exception for table [{table_id}]: {exc}",
|
|
211
|
-
|
|
212
|
+
stackTrace=traceback.format_exc(),
|
|
212
213
|
)
|
|
213
214
|
)
|
|
214
215
|
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Source connection handler
|
|
14
|
+
"""
|
|
15
|
+
from typing import Optional
|
|
16
|
+
|
|
17
|
+
from sqlalchemy.engine import Engine
|
|
18
|
+
|
|
19
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
20
|
+
Workflow as AutomationWorkflow,
|
|
21
|
+
)
|
|
22
|
+
from metadata.generated.schema.entity.services.connections.database.dorisConnection import (
|
|
23
|
+
DorisConnection,
|
|
24
|
+
)
|
|
25
|
+
from metadata.ingestion.connections.builders import (
|
|
26
|
+
create_generic_db_connection,
|
|
27
|
+
get_connection_args_common,
|
|
28
|
+
get_connection_url_common,
|
|
29
|
+
init_empty_connection_options,
|
|
30
|
+
)
|
|
31
|
+
from metadata.ingestion.connections.test_connections import (
|
|
32
|
+
test_connection_db_schema_sources,
|
|
33
|
+
)
|
|
34
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_connection(connection: DorisConnection) -> Engine:
|
|
38
|
+
"""
|
|
39
|
+
Create connection
|
|
40
|
+
"""
|
|
41
|
+
if connection.sslCA or connection.sslCert or connection.sslKey:
|
|
42
|
+
if not connection.connectionOptions:
|
|
43
|
+
connection.connectionOptions = init_empty_connection_options()
|
|
44
|
+
if connection.sslCA:
|
|
45
|
+
connection.connectionOptions.__root__["ssl_ca"] = connection.sslCA
|
|
46
|
+
if connection.sslCert:
|
|
47
|
+
connection.connectionOptions.__root__["ssl_cert"] = connection.sslCert
|
|
48
|
+
if connection.sslKey:
|
|
49
|
+
connection.connectionOptions.__root__["ssl_key"] = connection.sslKey
|
|
50
|
+
return create_generic_db_connection(
|
|
51
|
+
connection=connection,
|
|
52
|
+
get_connection_url_fn=get_connection_url_common,
|
|
53
|
+
get_connection_args_fn=get_connection_args_common,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_connection(
|
|
58
|
+
metadata: OpenMetadata,
|
|
59
|
+
engine: Engine,
|
|
60
|
+
service_connection: DorisConnection,
|
|
61
|
+
automation_workflow: Optional[AutomationWorkflow] = None,
|
|
62
|
+
) -> None:
|
|
63
|
+
"""
|
|
64
|
+
Test connection. This can be executed either as part
|
|
65
|
+
of a metadata workflow or during an Automation Workflow
|
|
66
|
+
"""
|
|
67
|
+
test_connection_db_schema_sources(
|
|
68
|
+
metadata=metadata,
|
|
69
|
+
engine=engine,
|
|
70
|
+
service_connection=service_connection,
|
|
71
|
+
automation_workflow=automation_workflow,
|
|
72
|
+
)
|