openmetadata-ingestion 1.2.5.1__py3-none-any.whl → 1.3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- airflow_provider_openmetadata/lineage/runner.py +44 -5
- airflow_provider_openmetadata/lineage/status.py +1 -1
- metadata/antlr/split_listener.py +1 -4
- metadata/applications/auto_tagger.py +212 -0
- metadata/cli/app.py +47 -0
- metadata/cli/db_dump.py +6 -3
- metadata/clients/aws_client.py +4 -0
- metadata/clients/domo_client.py +0 -2
- metadata/cmd.py +24 -13
- metadata/data_insight/processor/reports/entity_report_data_processor.py +8 -2
- metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +4 -0
- metadata/data_insight/source/metadata.py +11 -4
- metadata/data_quality/interface/sqlalchemy/databricks/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/snowflake/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +6 -6
- metadata/data_quality/interface/sqlalchemy/unity_catalog/test_suite_interface.py +35 -0
- metadata/data_quality/interface/test_suite_interface_factory.py +40 -0
- metadata/data_quality/processor/test_case_runner.py +17 -8
- metadata/data_quality/source/test_suite.py +8 -2
- metadata/data_quality/validations/base_test_handler.py +21 -17
- metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +38 -1
- metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +36 -1
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotNull.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeUnique.py +15 -0
- metadata/data_quality/validations/column/base/columnValuesToMatchRegex.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToNotMatchRegex.py +27 -0
- metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +27 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/mixins/pandas_validator_mixin.py +13 -2
- metadata/data_quality/validations/mixins/sqa_validator_mixin.py +40 -0
- metadata/examples/workflows/databricks.yaml +0 -1
- metadata/examples/workflows/mongodb.yaml +4 -2
- metadata/examples/workflows/mstr.yaml +24 -0
- metadata/examples/workflows/sas.yaml +28 -0
- metadata/examples/workflows/unity_catalog.yaml +27 -0
- metadata/examples/workflows/unity_catalog_lineage.yaml +18 -0
- metadata/examples/workflows/unity_catalog_usage.yaml +35 -0
- metadata/generated/antlr/EntityLinkLexer.py +391 -292
- metadata/generated/antlr/EntityLinkListener.py +12 -12
- metadata/generated/antlr/EntityLinkParser.py +228 -103
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +2 -3
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +2 -2
- metadata/generated/schema/api/data/createCustomProperty.py +2 -3
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +2 -3
- metadata/generated/schema/api/data/createDatabaseSchema.py +2 -3
- metadata/generated/schema/api/data/createGlossary.py +2 -3
- metadata/generated/schema/api/data/createGlossaryTerm.py +2 -3
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +2 -2
- metadata/generated/schema/api/data/createQuery.py +2 -2
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +2 -4
- metadata/generated/schema/api/data/createTable.py +2 -2
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +8 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +30 -0
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +12 -1
- metadata/generated/schema/api/feed/threadCount.py +18 -14
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +2 -3
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +2 -2
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +4 -2
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +4 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +31 -0
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +3 -3
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +2 -2
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +28 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +7 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +28 -2
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +18 -4
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +30 -0
- metadata/generated/schema/entity/{services/connections/database/mongoDB → applications/configuration/external}/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +28 -0
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +46 -0
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +14 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +27 -0
- metadata/generated/schema/entity/applications/configuration/{searchIndexingApp.py → internal/searchIndexingAppConfig.py} +13 -3
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +3 -3
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +12 -3
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +12 -3
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +2 -2
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +2 -3
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +2 -2
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +4 -9
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +4 -8
- metadata/generated/schema/entity/data/databaseSchema.py +2 -8
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +6 -9
- metadata/generated/schema/entity/data/query.py +2 -2
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +3 -9
- metadata/generated/schema/entity/data/table.py +18 -12
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +1 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +1 -1
- metadata/generated/schema/entity/domains/domain.py +1 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +6 -3
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +61 -0
- metadata/generated/schema/entity/feed/thread.py +6 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +2 -5
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +46 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +6 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +2 -7
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +3 -2
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +86 -0
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +17 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +16 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +43 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +20 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +69 -0
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +35 -0
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +24 -14
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -2
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +48 -0
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +90 -0
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +5 -20
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +2 -8
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/{adlsConection.py → adlsConnection.py} +2 -2
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +4 -1
- metadata/generated/schema/entity/services/databaseService.py +13 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +27 -22
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +56 -0
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +4 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +10 -3
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +2 -6
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +3 -10
- metadata/generated/schema/entity/type.py +2 -2
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +27 -0
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +14 -12
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +13 -2
- metadata/generated/schema/events/eventSubscription.py +89 -49
- metadata/generated/schema/events/eventSubscriptionOffset.py +21 -0
- metadata/generated/schema/events/failedEvent.py +26 -0
- metadata/generated/schema/events/filterResourceDescriptor.py +27 -0
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +11 -10
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +40 -0
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +15 -6
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +2 -2
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +24 -0
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +8 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +14 -4
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +2 -2
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +4 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +17 -0
- metadata/generated/schema/system/eventPublisherJob.py +5 -19
- metadata/generated/schema/system/indexingError.py +34 -0
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +18 -0
- metadata/generated/schema/tests/basic.py +17 -39
- metadata/generated/schema/tests/customMetric.py +4 -2
- metadata/generated/schema/tests/resolved.py +35 -0
- metadata/generated/schema/tests/testCase.py +11 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +63 -0
- metadata/generated/schema/tests/testDefinition.py +5 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +5 -5
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -75
- metadata/generated/schema/type/changeEventType.py +29 -0
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +2 -1
- metadata/generated/schema/type/entityReference.py +5 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +7 -6
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +2 -2
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +2 -2
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/great_expectations/action.py +3 -2
- metadata/ingestion/api/delete.py +5 -2
- metadata/ingestion/api/models.py +4 -10
- metadata/ingestion/api/parser.py +3 -37
- metadata/ingestion/api/status.py +15 -4
- metadata/ingestion/api/step.py +39 -6
- metadata/ingestion/api/steps.py +20 -0
- metadata/ingestion/api/topology_runner.py +114 -168
- metadata/ingestion/bulksink/metadata_usage.py +11 -5
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/lineage/parser.py +4 -5
- metadata/ingestion/lineage/sql_lineage.py +9 -17
- metadata/ingestion/models/custom_pydantic.py +4 -2
- metadata/ingestion/models/lf_tags_model.py +33 -0
- metadata/ingestion/models/patch_request.py +108 -2
- metadata/ingestion/models/tests_data.py +9 -0
- metadata/ingestion/models/topology.py +177 -60
- metadata/ingestion/ometa/auth_provider.py +0 -349
- metadata/ingestion/ometa/mixins/es_mixin.py +17 -0
- metadata/ingestion/ometa/mixins/patch_mixin.py +17 -68
- metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
- metadata/ingestion/ometa/mixins/table_mixin.py +18 -0
- metadata/ingestion/ometa/mixins/tests_mixin.py +24 -3
- metadata/ingestion/ometa/mixins/user_mixin.py +117 -22
- metadata/ingestion/ometa/ometa_api.py +18 -25
- metadata/ingestion/ometa/routes.py +7 -0
- metadata/ingestion/processor/query_parser.py +9 -2
- metadata/ingestion/sink/metadata_rest.py +25 -6
- metadata/ingestion/source/dashboard/dashboard_service.py +38 -61
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +13 -14
- metadata/ingestion/source/dashboard/lightdash/metadata.py +2 -1
- metadata/ingestion/source/dashboard/looker/metadata.py +38 -25
- metadata/ingestion/source/dashboard/metabase/metadata.py +23 -6
- metadata/ingestion/source/dashboard/mode/client.py +10 -23
- metadata/ingestion/source/dashboard/mode/connection.py +6 -1
- metadata/ingestion/source/dashboard/mode/metadata.py +8 -4
- metadata/ingestion/source/dashboard/mstr/client.py +208 -0
- metadata/ingestion/source/dashboard/mstr/connection.py +53 -0
- metadata/ingestion/source/dashboard/mstr/metadata.py +182 -0
- metadata/ingestion/source/dashboard/mstr/models.py +144 -0
- metadata/ingestion/source/dashboard/powerbi/metadata.py +15 -10
- metadata/ingestion/source/dashboard/qliksense/metadata.py +11 -7
- metadata/ingestion/source/dashboard/quicksight/metadata.py +9 -5
- metadata/ingestion/source/dashboard/redash/metadata.py +23 -14
- metadata/ingestion/source/dashboard/superset/api_source.py +11 -8
- metadata/ingestion/source/dashboard/superset/client.py +16 -9
- metadata/ingestion/source/dashboard/superset/connection.py +3 -3
- metadata/ingestion/source/dashboard/superset/db_source.py +14 -10
- metadata/ingestion/source/dashboard/superset/mixin.py +22 -18
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/client.py +91 -11
- metadata/ingestion/source/dashboard/tableau/connection.py +10 -1
- metadata/ingestion/source/dashboard/tableau/metadata.py +58 -70
- metadata/ingestion/source/dashboard/tableau/models.py +0 -8
- metadata/ingestion/source/dashboard/tableau/queries.py +5 -5
- metadata/ingestion/source/database/athena/client.py +80 -0
- metadata/ingestion/source/database/athena/connection.py +7 -0
- metadata/ingestion/source/database/athena/metadata.py +161 -19
- metadata/ingestion/source/database/azuresql/metadata.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +24 -3
- metadata/ingestion/source/database/bigquery/metadata.py +39 -27
- metadata/ingestion/source/database/bigquery/queries.py +11 -4
- metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
- metadata/ingestion/source/database/bigquery/usage.py +1 -3
- metadata/ingestion/source/database/column_helpers.py +0 -10
- metadata/ingestion/source/database/column_type_parser.py +11 -5
- metadata/ingestion/source/database/common_db_source.py +8 -2
- metadata/ingestion/source/database/common_nosql_source.py +8 -4
- metadata/ingestion/source/database/database_service.py +89 -7
- metadata/ingestion/source/database/databricks/client.py +5 -10
- metadata/ingestion/source/database/databricks/connection.py +16 -55
- metadata/ingestion/source/database/databricks/lineage.py +29 -26
- metadata/ingestion/source/database/databricks/metadata.py +448 -11
- metadata/ingestion/source/database/databricks/queries.py +28 -0
- metadata/ingestion/source/database/databricks/query_parser.py +5 -1
- metadata/ingestion/source/database/databricks/usage.py +2 -2
- metadata/ingestion/source/database/datalake/connection.py +31 -4
- metadata/ingestion/source/database/datalake/metadata.py +113 -27
- metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
- metadata/ingestion/source/database/dbt/dbt_service.py +10 -14
- metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
- metadata/ingestion/source/database/dbt/metadata.py +11 -25
- metadata/ingestion/source/database/deltalake/metadata.py +6 -3
- metadata/ingestion/source/database/domodatabase/metadata.py +7 -6
- metadata/ingestion/source/database/doris/connection.py +72 -0
- metadata/ingestion/source/database/doris/metadata.py +315 -0
- metadata/ingestion/source/database/doris/queries.py +54 -0
- metadata/ingestion/source/database/doris/utils.py +64 -0
- metadata/ingestion/source/database/extended_sample_data.py +532 -0
- metadata/ingestion/source/database/glue/metadata.py +8 -5
- metadata/ingestion/source/database/hive/connection.py +0 -2
- metadata/ingestion/source/database/hive/utils.py +3 -0
- metadata/ingestion/source/database/iceberg/catalog/__init__.py +65 -0
- metadata/ingestion/source/database/iceberg/catalog/base.py +40 -0
- metadata/ingestion/source/database/iceberg/catalog/dynamodb.py +102 -0
- metadata/ingestion/source/database/iceberg/catalog/glue.py +88 -0
- metadata/ingestion/source/database/iceberg/catalog/hive.py +51 -0
- metadata/ingestion/source/database/iceberg/catalog/rest.py +84 -0
- metadata/ingestion/source/database/iceberg/connection.py +68 -0
- metadata/ingestion/source/database/iceberg/fs/__init__.py +52 -0
- metadata/ingestion/source/database/iceberg/fs/azure.py +44 -0
- metadata/ingestion/source/database/iceberg/fs/base.py +30 -0
- metadata/ingestion/source/database/iceberg/fs/s3.py +77 -0
- metadata/ingestion/source/database/iceberg/helper.py +124 -0
- metadata/ingestion/source/database/iceberg/metadata.py +311 -0
- metadata/ingestion/source/database/iceberg/models.py +66 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +72 -3
- metadata/ingestion/source/database/mongodb/connection.py +1 -5
- metadata/ingestion/source/database/mssql/lineage.py +2 -0
- metadata/ingestion/source/database/mssql/metadata.py +108 -4
- metadata/ingestion/source/database/mssql/models.py +30 -0
- metadata/ingestion/source/database/mssql/queries.py +179 -1
- metadata/ingestion/source/database/mssql/utils.py +207 -4
- metadata/ingestion/source/database/mysql/metadata.py +0 -2
- metadata/ingestion/source/database/oracle/metadata.py +108 -2
- metadata/ingestion/source/database/oracle/models.py +30 -0
- metadata/ingestion/source/database/oracle/queries.py +98 -17
- metadata/ingestion/source/database/oracle/utils.py +0 -1
- metadata/ingestion/source/database/postgres/lineage.py +32 -14
- metadata/ingestion/source/database/postgres/metadata.py +15 -7
- metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
- metadata/ingestion/source/database/postgres/queries.py +4 -2
- metadata/ingestion/source/database/postgres/query_parser.py +4 -72
- metadata/ingestion/source/database/postgres/usage.py +41 -0
- metadata/ingestion/source/database/postgres/utils.py +34 -0
- metadata/ingestion/source/database/query_parser_source.py +8 -2
- metadata/ingestion/source/database/redshift/metadata.py +14 -4
- metadata/ingestion/source/database/redshift/queries.py +10 -4
- metadata/ingestion/source/database/redshift/query_parser.py +16 -0
- metadata/ingestion/source/database/redshift/usage.py +0 -2
- metadata/ingestion/source/database/salesforce/metadata.py +32 -3
- metadata/ingestion/source/database/sample_data.py +120 -6
- metadata/ingestion/source/database/sas/client.py +184 -0
- metadata/ingestion/source/database/sas/connection.py +47 -0
- metadata/ingestion/source/database/sas/extension_attr.py +103 -0
- metadata/ingestion/source/database/sas/metadata.py +914 -0
- metadata/ingestion/source/database/snowflake/metadata.py +8 -51
- metadata/ingestion/source/database/snowflake/models.py +6 -1
- metadata/ingestion/source/database/snowflake/queries.py +0 -4
- metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
- metadata/ingestion/source/database/snowflake/utils.py +2 -6
- metadata/ingestion/source/database/stored_procedures_mixin.py +12 -8
- metadata/ingestion/source/database/unitycatalog/__init__.py +0 -0
- metadata/ingestion/source/database/unitycatalog/client.py +87 -0
- metadata/ingestion/source/database/unitycatalog/connection.py +97 -0
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/lineage.py +11 -11
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/metadata.py +42 -49
- metadata/ingestion/source/database/unitycatalog/query_parser.py +60 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +31 -0
- metadata/ingestion/source/database/usage_source.py +3 -2
- metadata/ingestion/source/messaging/common_broker_source.py +6 -4
- metadata/ingestion/source/messaging/kinesis/metadata.py +6 -3
- metadata/ingestion/source/messaging/messaging_service.py +6 -2
- metadata/ingestion/source/metadata/amundsen/metadata.py +10 -7
- metadata/ingestion/source/metadata/atlas/metadata.py +5 -5
- metadata/ingestion/source/mlmodel/mlflow/metadata.py +5 -2
- metadata/ingestion/source/mlmodel/mlmodel_service.py +6 -2
- metadata/ingestion/source/pipeline/airflow/connection.py +0 -12
- metadata/ingestion/source/pipeline/airflow/lineage_parser.py +12 -6
- metadata/ingestion/source/pipeline/airflow/metadata.py +63 -34
- metadata/ingestion/source/pipeline/airflow/models.py +5 -4
- metadata/ingestion/source/pipeline/dagster/metadata.py +7 -4
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +12 -9
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +7 -4
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +5 -2
- metadata/ingestion/source/pipeline/pipeline_service.py +6 -2
- metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
- metadata/ingestion/source/search/elasticsearch/connection.py +4 -1
- metadata/ingestion/source/search/elasticsearch/metadata.py +1 -2
- metadata/ingestion/source/search/search_service.py +6 -2
- metadata/ingestion/source/storage/s3/metadata.py +22 -17
- metadata/ingestion/source/storage/storage_service.py +53 -11
- metadata/ingestion/stage/table_usage.py +9 -2
- metadata/mixins/sqalchemy/sqa_mixin.py +14 -7
- metadata/parsers/protobuf_parser.py +29 -11
- metadata/pii/processor.py +9 -2
- metadata/profiler/api/models.py +19 -1
- metadata/profiler/interface/pandas/profiler_interface.py +59 -18
- metadata/profiler/interface/profiler_interface.py +13 -2
- metadata/profiler/interface/profiler_interface_factory.py +49 -14
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -0
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +26 -0
- metadata/profiler/interface/sqlalchemy/db2/__init__.py +0 -0
- metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +85 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +77 -34
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +7 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +33 -0
- metadata/profiler/metrics/composed/null_ratio.py +1 -1
- metadata/profiler/metrics/hybrid/histogram.py +1 -0
- metadata/profiler/metrics/static/max.py +4 -1
- metadata/profiler/metrics/static/min.py +4 -1
- metadata/profiler/metrics/system/queries/snowflake.py +89 -17
- metadata/profiler/metrics/system/system.py +62 -20
- metadata/profiler/orm/functions/length.py +1 -0
- metadata/profiler/orm/functions/median.py +7 -0
- metadata/profiler/orm/functions/table_metric_computer.py +462 -0
- metadata/profiler/orm/registry.py +1 -0
- metadata/profiler/processor/core.py +116 -52
- metadata/profiler/processor/default.py +14 -3
- metadata/profiler/processor/handle_partition.py +2 -2
- metadata/profiler/processor/processor.py +9 -4
- metadata/profiler/processor/sampler/sqlalchemy/bigquery/sampler.py +31 -3
- metadata/profiler/processor/sampler/sqlalchemy/sampler.py +29 -6
- metadata/profiler/processor/sampler/sqlalchemy/trino/sampler.py +10 -4
- metadata/profiler/source/base/profiler_source.py +5 -2
- metadata/profiler/source/bigquery/type_mapper.py +0 -1
- metadata/profiler/source/mariadb/functions/median.py +20 -0
- metadata/profiler/source/mariadb/metrics/window/first_quartile.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/median.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/third_quartile.py +10 -0
- metadata/profiler/source/metadata.py +43 -10
- metadata/profiler/source/metadata_ext.py +16 -50
- metadata/py.typed +0 -0
- metadata/readers/dataframe/json.py +5 -4
- metadata/readers/file/api_reader.py +0 -1
- metadata/utils/constants.py +5 -0
- metadata/utils/datalake/datalake_utils.py +363 -129
- metadata/utils/entity_link.py +26 -6
- metadata/utils/fqn.py +20 -0
- metadata/utils/helpers.py +55 -9
- metadata/utils/importer.py +2 -3
- metadata/utils/life_cycle_utils.py +4 -4
- metadata/utils/logger.py +13 -2
- metadata/utils/partition.py +10 -5
- metadata/utils/secrets/client/loader.py +0 -1
- metadata/utils/secrets/noop_secrets_manager.py +4 -3
- metadata/utils/secrets/secrets_manager_factory.py +3 -4
- metadata/utils/{source_hash_utils.py → source_hash.py} +10 -1
- metadata/utils/sqlalchemy_utils.py +21 -0
- metadata/utils/storage_metadata_config.py +42 -1
- metadata/utils/tag_utils.py +5 -2
- metadata/workflow/application.py +154 -0
- metadata/workflow/application_output_handler.py +34 -0
- metadata/workflow/base.py +84 -153
- metadata/workflow/data_insight.py +8 -7
- metadata/workflow/data_quality.py +3 -2
- metadata/workflow/ingestion.py +203 -0
- metadata/workflow/metadata.py +2 -3
- metadata/workflow/output_handler.py +204 -0
- metadata/workflow/profiler.py +2 -2
- metadata/workflow/usage.py +3 -4
- metadata/workflow/workflow_output_handler.py +15 -255
- metadata/workflow/workflow_status_mixin.py +44 -52
- openmetadata_ingestion-1.3.0.0.dist-info/METADATA +749 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/RECORD +812 -725
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/WHEEL +1 -1
- metadata/generated/schema/entity/applications/appConfig.py +0 -21
- metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +0 -17
- metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +0 -38
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +0 -44
- metadata/generated/schema/events/dataInsightAlertConfig.py +0 -17
- metadata/generated/schema/events/entitySpelFilters.py +0 -19
- metadata/ingestion/models/es_documents.py +0 -339
- metadata/ingestion/ometa/mixins/glossary_mixin.py +0 -501
- metadata/ingestion/ometa/provider_registry.py +0 -144
- metadata/ingestion/source/database/databricks/legacy/lineage.py +0 -51
- metadata/ingestion/source/database/databricks/legacy/metadata.py +0 -339
- metadata/ingestion/source/metadata/metadata_elasticsearch/metadata.py +0 -144
- metadata/profiler/orm/functions/table_metric_construct.py +0 -365
- openmetadata_ingestion-1.2.5.1.dist-info/METADATA +0 -426
- /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks/unity_catalog → doris}/__init__.py +0 -0
- /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/sas}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -12,9 +12,7 @@
|
|
|
12
12
|
Base class for ingesting Object Storage services
|
|
13
13
|
"""
|
|
14
14
|
from abc import ABC, abstractmethod
|
|
15
|
-
from typing import Any, Iterable, List, Optional
|
|
16
|
-
|
|
17
|
-
from pandas import DataFrame
|
|
15
|
+
from typing import Any, Iterable, List, Optional, Set
|
|
18
16
|
|
|
19
17
|
from metadata.generated.schema.api.data.createContainer import CreateContainerRequest
|
|
20
18
|
from metadata.generated.schema.entity.data.container import Container
|
|
@@ -35,14 +33,16 @@ from metadata.generated.schema.metadataIngestion.storageServiceMetadataPipeline
|
|
|
35
33
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
36
34
|
Source as WorkflowSource,
|
|
37
35
|
)
|
|
36
|
+
from metadata.ingestion.api.delete import delete_entity_from_source
|
|
38
37
|
from metadata.ingestion.api.models import Either
|
|
39
38
|
from metadata.ingestion.api.steps import Source
|
|
40
39
|
from metadata.ingestion.api.topology_runner import TopologyRunnerMixin
|
|
40
|
+
from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
41
41
|
from metadata.ingestion.models.topology import (
|
|
42
42
|
NodeStage,
|
|
43
43
|
ServiceTopology,
|
|
44
|
+
TopologyContext,
|
|
44
45
|
TopologyNode,
|
|
45
|
-
create_source_context,
|
|
46
46
|
)
|
|
47
47
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
48
48
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -50,7 +50,11 @@ from metadata.ingestion.source.database.glue.models import Column
|
|
|
50
50
|
from metadata.readers.dataframe.models import DatalakeTableSchemaWrapper
|
|
51
51
|
from metadata.readers.dataframe.reader_factory import SupportedTypes
|
|
52
52
|
from metadata.readers.models import ConfigSource
|
|
53
|
-
from metadata.utils
|
|
53
|
+
from metadata.utils import fqn
|
|
54
|
+
from metadata.utils.datalake.datalake_utils import (
|
|
55
|
+
DataFrameColumnParser,
|
|
56
|
+
fetch_dataframe,
|
|
57
|
+
)
|
|
54
58
|
from metadata.utils.logger import ingestion_logger
|
|
55
59
|
from metadata.utils.storage_metadata_config import (
|
|
56
60
|
StorageMetadataConfigException,
|
|
@@ -64,7 +68,6 @@ OPENMETADATA_TEMPLATE_FILE_NAME = "openmetadata.json"
|
|
|
64
68
|
|
|
65
69
|
|
|
66
70
|
class StorageServiceTopology(ServiceTopology):
|
|
67
|
-
|
|
68
71
|
root = TopologyNode(
|
|
69
72
|
producer="get_services",
|
|
70
73
|
stages=[
|
|
@@ -78,6 +81,7 @@ class StorageServiceTopology(ServiceTopology):
|
|
|
78
81
|
),
|
|
79
82
|
],
|
|
80
83
|
children=["container"],
|
|
84
|
+
post_process=["mark_containers_as_deleted"],
|
|
81
85
|
)
|
|
82
86
|
|
|
83
87
|
container = TopologyNode(
|
|
@@ -108,7 +112,8 @@ class StorageServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
108
112
|
service_connection: StorageConnection.__fields__["config"].type_
|
|
109
113
|
|
|
110
114
|
topology = StorageServiceTopology()
|
|
111
|
-
context =
|
|
115
|
+
context = TopologyContext.create(topology)
|
|
116
|
+
container_source_state: Set = set()
|
|
112
117
|
|
|
113
118
|
global_manifest: Optional[ManifestMetadataConfig]
|
|
114
119
|
|
|
@@ -135,6 +140,10 @@ class StorageServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
135
140
|
ManifestMetadataConfig
|
|
136
141
|
] = self.get_manifest_file()
|
|
137
142
|
|
|
143
|
+
@property
|
|
144
|
+
def name(self) -> str:
|
|
145
|
+
return self.service_connection.type.name
|
|
146
|
+
|
|
138
147
|
def get_manifest_file(self) -> Optional[ManifestMetadataConfig]:
|
|
139
148
|
if self.source_config.storageMetadataConfigSource and not isinstance(
|
|
140
149
|
self.source_config.storageMetadataConfigSource,
|
|
@@ -167,10 +176,43 @@ class StorageServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
167
176
|
def prepare(self):
|
|
168
177
|
"""By default, nothing needs to be taken care of when loading the source"""
|
|
169
178
|
|
|
179
|
+
def register_record(self, container_request: CreateContainerRequest) -> None:
|
|
180
|
+
"""
|
|
181
|
+
Mark the container record as scanned and update
|
|
182
|
+
the storage_source_state
|
|
183
|
+
"""
|
|
184
|
+
parent_container = (
|
|
185
|
+
self.metadata.get_by_id(
|
|
186
|
+
entity=Container, entity_id=container_request.parent.id
|
|
187
|
+
).fullyQualifiedName.__root__
|
|
188
|
+
if container_request.parent
|
|
189
|
+
else None
|
|
190
|
+
)
|
|
191
|
+
container_fqn = fqn.build(
|
|
192
|
+
self.metadata,
|
|
193
|
+
entity_type=Container,
|
|
194
|
+
service_name=self.context.objectstore_service,
|
|
195
|
+
parent_container=parent_container,
|
|
196
|
+
container_name=container_request.name.__root__,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
self.container_source_state.add(container_fqn)
|
|
200
|
+
|
|
170
201
|
def test_connection(self) -> None:
|
|
171
202
|
test_connection_fn = get_test_connection_fn(self.service_connection)
|
|
172
203
|
test_connection_fn(self.metadata, self.connection_obj, self.service_connection)
|
|
173
204
|
|
|
205
|
+
def mark_containers_as_deleted(self) -> Iterable[Either[DeleteEntity]]:
|
|
206
|
+
"""Method to mark the containers as deleted"""
|
|
207
|
+
if self.source_config.markDeletedContainers:
|
|
208
|
+
yield from delete_entity_from_source(
|
|
209
|
+
metadata=self.metadata,
|
|
210
|
+
entity_type=Container,
|
|
211
|
+
entity_source_state=self.container_source_state,
|
|
212
|
+
mark_deleted_entity=self.source_config.markDeletedContainers,
|
|
213
|
+
params={"service": self.context.objectstore_service},
|
|
214
|
+
)
|
|
215
|
+
|
|
174
216
|
def yield_create_request_objectstore_service(self, config: WorkflowSource):
|
|
175
217
|
yield Either(
|
|
176
218
|
right=self.metadata.get_create_service_from_source(
|
|
@@ -229,10 +271,10 @@ class StorageServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
229
271
|
),
|
|
230
272
|
)
|
|
231
273
|
columns = []
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
274
|
+
column_parser = DataFrameColumnParser.create(
|
|
275
|
+
data_structure_details, SupportedTypes(metadata_entry.structureFormat)
|
|
276
|
+
)
|
|
277
|
+
columns = column_parser.get_columns()
|
|
236
278
|
return columns
|
|
237
279
|
|
|
238
280
|
def _get_columns(
|
|
@@ -22,10 +22,13 @@ from typing import Iterable, List, Optional, Tuple
|
|
|
22
22
|
|
|
23
23
|
from metadata.config.common import ConfigModel
|
|
24
24
|
from metadata.generated.schema.api.data.createQuery import CreateQueryRequest
|
|
25
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
26
|
+
StackTraceError,
|
|
27
|
+
)
|
|
25
28
|
from metadata.generated.schema.entity.teams.user import User
|
|
26
29
|
from metadata.generated.schema.type.queryParserData import ParsedData, QueryParserData
|
|
27
30
|
from metadata.generated.schema.type.tableUsageCount import TableUsageCount
|
|
28
|
-
from metadata.ingestion.api.models import Either
|
|
31
|
+
from metadata.ingestion.api.models import Either
|
|
29
32
|
from metadata.ingestion.api.steps import Stage
|
|
30
33
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
34
|
from metadata.utils.constants import UTF_8
|
|
@@ -62,6 +65,10 @@ class TableUsageStage(Stage):
|
|
|
62
65
|
init_staging_dir(self.config.filename)
|
|
63
66
|
self.wrote_something = False
|
|
64
67
|
|
|
68
|
+
@property
|
|
69
|
+
def name(self) -> str:
|
|
70
|
+
return "Table Usage"
|
|
71
|
+
|
|
65
72
|
@classmethod
|
|
66
73
|
def create(cls, config_dict: dict, metadata: OpenMetadata):
|
|
67
74
|
config = TableStageConfig.parse_obj(config_dict)
|
|
@@ -153,7 +160,7 @@ class TableUsageStage(Stage):
|
|
|
153
160
|
left=StackTraceError(
|
|
154
161
|
name=table,
|
|
155
162
|
error=f"Error in staging record [{exc}]",
|
|
156
|
-
|
|
163
|
+
stackTrace=traceback.format_exc(),
|
|
157
164
|
)
|
|
158
165
|
)
|
|
159
166
|
yield Either(right=table)
|
|
@@ -26,6 +26,9 @@ from metadata.generated.schema.entity.services.connections.database.databricksCo
|
|
|
26
26
|
from metadata.generated.schema.entity.services.connections.database.snowflakeConnection import (
|
|
27
27
|
SnowflakeType,
|
|
28
28
|
)
|
|
29
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
30
|
+
UnityCatalogConnection,
|
|
31
|
+
)
|
|
29
32
|
from metadata.ingestion.source.connections import get_connection
|
|
30
33
|
from metadata.ingestion.source.database.snowflake.queries import (
|
|
31
34
|
SNOWFLAKE_SESSION_TAG_QUERY,
|
|
@@ -84,17 +87,21 @@ class SQAInterfaceMixin:
|
|
|
84
87
|
)
|
|
85
88
|
|
|
86
89
|
def set_catalog(self, session) -> None:
|
|
87
|
-
"""Set catalog for the session. Right now only databricks requires it
|
|
90
|
+
"""Set catalog for the session. Right now only databricks and unity catalog requires it
|
|
88
91
|
|
|
89
92
|
Args:
|
|
90
93
|
session (Session): sqa session object
|
|
91
94
|
"""
|
|
92
|
-
if isinstance(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
if not isinstance(
|
|
96
|
+
self.service_connection_config,
|
|
97
|
+
(UnityCatalogConnection, DatabricksConnection),
|
|
98
|
+
):
|
|
99
|
+
return
|
|
100
|
+
bind = session.get_bind()
|
|
101
|
+
bind.execute(
|
|
102
|
+
"USE CATALOG %(catalog)s;",
|
|
103
|
+
{"catalog": self.service_connection_config.catalog},
|
|
104
|
+
).first()
|
|
98
105
|
|
|
99
106
|
def close(self):
|
|
100
107
|
"""close session"""
|
|
@@ -20,12 +20,14 @@ import sys
|
|
|
20
20
|
import traceback
|
|
21
21
|
from enum import Enum
|
|
22
22
|
from pathlib import Path
|
|
23
|
-
from typing import List, Optional
|
|
23
|
+
from typing import List, Optional, Union
|
|
24
24
|
|
|
25
25
|
import grpc_tools.protoc
|
|
26
26
|
from pydantic import BaseModel
|
|
27
|
+
from pydantic.main import ModelMetaclass
|
|
27
28
|
|
|
28
|
-
from metadata.generated.schema.
|
|
29
|
+
from metadata.generated.schema.entity.data.table import Column, DataType
|
|
30
|
+
from metadata.generated.schema.type.schema import DataTypeTopic, FieldModel
|
|
29
31
|
from metadata.utils.helpers import snake_to_camel
|
|
30
32
|
from metadata.utils.logger import ingestion_logger
|
|
31
33
|
|
|
@@ -37,12 +39,12 @@ class ProtobufDataTypes(Enum):
|
|
|
37
39
|
Enum for Protobuf Datatypes
|
|
38
40
|
"""
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
UNKNOWN = 0
|
|
41
43
|
DOUBLE = 1
|
|
42
44
|
FLOAT = 2
|
|
43
45
|
INT = 3, 4, 5, 13, 17, 18
|
|
44
46
|
FIXED = 6, 7, 15, 16
|
|
45
|
-
|
|
47
|
+
BOOLEAN = 8
|
|
46
48
|
STRING = 9
|
|
47
49
|
UNION = 10
|
|
48
50
|
RECORD = 11
|
|
@@ -165,7 +167,9 @@ class ProtobufParser:
|
|
|
165
167
|
)
|
|
166
168
|
return None
|
|
167
169
|
|
|
168
|
-
def parse_protobuf_schema(
|
|
170
|
+
def parse_protobuf_schema(
|
|
171
|
+
self, cls: ModelMetaclass = FieldModel
|
|
172
|
+
) -> Optional[List[Union[FieldModel, Column]]]:
|
|
169
173
|
"""
|
|
170
174
|
Method to parse the protobuf schema
|
|
171
175
|
"""
|
|
@@ -177,10 +181,12 @@ class ProtobufParser:
|
|
|
177
181
|
)
|
|
178
182
|
|
|
179
183
|
field_models = [
|
|
180
|
-
|
|
184
|
+
cls(
|
|
181
185
|
name=instance.DESCRIPTOR.name,
|
|
182
186
|
dataType="RECORD",
|
|
183
|
-
children=self.get_protobuf_fields(
|
|
187
|
+
children=self.get_protobuf_fields(
|
|
188
|
+
instance.DESCRIPTOR.fields, cls=cls
|
|
189
|
+
),
|
|
184
190
|
)
|
|
185
191
|
]
|
|
186
192
|
|
|
@@ -196,7 +202,17 @@ class ProtobufParser:
|
|
|
196
202
|
)
|
|
197
203
|
return None
|
|
198
204
|
|
|
199
|
-
def
|
|
205
|
+
def _get_field_type(self, type_: int, cls: ModelMetaclass = FieldModel) -> str:
|
|
206
|
+
if type_ > 18:
|
|
207
|
+
return DataType.UNKNOWN.value
|
|
208
|
+
data_type = ProtobufDataTypes(type_).name
|
|
209
|
+
if cls == Column and data_type == DataTypeTopic.FIXED.value:
|
|
210
|
+
return DataType.INT.value
|
|
211
|
+
return data_type
|
|
212
|
+
|
|
213
|
+
def get_protobuf_fields(
|
|
214
|
+
self, fields, cls: ModelMetaclass = FieldModel
|
|
215
|
+
) -> Optional[List[Union[FieldModel, Column]]]:
|
|
200
216
|
"""
|
|
201
217
|
Recursively convert the parsed schema into required models
|
|
202
218
|
"""
|
|
@@ -205,10 +221,12 @@ class ProtobufParser:
|
|
|
205
221
|
for field in fields:
|
|
206
222
|
try:
|
|
207
223
|
field_models.append(
|
|
208
|
-
|
|
224
|
+
cls(
|
|
209
225
|
name=field.name,
|
|
210
|
-
dataType=
|
|
211
|
-
children=self.get_protobuf_fields(
|
|
226
|
+
dataType=self._get_field_type(field.type, cls=cls),
|
|
227
|
+
children=self.get_protobuf_fields(
|
|
228
|
+
field.message_type.fields, cls=cls
|
|
229
|
+
)
|
|
212
230
|
if field.type == 11
|
|
213
231
|
else None,
|
|
214
232
|
)
|
metadata/pii/processor.py
CHANGED
|
@@ -16,6 +16,9 @@ import traceback
|
|
|
16
16
|
from typing import List, Optional, cast
|
|
17
17
|
|
|
18
18
|
from metadata.generated.schema.entity.data.table import Column, TableData
|
|
19
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
20
|
+
StackTraceError,
|
|
21
|
+
)
|
|
19
22
|
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
20
23
|
DatabaseServiceProfilerPipeline,
|
|
21
24
|
)
|
|
@@ -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.api.parser import parse_workflow_config_gracefully
|
|
33
36
|
from metadata.ingestion.api.step import Step
|
|
34
37
|
from metadata.ingestion.api.steps import Processor
|
|
@@ -65,6 +68,10 @@ class PIIProcessor(Processor):
|
|
|
65
68
|
self._ner_scanner = None
|
|
66
69
|
self.confidence_threshold = self.source_config.confidence
|
|
67
70
|
|
|
71
|
+
@property
|
|
72
|
+
def name(self) -> str:
|
|
73
|
+
return "PII Processor"
|
|
74
|
+
|
|
68
75
|
@property
|
|
69
76
|
def ner_scanner(self) -> NERScanner:
|
|
70
77
|
"""Load the NER Scanner only if called"""
|
|
@@ -170,7 +177,7 @@ class PIIProcessor(Processor):
|
|
|
170
177
|
StackTraceError(
|
|
171
178
|
name=record.table.fullyQualifiedName.__root__,
|
|
172
179
|
error=f"Error computing PII tags for [{column}] - [{err}]",
|
|
173
|
-
|
|
180
|
+
stackTrace=traceback.format_exc(),
|
|
174
181
|
)
|
|
175
182
|
)
|
|
176
183
|
|
metadata/profiler/api/models.py
CHANGED
|
@@ -15,7 +15,10 @@ Return types for Profiler workflow execution.
|
|
|
15
15
|
We need to define this class as we end up having
|
|
16
16
|
multiple profilers per table and columns.
|
|
17
17
|
"""
|
|
18
|
-
from typing import List, Optional, Union
|
|
18
|
+
from typing import List, Optional, Type, Union
|
|
19
|
+
|
|
20
|
+
from sqlalchemy import Column
|
|
21
|
+
from sqlalchemy.orm import DeclarativeMeta
|
|
19
22
|
|
|
20
23
|
from metadata.config.common import ConfigModel
|
|
21
24
|
from metadata.generated.schema.api.data.createTableProfile import (
|
|
@@ -31,9 +34,12 @@ from metadata.generated.schema.entity.data.table import (
|
|
|
31
34
|
from metadata.generated.schema.entity.services.connections.connectionBasicType import (
|
|
32
35
|
SampleDataStorageConfig,
|
|
33
36
|
)
|
|
37
|
+
from metadata.generated.schema.tests.customMetric import CustomMetric
|
|
34
38
|
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
35
39
|
from metadata.ingestion.models.table_metadata import ColumnTag
|
|
40
|
+
from metadata.profiler.metrics.core import Metric, MetricTypes
|
|
36
41
|
from metadata.profiler.processor.models import ProfilerDef
|
|
42
|
+
from metadata.utils.sqa_like_column import SQALikeColumn
|
|
37
43
|
|
|
38
44
|
|
|
39
45
|
class ColumnConfig(ConfigModel):
|
|
@@ -113,3 +119,15 @@ class ProfilerResponse(ConfigModel):
|
|
|
113
119
|
def __str__(self):
|
|
114
120
|
"""Return the table name being processed"""
|
|
115
121
|
return f"Table [{self.table.name.__root__}]"
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class ThreadPoolMetrics(ConfigModel):
|
|
125
|
+
"""thread pool metric"""
|
|
126
|
+
|
|
127
|
+
metrics: Union[List[Union[Type[Metric], CustomMetric]], Type[Metric]]
|
|
128
|
+
metric_type: MetricTypes
|
|
129
|
+
column: Optional[Union[Column, SQALikeColumn]]
|
|
130
|
+
table: Union[Table, DeclarativeMeta]
|
|
131
|
+
|
|
132
|
+
class Config:
|
|
133
|
+
arbitrary_types_allowed = True
|
|
@@ -22,17 +22,22 @@ from typing import Dict, List, Optional
|
|
|
22
22
|
|
|
23
23
|
from sqlalchemy import Column
|
|
24
24
|
|
|
25
|
-
from metadata.generated.schema.entity.data.table import TableData
|
|
25
|
+
from metadata.generated.schema.entity.data.table import CustomMetricProfile, TableData
|
|
26
26
|
from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
|
|
27
27
|
DatalakeConnection,
|
|
28
28
|
)
|
|
29
|
+
from metadata.generated.schema.tests.customMetric import CustomMetric
|
|
29
30
|
from metadata.mixins.pandas.pandas_mixin import PandasInterfaceMixin
|
|
31
|
+
from metadata.profiler.api.models import ThreadPoolMetrics
|
|
30
32
|
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
31
33
|
from metadata.profiler.metrics.core import MetricTypes
|
|
32
34
|
from metadata.profiler.metrics.registry import Metrics
|
|
33
35
|
from metadata.readers.dataframe.models import DatalakeTableSchemaWrapper
|
|
34
36
|
from metadata.utils.constants import COMPLEX_COLUMN_SEPARATOR, SAMPLE_DATA_DEFAULT_COUNT
|
|
35
|
-
from metadata.utils.datalake.datalake_utils import
|
|
37
|
+
from metadata.utils.datalake.datalake_utils import (
|
|
38
|
+
GenericDataFrameColumnParser,
|
|
39
|
+
fetch_dataframe,
|
|
40
|
+
)
|
|
36
41
|
from metadata.utils.logger import profiler_interface_registry_logger
|
|
37
42
|
from metadata.utils.sqa_like_column import SQALikeColumn
|
|
38
43
|
|
|
@@ -239,35 +244,67 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
239
244
|
"""
|
|
240
245
|
return None # to be implemented
|
|
241
246
|
|
|
247
|
+
def _compute_custom_metrics(
|
|
248
|
+
self, metrics: List[CustomMetric], runner, *args, **kwargs
|
|
249
|
+
):
|
|
250
|
+
"""Compute custom metrics. For pandas source we expect expression
|
|
251
|
+
to be a boolean value. We'll return the length of the dataframe
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
metrics (List[Metrics]): list of customMetrics
|
|
255
|
+
runner (_type_): runner
|
|
256
|
+
"""
|
|
257
|
+
if not metrics:
|
|
258
|
+
return None
|
|
259
|
+
|
|
260
|
+
custom_metrics = []
|
|
261
|
+
|
|
262
|
+
for metric in metrics:
|
|
263
|
+
try:
|
|
264
|
+
row = sum(
|
|
265
|
+
len(df.query(metric.expression).index)
|
|
266
|
+
for df in runner
|
|
267
|
+
if len(df.query(metric.expression).index)
|
|
268
|
+
)
|
|
269
|
+
custom_metrics.append(
|
|
270
|
+
CustomMetricProfile(name=metric.name.__root__, value=row)
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
except Exception as exc:
|
|
274
|
+
msg = f"Error trying to compute profile for custom metric: {exc}"
|
|
275
|
+
logger.debug(traceback.format_exc())
|
|
276
|
+
logger.warning(msg)
|
|
277
|
+
if custom_metrics:
|
|
278
|
+
return {"customMetrics": custom_metrics}
|
|
279
|
+
return None
|
|
280
|
+
|
|
242
281
|
def compute_metrics(
|
|
243
282
|
self,
|
|
244
|
-
|
|
245
|
-
metric_type,
|
|
246
|
-
column,
|
|
247
|
-
table,
|
|
283
|
+
metric_func: ThreadPoolMetrics,
|
|
248
284
|
):
|
|
249
285
|
"""Run metrics in processor worker"""
|
|
250
|
-
logger.debug(f"Running profiler for {table}")
|
|
286
|
+
logger.debug(f"Running profiler for {metric_func.table}")
|
|
251
287
|
try:
|
|
252
288
|
row = None
|
|
253
289
|
if self.complex_dataframe_sample:
|
|
254
|
-
row = self._get_metric_fn[metric_type.value](
|
|
255
|
-
metrics,
|
|
290
|
+
row = self._get_metric_fn[metric_func.metric_type.value](
|
|
291
|
+
metric_func.metrics,
|
|
256
292
|
self.complex_dataframe_sample,
|
|
257
|
-
column=column,
|
|
293
|
+
column=metric_func.column,
|
|
258
294
|
)
|
|
259
295
|
except Exception as exc:
|
|
260
|
-
name = f"{column if column is not None else table}"
|
|
296
|
+
name = f"{metric_func.column if metric_func.column is not None else metric_func.table}"
|
|
261
297
|
error = f"{name} metric_type.value: {exc}"
|
|
262
298
|
logger.error(error)
|
|
263
299
|
self.status.failed_profiler(error, traceback.format_exc())
|
|
264
300
|
row = None
|
|
265
|
-
if column is not None:
|
|
266
|
-
column = column.name
|
|
267
|
-
self.status.scanned(f"{table.name.__root__}.{column}")
|
|
301
|
+
if metric_func.column is not None:
|
|
302
|
+
column = metric_func.column.name
|
|
303
|
+
self.status.scanned(f"{metric_func.table.name.__root__}.{column}")
|
|
268
304
|
else:
|
|
269
|
-
self.status.scanned(table.name.__root__)
|
|
270
|
-
|
|
305
|
+
self.status.scanned(metric_func.table.name.__root__)
|
|
306
|
+
column = None
|
|
307
|
+
return row, column, metric_func.metric_type.value
|
|
271
308
|
|
|
272
309
|
def fetch_sample_data(self, table, columns: SQALikeColumn) -> TableData:
|
|
273
310
|
"""Fetch sample data from database
|
|
@@ -329,7 +366,7 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
329
366
|
|
|
330
367
|
profile_results = {"table": {}, "columns": defaultdict(dict)}
|
|
331
368
|
metric_list = [
|
|
332
|
-
self.compute_metrics(
|
|
369
|
+
self.compute_metrics(metric_func) for metric_func in metric_funcs
|
|
333
370
|
]
|
|
334
371
|
for metric_result in metric_list:
|
|
335
372
|
profile, column, metric_type = metric_result
|
|
@@ -338,6 +375,8 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
338
375
|
profile_results["table"].update(profile)
|
|
339
376
|
if metric_type == MetricTypes.System.value:
|
|
340
377
|
profile_results["system"] = profile
|
|
378
|
+
elif metric_type == MetricTypes.Custom.value and column is None:
|
|
379
|
+
profile_results["table"].update(profile)
|
|
341
380
|
else:
|
|
342
381
|
if profile:
|
|
343
382
|
profile_results["columns"][column].update(
|
|
@@ -375,7 +414,9 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
375
414
|
sqalike_columns.append(
|
|
376
415
|
SQALikeColumn(
|
|
377
416
|
column_name,
|
|
378
|
-
fetch_col_types(
|
|
417
|
+
GenericDataFrameColumnParser.fetch_col_types(
|
|
418
|
+
self.complex_dataframe_sample[0], column_name
|
|
419
|
+
),
|
|
379
420
|
)
|
|
380
421
|
)
|
|
381
422
|
return sqalike_columns
|
|
@@ -42,10 +42,13 @@ from metadata.generated.schema.entity.services.databaseService import (
|
|
|
42
42
|
DatabaseConnection,
|
|
43
43
|
DatabaseService,
|
|
44
44
|
)
|
|
45
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
46
|
+
StackTraceError,
|
|
47
|
+
)
|
|
45
48
|
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
46
49
|
DatabaseServiceProfilerPipeline,
|
|
47
50
|
)
|
|
48
|
-
from metadata.
|
|
51
|
+
from metadata.generated.schema.tests.customMetric import CustomMetric
|
|
49
52
|
from metadata.ingestion.api.status import Status
|
|
50
53
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
51
54
|
from metadata.ingestion.source.connections import get_connection
|
|
@@ -75,7 +78,7 @@ class ProfilerProcessorStatus(Status):
|
|
|
75
78
|
StackTraceError(
|
|
76
79
|
name=self.entity if self.entity else "",
|
|
77
80
|
error=error,
|
|
78
|
-
|
|
81
|
+
stackTrace=stack_trace,
|
|
79
82
|
)
|
|
80
83
|
)
|
|
81
84
|
|
|
@@ -129,6 +132,7 @@ class ProfilerInterface(ABC):
|
|
|
129
132
|
MetricTypes.Query.value: self._compute_query_metrics,
|
|
130
133
|
MetricTypes.Window.value: self._compute_window_metrics,
|
|
131
134
|
MetricTypes.System.value: self._compute_system_metrics,
|
|
135
|
+
MetricTypes.Custom.value: self._compute_custom_metrics,
|
|
132
136
|
}
|
|
133
137
|
|
|
134
138
|
@abstractmethod
|
|
@@ -458,6 +462,13 @@ class ProfilerInterface(ABC):
|
|
|
458
462
|
"""Get metrics"""
|
|
459
463
|
raise NotImplementedError
|
|
460
464
|
|
|
465
|
+
@abstractmethod
|
|
466
|
+
def _compute_custom_metrics(
|
|
467
|
+
self, metrics: List[CustomMetric], runner, *args, **kwargs
|
|
468
|
+
):
|
|
469
|
+
"""Compute custom metrics"""
|
|
470
|
+
raise NotImplementedError
|
|
471
|
+
|
|
461
472
|
@abstractmethod
|
|
462
473
|
def get_all_metrics(self, metric_funcs) -> dict:
|
|
463
474
|
"""run profiler metrics"""
|
|
@@ -18,9 +18,18 @@ from typing import cast
|
|
|
18
18
|
from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
|
|
19
19
|
BigQueryConnection,
|
|
20
20
|
)
|
|
21
|
+
from metadata.generated.schema.entity.services.connections.database.databricksConnection import (
|
|
22
|
+
DatabricksConnection,
|
|
23
|
+
)
|
|
21
24
|
from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
|
|
22
25
|
DatalakeConnection,
|
|
23
26
|
)
|
|
27
|
+
from metadata.generated.schema.entity.services.connections.database.db2Connection import (
|
|
28
|
+
Db2Connection,
|
|
29
|
+
)
|
|
30
|
+
from metadata.generated.schema.entity.services.connections.database.mariaDBConnection import (
|
|
31
|
+
MariaDBConnection,
|
|
32
|
+
)
|
|
24
33
|
from metadata.generated.schema.entity.services.connections.database.singleStoreConnection import (
|
|
25
34
|
SingleStoreConnection,
|
|
26
35
|
)
|
|
@@ -30,6 +39,9 @@ from metadata.generated.schema.entity.services.connections.database.snowflakeCon
|
|
|
30
39
|
from metadata.generated.schema.entity.services.connections.database.trinoConnection import (
|
|
31
40
|
TrinoConnection,
|
|
32
41
|
)
|
|
42
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
43
|
+
UnityCatalogConnection,
|
|
44
|
+
)
|
|
33
45
|
from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
|
|
34
46
|
from metadata.profiler.interface.pandas.profiler_interface import (
|
|
35
47
|
PandasProfilerInterface,
|
|
@@ -38,6 +50,15 @@ from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
|
38
50
|
from metadata.profiler.interface.sqlalchemy.bigquery.profiler_interface import (
|
|
39
51
|
BigQueryProfilerInterface,
|
|
40
52
|
)
|
|
53
|
+
from metadata.profiler.interface.sqlalchemy.databricks.profiler_interface import (
|
|
54
|
+
DatabricksProfilerInterface,
|
|
55
|
+
)
|
|
56
|
+
from metadata.profiler.interface.sqlalchemy.db2.profiler_interface import (
|
|
57
|
+
DB2ProfilerInterface,
|
|
58
|
+
)
|
|
59
|
+
from metadata.profiler.interface.sqlalchemy.mariadb.profiler_interface import (
|
|
60
|
+
MariaDBProfilerInterface,
|
|
61
|
+
)
|
|
41
62
|
from metadata.profiler.interface.sqlalchemy.profiler_interface import (
|
|
42
63
|
SQAProfilerInterface,
|
|
43
64
|
)
|
|
@@ -50,6 +71,9 @@ from metadata.profiler.interface.sqlalchemy.snowflake.profiler_interface import
|
|
|
50
71
|
from metadata.profiler.interface.sqlalchemy.trino.profiler_interface import (
|
|
51
72
|
TrinoProfilerInterface,
|
|
52
73
|
)
|
|
74
|
+
from metadata.profiler.interface.sqlalchemy.unity_catalog.profiler_interface import (
|
|
75
|
+
UnityCatalogProfilerInterface,
|
|
76
|
+
)
|
|
53
77
|
|
|
54
78
|
|
|
55
79
|
class ProfilerInterfaceFactory:
|
|
@@ -62,6 +86,17 @@ class ProfilerInterfaceFactory:
|
|
|
62
86
|
"""Register a new interface"""
|
|
63
87
|
self._interface_type[interface_type] = interface_class
|
|
64
88
|
|
|
89
|
+
def register_many(self, interface_dict):
|
|
90
|
+
"""
|
|
91
|
+
Registers multiple profiler interfaces at once.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
interface_dict: A dictionary mapping connection class names (strings) to their
|
|
95
|
+
corresponding profiler interface classes.
|
|
96
|
+
"""
|
|
97
|
+
for interface_type, interface_class in interface_dict.items():
|
|
98
|
+
self.register(interface_type, interface_class)
|
|
99
|
+
|
|
65
100
|
def create(self, interface_type: str, *args, **kwargs):
|
|
66
101
|
"""Create interface object based on interface type"""
|
|
67
102
|
interface_class = self._interface_type.get(interface_type)
|
|
@@ -72,17 +107,17 @@ class ProfilerInterfaceFactory:
|
|
|
72
107
|
|
|
73
108
|
|
|
74
109
|
profiler_interface_factory = ProfilerInterfaceFactory()
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
BigQueryConnection.__name__
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
profiler_interface_factory.
|
|
110
|
+
profilers = {
|
|
111
|
+
DatabaseConnection.__name__: SQAProfilerInterface,
|
|
112
|
+
BigQueryConnection.__name__: BigQueryProfilerInterface,
|
|
113
|
+
SingleStoreConnection.__name__: SingleStoreProfilerInterface,
|
|
114
|
+
DatalakeConnection.__name__: PandasProfilerInterface,
|
|
115
|
+
MariaDBConnection.__name__: MariaDBProfilerInterface,
|
|
116
|
+
SnowflakeConnection.__name__: SnowflakeProfilerInterface,
|
|
117
|
+
TrinoConnection.__name__: TrinoProfilerInterface,
|
|
118
|
+
UnityCatalogConnection.__name__: UnityCatalogProfilerInterface,
|
|
119
|
+
DatabricksConnection.__name__: DatabricksProfilerInterface,
|
|
120
|
+
Db2Connection.__name__: DB2ProfilerInterface,
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
profiler_interface_factory.register_many(profilers)
|
|
@@ -32,6 +32,9 @@ class BigQueryProfilerInterface(SQAProfilerInterface):
|
|
|
32
32
|
for key, value in columns.items():
|
|
33
33
|
if not isinstance(value, STRUCT):
|
|
34
34
|
col = Column(f"{parent}.{key}", value)
|
|
35
|
+
# pylint: disable=protected-access
|
|
36
|
+
col._set_parent(self.table.__table__)
|
|
37
|
+
# pylint: enable=protected-access
|
|
35
38
|
columns_list.append(col)
|
|
36
39
|
else:
|
|
37
40
|
col = self._get_struct_columns(
|