openmetadata-ingestion 1.2.5.2__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.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/RECORD +812 -725
- {openmetadata_ingestion-1.2.5.2.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.2.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.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/top_level.txt +0 -0
metadata/utils/helpers.py
CHANGED
|
@@ -31,7 +31,9 @@ from sqlparse.sql import Statement
|
|
|
31
31
|
|
|
32
32
|
from metadata.generated.schema.entity.data.chart import ChartType
|
|
33
33
|
from metadata.generated.schema.entity.data.table import Column, Table
|
|
34
|
+
from metadata.generated.schema.entity.feed.suggestion import Suggestion, SuggestionType
|
|
34
35
|
from metadata.generated.schema.entity.services.databaseService import DatabaseService
|
|
36
|
+
from metadata.generated.schema.type.basic import EntityLink
|
|
35
37
|
from metadata.generated.schema.type.tagLabel import TagLabel
|
|
36
38
|
from metadata.utils.constants import DEFAULT_DATABASE
|
|
37
39
|
from metadata.utils.logger import utils_logger
|
|
@@ -123,12 +125,27 @@ def calculate_execution_time_generator(func):
|
|
|
123
125
|
"""
|
|
124
126
|
|
|
125
127
|
def calculate_debug_time(*args, **kwargs):
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
# NOTE: We are basically implementing by hand a simplified version of 'yield from'
|
|
129
|
+
# in order to be able to calculate the time difference correctly.
|
|
130
|
+
# The 'while True' loop allows us to guarantee we are iterating over all thje values
|
|
131
|
+
# from func(*args, **kwargs).
|
|
132
|
+
generator = func(*args, **kwargs)
|
|
133
|
+
|
|
134
|
+
while True:
|
|
135
|
+
start = perf_counter()
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
element = next(generator)
|
|
139
|
+
except StopIteration:
|
|
140
|
+
return
|
|
141
|
+
|
|
142
|
+
end = perf_counter()
|
|
143
|
+
|
|
144
|
+
logger.debug(
|
|
145
|
+
f"{func.__name__} executed in { pretty_print_time_duration(end - start)}"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
yield element
|
|
132
149
|
|
|
133
150
|
return calculate_debug_time
|
|
134
151
|
|
|
@@ -227,12 +244,38 @@ def find_in_iter(element: Any, container: Iterable[Any]) -> Optional[Any]:
|
|
|
227
244
|
return next((elem for elem in container if elem == element), None)
|
|
228
245
|
|
|
229
246
|
|
|
230
|
-
def find_column_in_table(
|
|
247
|
+
def find_column_in_table(
|
|
248
|
+
column_name: str, table: Table, case_sensitive: bool = True
|
|
249
|
+
) -> Optional[Column]:
|
|
231
250
|
"""
|
|
232
251
|
If the column exists in the table, return it
|
|
233
252
|
"""
|
|
253
|
+
|
|
254
|
+
def equals(first: str, second: str) -> bool:
|
|
255
|
+
if case_sensitive:
|
|
256
|
+
return first == second
|
|
257
|
+
return first.lower() == second.lower()
|
|
258
|
+
|
|
259
|
+
return next(
|
|
260
|
+
(col for col in table.columns if equals(col.name.__root__, column_name)), None
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def find_suggestion(
|
|
265
|
+
suggestions: List[Suggestion],
|
|
266
|
+
suggestion_type: SuggestionType,
|
|
267
|
+
entity_link: EntityLink,
|
|
268
|
+
) -> Optional[Suggestion]:
|
|
269
|
+
"""Given a list of suggestions, a suggestion type and an entity link, find
|
|
270
|
+
one suggestion in the list that matches the criteria
|
|
271
|
+
"""
|
|
234
272
|
return next(
|
|
235
|
-
(
|
|
273
|
+
(
|
|
274
|
+
sugg
|
|
275
|
+
for sugg in suggestions
|
|
276
|
+
if sugg.type == suggestion_type and sugg.entityLink == entity_link
|
|
277
|
+
),
|
|
278
|
+
None,
|
|
236
279
|
)
|
|
237
280
|
|
|
238
281
|
|
|
@@ -354,7 +397,7 @@ def format_large_string_numbers(number: Union[float, int]) -> str:
|
|
|
354
397
|
units = ["", "K", "M", "B", "T"]
|
|
355
398
|
constant_k = 1000.0
|
|
356
399
|
magnitude = int(floor(log(abs(number), constant_k)))
|
|
357
|
-
return f"{number / constant_k**magnitude:.
|
|
400
|
+
return f"{number / constant_k**magnitude:.3f}{units[magnitude]}"
|
|
358
401
|
|
|
359
402
|
|
|
360
403
|
def clean_uri(uri: str) -> str:
|
|
@@ -430,6 +473,9 @@ def is_safe_sql_query(sql_query: str) -> bool:
|
|
|
430
473
|
"SET TRANSACTION",
|
|
431
474
|
}
|
|
432
475
|
|
|
476
|
+
if sql_query is None:
|
|
477
|
+
return True
|
|
478
|
+
|
|
433
479
|
parsed_queries: Tuple[Statement] = sqlparse.parse(sql_query)
|
|
434
480
|
for parsed_query in parsed_queries:
|
|
435
481
|
validation = [
|
metadata/utils/importer.py
CHANGED
|
@@ -14,7 +14,7 @@ Helpers to import python classes and modules dynamically
|
|
|
14
14
|
import importlib
|
|
15
15
|
import traceback
|
|
16
16
|
from enum import Enum
|
|
17
|
-
from typing import Callable, Optional, Type, TypeVar
|
|
17
|
+
from typing import Any, Callable, Optional, Type, TypeVar
|
|
18
18
|
|
|
19
19
|
from pydantic import BaseModel
|
|
20
20
|
|
|
@@ -23,7 +23,6 @@ from metadata.generated.schema.entity.services.connections.metadata.openMetadata
|
|
|
23
23
|
)
|
|
24
24
|
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
25
25
|
from metadata.generated.schema.metadataIngestion.workflow import Sink as WorkflowSink
|
|
26
|
-
from metadata.ingestion.api.step import Step
|
|
27
26
|
from metadata.ingestion.api.steps import BulkSink, Processor, Sink, Source, Stage
|
|
28
27
|
from metadata.utils.class_helper import get_service_type_from_source_type
|
|
29
28
|
from metadata.utils.logger import utils_logger
|
|
@@ -86,7 +85,7 @@ def get_class_name_root(type_: str) -> str:
|
|
|
86
85
|
)
|
|
87
86
|
|
|
88
87
|
|
|
89
|
-
def import_from_module(key: str) -> Type[
|
|
88
|
+
def import_from_module(key: str) -> Type[Any]:
|
|
90
89
|
"""
|
|
91
90
|
Dynamically import an object from a module path
|
|
92
91
|
"""
|
|
@@ -27,12 +27,12 @@ QUERY_TYPES_DICT = {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
select_pattern = re.compile(r"
|
|
31
|
-
create_pattern = re.compile(r"
|
|
30
|
+
select_pattern = re.compile(r".*\s*(SELECT|SHOW|DESCRIBE)", re.IGNORECASE)
|
|
31
|
+
create_pattern = re.compile(r".*\s*CREATE", re.IGNORECASE)
|
|
32
32
|
update_pattern = re.compile(
|
|
33
|
-
r"
|
|
33
|
+
r".*\s*(UPDATE|INSERT|DELETE|MERGE|TRUNCATE_TABLE|ALTER)", re.IGNORECASE
|
|
34
34
|
)
|
|
35
|
-
drop_pattern = re.compile(r"
|
|
35
|
+
drop_pattern = re.compile(r".*\s*DROP", re.IGNORECASE)
|
|
36
36
|
|
|
37
37
|
logger = utils_logger()
|
|
38
38
|
|
metadata/utils/logger.py
CHANGED
|
@@ -54,6 +54,7 @@ class Loggers(Enum):
|
|
|
54
54
|
TEST_SUITE = "TestSuite"
|
|
55
55
|
DATA_INSIGHT = "DataInsight"
|
|
56
56
|
QUERY_RUNNER = "QueryRunner"
|
|
57
|
+
APP = "App"
|
|
57
58
|
|
|
58
59
|
@DynamicClassAttribute
|
|
59
60
|
def value(self):
|
|
@@ -153,6 +154,14 @@ def great_expectations_logger():
|
|
|
153
154
|
return logging.getLogger(Loggers.GREAT_EXPECTATIONS.value)
|
|
154
155
|
|
|
155
156
|
|
|
157
|
+
def app_logger():
|
|
158
|
+
"""
|
|
159
|
+
Method to get the APP logger
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
return logging.getLogger(Loggers.APP.value)
|
|
163
|
+
|
|
164
|
+
|
|
156
165
|
def query_runner_logger():
|
|
157
166
|
"""
|
|
158
167
|
Method to get the QUERY_RUNNER logger
|
|
@@ -245,9 +254,11 @@ def _(record: TableAndTests) -> str:
|
|
|
245
254
|
|
|
246
255
|
|
|
247
256
|
@get_log_name.register
|
|
248
|
-
def _(
|
|
257
|
+
def _(record: TestCaseResults) -> str:
|
|
249
258
|
"""We don't want to log this in the status"""
|
|
250
|
-
return
|
|
259
|
+
return ",".join(
|
|
260
|
+
set(result.testCase.name.__root__ for result in record.test_results)
|
|
261
|
+
)
|
|
251
262
|
|
|
252
263
|
|
|
253
264
|
@get_log_name.register
|
metadata/utils/partition.py
CHANGED
|
@@ -15,6 +15,7 @@ from typing import Optional
|
|
|
15
15
|
|
|
16
16
|
from metadata.generated.schema.entity.data.table import (
|
|
17
17
|
IntervalType,
|
|
18
|
+
PartitionIntervalUnit,
|
|
18
19
|
PartitionProfilerConfig,
|
|
19
20
|
Table,
|
|
20
21
|
)
|
|
@@ -47,8 +48,10 @@ def get_partition_details(entity: Table) -> Optional[PartitionProfilerConfig]:
|
|
|
47
48
|
return PartitionProfilerConfig(
|
|
48
49
|
enablePartitioning=True,
|
|
49
50
|
partitionColumnName=entity.tablePartition.columns[0],
|
|
50
|
-
partitionIntervalUnit=
|
|
51
|
-
|
|
51
|
+
partitionIntervalUnit=PartitionIntervalUnit.DAY
|
|
52
|
+
if entity.tablePartition.interval != "HOUR"
|
|
53
|
+
else entity.tablePartition.interval,
|
|
54
|
+
partitionInterval=1,
|
|
52
55
|
partitionIntervalType=entity.tablePartition.intervalType.value,
|
|
53
56
|
partitionValues=None,
|
|
54
57
|
partitionIntegerRangeStart=None,
|
|
@@ -60,8 +63,10 @@ def get_partition_details(entity: Table) -> Optional[PartitionProfilerConfig]:
|
|
|
60
63
|
partitionColumnName="_PARTITIONDATE"
|
|
61
64
|
if entity.tablePartition.interval == "DAY"
|
|
62
65
|
else "_PARTITIONTIME",
|
|
63
|
-
partitionIntervalUnit=
|
|
64
|
-
|
|
66
|
+
partitionIntervalUnit=PartitionIntervalUnit.DAY
|
|
67
|
+
if entity.tablePartition.interval != "HOUR"
|
|
68
|
+
else entity.tablePartition.interval,
|
|
69
|
+
partitionInterval=1,
|
|
65
70
|
partitionIntervalType=entity.tablePartition.intervalType.value,
|
|
66
71
|
partitionValues=None,
|
|
67
72
|
partitionIntegerRangeStart=None,
|
|
@@ -72,7 +77,7 @@ def get_partition_details(entity: Table) -> Optional[PartitionProfilerConfig]:
|
|
|
72
77
|
enablePartitioning=True,
|
|
73
78
|
partitionColumnName=entity.tablePartition.columns[0],
|
|
74
79
|
partitionIntervalUnit=None,
|
|
75
|
-
partitionInterval=
|
|
80
|
+
partitionInterval=None,
|
|
76
81
|
partitionIntervalType=entity.tablePartition.intervalType.value,
|
|
77
82
|
partitionValues=None,
|
|
78
83
|
partitionIntegerRangeStart=1,
|
|
@@ -63,7 +63,6 @@ def _(provider: SecretsManagerProvider) -> Optional[AWSCredentials]:
|
|
|
63
63
|
|
|
64
64
|
@secrets_manager_client_loader.add(SecretsManagerClientLoader.env.value)
|
|
65
65
|
def _(provider: SecretsManagerProvider) -> Optional[AWSCredentials]:
|
|
66
|
-
|
|
67
66
|
if provider in {
|
|
68
67
|
SecretsManagerProvider.aws,
|
|
69
68
|
SecretsManagerProvider.managed_aws,
|
|
@@ -18,12 +18,13 @@ from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
|
18
18
|
from metadata.utils.secrets.secrets_manager import SecretsManager
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class
|
|
21
|
+
class DBSecretsManager(SecretsManager):
|
|
22
22
|
"""
|
|
23
|
-
|
|
23
|
+
Will return the string as received. The client does not need to pick
|
|
24
|
+
it up from any external resource.
|
|
24
25
|
"""
|
|
25
26
|
|
|
26
|
-
provider: str = SecretsManagerProvider.
|
|
27
|
+
provider: str = SecretsManagerProvider.db.name
|
|
27
28
|
|
|
28
29
|
def get_string_value(self, secret_id: str) -> str:
|
|
29
30
|
return secret_id
|
|
@@ -23,7 +23,7 @@ from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
|
23
23
|
from metadata.utils.secrets.aws_secrets_manager import AWSSecretsManager
|
|
24
24
|
from metadata.utils.secrets.aws_ssm_secrets_manager import AWSSSMSecretsManager
|
|
25
25
|
from metadata.utils.secrets.client.loader import secrets_manager_client_loader
|
|
26
|
-
from metadata.utils.secrets.noop_secrets_manager import
|
|
26
|
+
from metadata.utils.secrets.noop_secrets_manager import DBSecretsManager
|
|
27
27
|
from metadata.utils.secrets.secrets_manager import SecretsManager
|
|
28
28
|
from metadata.utils.singleton import Singleton
|
|
29
29
|
|
|
@@ -85,9 +85,9 @@ class SecretsManagerFactory(metaclass=Singleton):
|
|
|
85
85
|
"""
|
|
86
86
|
if (
|
|
87
87
|
secrets_manager_provider is None
|
|
88
|
-
or secrets_manager_provider == SecretsManagerProvider.
|
|
88
|
+
or secrets_manager_provider == SecretsManagerProvider.db
|
|
89
89
|
):
|
|
90
|
-
return
|
|
90
|
+
return DBSecretsManager()
|
|
91
91
|
if secrets_manager_provider in (
|
|
92
92
|
SecretsManagerProvider.aws,
|
|
93
93
|
SecretsManagerProvider.managed_aws,
|
|
@@ -104,7 +104,6 @@ class SecretsManagerFactory(metaclass=Singleton):
|
|
|
104
104
|
return self.secrets_manager
|
|
105
105
|
|
|
106
106
|
def _load_secrets_manager_credentials(self) -> Optional["AWSCredentials"]:
|
|
107
|
-
|
|
108
107
|
if not self.secrets_manager_loader:
|
|
109
108
|
return None
|
|
110
109
|
|
|
@@ -23,11 +23,20 @@ SOURCE_HASH_EXCLUDE_FIELDS = {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def generate_source_hash(
|
|
26
|
+
def generate_source_hash(
|
|
27
|
+
create_request: C, exclude_fields: Optional[Dict] = None
|
|
28
|
+
) -> str:
|
|
27
29
|
"""
|
|
28
30
|
Given a create_request model convert it to json string and generate a hash value
|
|
29
31
|
"""
|
|
30
32
|
|
|
33
|
+
# We always want to exclude the sourceHash when generating the fingerprint
|
|
34
|
+
exclude_fields = (
|
|
35
|
+
SOURCE_HASH_EXCLUDE_FIELDS.update(exclude_fields)
|
|
36
|
+
if exclude_fields
|
|
37
|
+
else SOURCE_HASH_EXCLUDE_FIELDS
|
|
38
|
+
)
|
|
39
|
+
|
|
31
40
|
create_request_json = create_request.json(exclude=exclude_fields)
|
|
32
41
|
|
|
33
42
|
json_bytes = create_request_json.encode("utf-8")
|
|
@@ -39,6 +39,27 @@ def get_table_comment_wrapper(self, connection, query, table_name, schema=None):
|
|
|
39
39
|
return {"text": self.all_table_comments.get((table_name, schema))}
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
@reflection.cache
|
|
43
|
+
def get_all_table_owners(
|
|
44
|
+
self, connection, query, schema_name, **kw
|
|
45
|
+
): # pylint: disable=unused-argument
|
|
46
|
+
"""
|
|
47
|
+
Method to fetch owners of all available tables
|
|
48
|
+
"""
|
|
49
|
+
self.all_table_owners: Dict[Tuple[str, str], str] = {}
|
|
50
|
+
result = connection.execute(query)
|
|
51
|
+
for table in result:
|
|
52
|
+
self.all_table_owners[(table[0], table[1])] = table[2]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_table_owner_wrapper(
|
|
56
|
+
self, connection, query, table_name, schema=None, **kw
|
|
57
|
+
): # pylint: disable=unused-argument
|
|
58
|
+
if not hasattr(self, "all_table_owners"):
|
|
59
|
+
self.get_all_table_owners(connection, query, schema)
|
|
60
|
+
return self.all_table_owners.get((schema, table_name), "")
|
|
61
|
+
|
|
62
|
+
|
|
42
63
|
@reflection.cache
|
|
43
64
|
def get_all_view_definitions(self, connection, query):
|
|
44
65
|
"""
|
|
@@ -20,6 +20,9 @@ import requests
|
|
|
20
20
|
from metadata.generated.schema.entity.services.connections.database.datalake.azureConfig import (
|
|
21
21
|
AzureConfig,
|
|
22
22
|
)
|
|
23
|
+
from metadata.generated.schema.entity.services.connections.database.datalake.gcsConfig import (
|
|
24
|
+
GCSConfig,
|
|
25
|
+
)
|
|
23
26
|
from metadata.generated.schema.entity.services.connections.database.datalake.s3Config import (
|
|
24
27
|
S3Config,
|
|
25
28
|
)
|
|
@@ -29,6 +32,9 @@ from metadata.generated.schema.metadataIngestion.storage.manifestMetadataConfig
|
|
|
29
32
|
from metadata.generated.schema.metadataIngestion.storage.storageMetadataADLSConfig import (
|
|
30
33
|
StorageMetadataAdlsConfig,
|
|
31
34
|
)
|
|
35
|
+
from metadata.generated.schema.metadataIngestion.storage.storageMetadataGCSConfig import (
|
|
36
|
+
StorageMetadataGcsConfig,
|
|
37
|
+
)
|
|
32
38
|
from metadata.generated.schema.metadataIngestion.storage.storageMetadataHttpConfig import (
|
|
33
39
|
StorageMetadataHttpConfig,
|
|
34
40
|
)
|
|
@@ -39,6 +45,7 @@ from metadata.generated.schema.metadataIngestion.storage.storageMetadataS3Config
|
|
|
39
45
|
StorageMetadataS3Config,
|
|
40
46
|
)
|
|
41
47
|
from metadata.readers.file.config_source_factory import get_reader
|
|
48
|
+
from metadata.utils.credentials import set_google_credentials
|
|
42
49
|
from metadata.utils.logger import ometa_logger
|
|
43
50
|
|
|
44
51
|
logger = ometa_logger()
|
|
@@ -172,5 +179,39 @@ def _(config: StorageMetadataAdlsConfig) -> ManifestMetadataConfig:
|
|
|
172
179
|
except Exception as exc:
|
|
173
180
|
logger.debug(traceback.format_exc())
|
|
174
181
|
raise StorageMetadataConfigException(
|
|
175
|
-
f"Error fetching manifest file from
|
|
182
|
+
f"Error fetching manifest file from adls: {exc}"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
@get_manifest.register
|
|
187
|
+
def _(config: StorageMetadataGcsConfig) -> ManifestMetadataConfig:
|
|
188
|
+
try:
|
|
189
|
+
bucket_name, prefix = (
|
|
190
|
+
config.prefixConfig.containerName,
|
|
191
|
+
config.prefixConfig.objectPrefix,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
path = (
|
|
195
|
+
f"{prefix}/{STORAGE_METADATA_MANIFEST_FILE_NAME}"
|
|
196
|
+
if prefix
|
|
197
|
+
else STORAGE_METADATA_MANIFEST_FILE_NAME
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
from google.cloud.storage import ( # pylint: disable=import-outside-toplevel
|
|
201
|
+
Client,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
set_google_credentials(gcp_credentials=config.securityConfig)
|
|
205
|
+
gcs_client = Client()
|
|
206
|
+
reader = get_reader(
|
|
207
|
+
config_source=GCSConfig(securityConfig=config.securityConfig),
|
|
208
|
+
client=gcs_client,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
manifest = reader.read(path=path, bucket_name=bucket_name)
|
|
212
|
+
return ManifestMetadataConfig.parse_obj(json.loads(manifest))
|
|
213
|
+
except Exception as exc:
|
|
214
|
+
logger.debug(traceback.format_exc())
|
|
215
|
+
raise StorageMetadataConfigException(
|
|
216
|
+
f"Error fetching manifest file from gcs: {exc}"
|
|
176
217
|
)
|
metadata/utils/tag_utils.py
CHANGED
|
@@ -21,6 +21,9 @@ from metadata.generated.schema.api.classification.createClassification import (
|
|
|
21
21
|
)
|
|
22
22
|
from metadata.generated.schema.api.classification.createTag import CreateTagRequest
|
|
23
23
|
from metadata.generated.schema.entity.classification.tag import Tag
|
|
24
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
25
|
+
StackTraceError,
|
|
26
|
+
)
|
|
24
27
|
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
25
28
|
from metadata.generated.schema.type.tagLabel import (
|
|
26
29
|
LabelType,
|
|
@@ -28,7 +31,7 @@ from metadata.generated.schema.type.tagLabel import (
|
|
|
28
31
|
TagLabel,
|
|
29
32
|
TagSource,
|
|
30
33
|
)
|
|
31
|
-
from metadata.ingestion.api.models import Either
|
|
34
|
+
from metadata.ingestion.api.models import Either
|
|
32
35
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
33
36
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
34
37
|
from metadata.utils import fqn
|
|
@@ -72,7 +75,7 @@ def get_ometa_tag_and_classification(
|
|
|
72
75
|
left=StackTraceError(
|
|
73
76
|
name=tag,
|
|
74
77
|
error=f"Error yielding tag [{tag}]: [{err}]",
|
|
75
|
-
|
|
78
|
+
stackTrace=traceback.format_exc(),
|
|
76
79
|
)
|
|
77
80
|
)
|
|
78
81
|
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
"""
|
|
12
|
+
Generic Workflow entrypoint to execute Applications
|
|
13
|
+
"""
|
|
14
|
+
from abc import ABC, abstractmethod
|
|
15
|
+
from typing import List, Optional
|
|
16
|
+
|
|
17
|
+
from metadata.config.common import WorkflowExecutionError
|
|
18
|
+
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
19
|
+
OpenMetadataConnection,
|
|
20
|
+
)
|
|
21
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
22
|
+
StackTraceError,
|
|
23
|
+
)
|
|
24
|
+
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
25
|
+
from metadata.generated.schema.metadataIngestion.application import (
|
|
26
|
+
OpenMetadataApplicationConfig,
|
|
27
|
+
)
|
|
28
|
+
from metadata.generated.schema.metadataIngestion.workflow import LogLevels
|
|
29
|
+
from metadata.ingestion.api.step import Step, Summary
|
|
30
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
|
+
from metadata.utils.importer import import_from_module
|
|
32
|
+
from metadata.utils.logger import ingestion_logger
|
|
33
|
+
from metadata.workflow.base import BaseWorkflow
|
|
34
|
+
from metadata.workflow.workflow_status_mixin import SUCCESS_THRESHOLD_VALUE
|
|
35
|
+
|
|
36
|
+
logger = ingestion_logger()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class InvalidAppConfiguration(Exception):
|
|
40
|
+
"""
|
|
41
|
+
To be raised if the config received by the App
|
|
42
|
+
is not the one expected
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class AppRunner(Step, ABC):
|
|
47
|
+
"""Class that knows how to execute the Application logic."""
|
|
48
|
+
|
|
49
|
+
def __init__(
|
|
50
|
+
self,
|
|
51
|
+
config: OpenMetadataApplicationConfig,
|
|
52
|
+
metadata: OpenMetadata,
|
|
53
|
+
):
|
|
54
|
+
self.app_config = config.appConfig.__root__ if config.appConfig else None
|
|
55
|
+
self.private_config = (
|
|
56
|
+
config.appPrivateConfig.__root__ if config.appPrivateConfig else None
|
|
57
|
+
)
|
|
58
|
+
self.metadata = metadata
|
|
59
|
+
|
|
60
|
+
super().__init__()
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def name(self) -> str:
|
|
64
|
+
return "AppRunner"
|
|
65
|
+
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def run(self) -> None:
|
|
68
|
+
"""App logic to execute"""
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def create(cls, config_dict: dict, metadata: OpenMetadata) -> "Step":
|
|
72
|
+
config = OpenMetadataApplicationConfig.parse_obj(config_dict)
|
|
73
|
+
return cls(config=config, metadata=metadata)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class ApplicationWorkflow(BaseWorkflow, ABC):
|
|
77
|
+
"""Base Application Workflow implementation"""
|
|
78
|
+
|
|
79
|
+
config: OpenMetadataApplicationConfig
|
|
80
|
+
runner: Optional[AppRunner]
|
|
81
|
+
|
|
82
|
+
def __init__(self, config_dict: dict):
|
|
83
|
+
self.runner = None # Will be passed in post-init
|
|
84
|
+
# TODO: Create a parse_gracefully method
|
|
85
|
+
self.config = OpenMetadataApplicationConfig.parse_obj(config_dict)
|
|
86
|
+
|
|
87
|
+
# Applications are associated to the OpenMetadata Service
|
|
88
|
+
self.service_type: ServiceType = ServiceType.Metadata
|
|
89
|
+
|
|
90
|
+
metadata_config: OpenMetadataConnection = (
|
|
91
|
+
self.config.workflowConfig.openMetadataServerConfig
|
|
92
|
+
)
|
|
93
|
+
log_level: LogLevels = self.config.workflowConfig.loggerLevel
|
|
94
|
+
|
|
95
|
+
super().__init__(
|
|
96
|
+
config=self.config,
|
|
97
|
+
log_level=log_level,
|
|
98
|
+
metadata_config=metadata_config,
|
|
99
|
+
service_type=self.service_type,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
@classmethod
|
|
103
|
+
def create(cls, config_dict: dict):
|
|
104
|
+
return cls(config_dict)
|
|
105
|
+
|
|
106
|
+
def post_init(self) -> None:
|
|
107
|
+
"""
|
|
108
|
+
Method to execute after we have initialized all the internals.
|
|
109
|
+
Here we will load the runner since it needs the `metadata` object
|
|
110
|
+
"""
|
|
111
|
+
runner_class = import_from_module(self.config.sourcePythonClass)
|
|
112
|
+
if not issubclass(runner_class, AppRunner):
|
|
113
|
+
raise ValueError(
|
|
114
|
+
"We need a valid AppRunner to initialize the ApplicationWorkflow!"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
self.runner = runner_class(
|
|
119
|
+
config=self.config,
|
|
120
|
+
metadata=self.metadata,
|
|
121
|
+
)
|
|
122
|
+
except Exception as exc:
|
|
123
|
+
logger.error(
|
|
124
|
+
f"Error trying to init the AppRunner [{self.config.sourcePythonClass}] due to [{exc}]"
|
|
125
|
+
)
|
|
126
|
+
raise exc
|
|
127
|
+
|
|
128
|
+
def execute_internal(self) -> None:
|
|
129
|
+
"""Workflow-specific logic to execute safely"""
|
|
130
|
+
self.runner.run()
|
|
131
|
+
|
|
132
|
+
def calculate_success(self) -> float:
|
|
133
|
+
return self.runner.get_status().calculate_success()
|
|
134
|
+
|
|
135
|
+
def get_failures(self) -> List[StackTraceError]:
|
|
136
|
+
return self.workflow_steps()[0].get_status().failures
|
|
137
|
+
|
|
138
|
+
def workflow_steps(self) -> List[Step]:
|
|
139
|
+
return [self.runner]
|
|
140
|
+
|
|
141
|
+
def raise_from_status_internal(self, raise_warnings=False):
|
|
142
|
+
"""Check failed status in the runner"""
|
|
143
|
+
if (
|
|
144
|
+
self.runner.get_status().failures
|
|
145
|
+
and self.calculate_success() < SUCCESS_THRESHOLD_VALUE
|
|
146
|
+
):
|
|
147
|
+
raise WorkflowExecutionError(
|
|
148
|
+
f"{self.runner.name} reported errors: {Summary.from_step(self.runner)}"
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
if raise_warnings and self.runner.get_status().warnings:
|
|
152
|
+
raise WorkflowExecutionError(
|
|
153
|
+
f"{self.runner.name} reported warning: {Summary.from_step(self.runner)}"
|
|
154
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Module handles the output messages for applications
|
|
14
|
+
"""
|
|
15
|
+
import time
|
|
16
|
+
|
|
17
|
+
from metadata.utils.helpers import pretty_print_time_duration
|
|
18
|
+
from metadata.utils.logger import ANSI, log_ansi_encoded_string
|
|
19
|
+
from metadata.workflow.output_handler import print_workflow_summary
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def print_status(workflow: "ApplicationWorkflow") -> None:
|
|
23
|
+
"""
|
|
24
|
+
Print the workflow results
|
|
25
|
+
"""
|
|
26
|
+
print_workflow_summary(workflow)
|
|
27
|
+
|
|
28
|
+
if workflow.runner.get_status().source_start_time:
|
|
29
|
+
log_ansi_encoded_string(
|
|
30
|
+
color=ANSI.BRIGHT_CYAN,
|
|
31
|
+
bold=True,
|
|
32
|
+
message="Workflow finished in time: "
|
|
33
|
+
f"{pretty_print_time_duration(time.time()-workflow.runner.get_status().source_start_time)}",
|
|
34
|
+
)
|