openmetadata-ingestion 1.3.4.0__py3-none-any.whl → 1.4.0.0rc2__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.
- metadata/__version__.py +13 -0
- metadata/automations/runner.py +9 -0
- metadata/cli/app.py +0 -1
- metadata/cli/lineage.py +5 -1
- metadata/cli/restore.py +7 -0
- metadata/cmd.py +2 -345
- metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +0 -1
- metadata/data_quality/api/models.py +1 -0
- metadata/data_quality/processor/test_case_runner.py +9 -2
- metadata/data_quality/source/test_suite.py +14 -3
- metadata/data_quality/validations/base_test_handler.py +1 -1
- metadata/data_quality/validations/column/base/columnValuesMissingCount.py +4 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeUnique.py +28 -17
- metadata/data_quality/validations/mixins/sqa_validator_mixin.py +4 -1
- metadata/data_quality/validations/table/base/tableCustomSQLQuery.py +1 -1
- metadata/examples/workflows/airbyte.yaml +1 -0
- metadata/examples/workflows/airflow.yaml +1 -1
- metadata/examples/workflows/airflow_backend.yaml +1 -1
- metadata/examples/workflows/airflow_postgres.yaml +1 -1
- metadata/examples/workflows/amundsen.yaml +1 -0
- metadata/examples/workflows/athena.yaml +1 -0
- metadata/examples/workflows/athena_lineage.yaml +1 -1
- metadata/examples/workflows/athena_usage.yaml +1 -0
- metadata/examples/workflows/atlas.yaml +1 -0
- metadata/examples/workflows/azuresql.yaml +1 -0
- metadata/examples/workflows/azuresql_lineage.yaml +1 -0
- metadata/examples/workflows/azuresql_usage.yaml +1 -0
- metadata/examples/workflows/bigquery.yaml +1 -0
- metadata/examples/workflows/bigquery_lineage.yaml +1 -0
- metadata/examples/workflows/bigquery_profiler.yaml +1 -0
- metadata/examples/workflows/bigquery_usage.yaml +1 -0
- metadata/examples/workflows/bigtable.yaml +1 -1
- metadata/examples/workflows/clickhouse.yaml +1 -0
- metadata/examples/workflows/clickhouse_lineage.yaml +1 -0
- metadata/examples/workflows/clickhouse_usage.yaml +1 -0
- metadata/examples/workflows/couchbase.yaml +1 -1
- metadata/examples/workflows/dagster.yaml +1 -0
- metadata/examples/workflows/data_insight.yaml +1 -1
- metadata/examples/workflows/databricks.yaml +1 -0
- metadata/examples/workflows/databricks_lineage.yaml +1 -0
- metadata/examples/workflows/databricks_pipeline.yaml +1 -0
- metadata/examples/workflows/databricks_usage.yaml +1 -0
- metadata/examples/workflows/datalake_azure_client_secret.yaml +1 -0
- metadata/examples/workflows/datalake_gcs.yaml +1 -0
- metadata/examples/workflows/datalake_profiler.yaml +1 -0
- metadata/examples/workflows/datalake_s3.yaml +1 -0
- metadata/examples/workflows/db2.yaml +1 -0
- metadata/examples/workflows/db2_profiler.yaml +1 -0
- metadata/examples/workflows/dbt.yaml +2 -0
- metadata/examples/workflows/deltalake.yaml +1 -0
- metadata/examples/workflows/domodashboard.yaml +1 -0
- metadata/examples/workflows/dynamodb.yaml +1 -0
- metadata/examples/workflows/elasticsearch.yaml +1 -1
- metadata/examples/workflows/fivetran.yaml +1 -0
- metadata/examples/workflows/glue.yaml +1 -0
- metadata/examples/workflows/gluepipeline.yaml +1 -0
- metadata/examples/workflows/hive.yaml +1 -0
- metadata/examples/workflows/impala.yaml +1 -0
- metadata/examples/workflows/kafka.yaml +1 -1
- metadata/examples/workflows/kafka_connect.yaml +30 -0
- metadata/examples/workflows/kinesis.yaml +1 -1
- metadata/examples/workflows/lightdash.yaml +1 -0
- metadata/examples/workflows/looker.yaml +1 -0
- metadata/examples/workflows/mariadb.yaml +1 -0
- metadata/examples/workflows/metabase.yaml +1 -0
- metadata/examples/workflows/mlflow.yaml +1 -0
- metadata/examples/workflows/mode.yaml +3 -1
- metadata/examples/workflows/mongodb.yaml +1 -0
- metadata/examples/workflows/mssql.yaml +1 -0
- metadata/examples/workflows/mssql_lineage.yaml +1 -0
- metadata/examples/workflows/mssql_usage.yaml +1 -0
- metadata/examples/workflows/mstr.yaml +1 -0
- metadata/examples/workflows/mysql.yaml +1 -0
- metadata/examples/workflows/mysql_profiler.yaml +1 -0
- metadata/examples/workflows/openmetadata.yaml +1 -0
- metadata/examples/workflows/oracle.yaml +1 -0
- metadata/examples/workflows/oracle_lineage.yaml +1 -1
- metadata/examples/workflows/oracle_usage.yaml +1 -0
- metadata/examples/workflows/pinotdb.yaml +1 -0
- metadata/examples/workflows/postgres.yaml +1 -0
- metadata/examples/workflows/postgres_lineage.yaml +1 -1
- metadata/examples/workflows/postgres_usage.yaml +1 -1
- metadata/examples/workflows/powerbi.yaml +52 -0
- metadata/examples/workflows/presto.yaml +1 -0
- metadata/examples/workflows/qlik_sense.yaml +6 -4
- metadata/examples/workflows/qlikcloud.yaml +31 -0
- metadata/examples/workflows/query_log_usage.yaml +1 -0
- metadata/examples/workflows/quicksight.yaml +1 -0
- metadata/examples/workflows/redash.yaml +1 -0
- metadata/examples/workflows/redpanda.yaml +1 -0
- metadata/examples/workflows/redshift.yaml +1 -0
- metadata/examples/workflows/redshift_lineage.yaml +1 -0
- metadata/examples/workflows/redshift_profiler.yaml +1 -0
- metadata/examples/workflows/redshift_usage.yaml +1 -0
- metadata/examples/workflows/sagemaker.yaml +1 -1
- metadata/examples/workflows/salesforce.yaml +1 -0
- metadata/examples/workflows/sas.yaml +1 -1
- metadata/examples/workflows/singlestore.yaml +1 -0
- metadata/examples/workflows/snowflake.yaml +1 -0
- metadata/examples/workflows/snowflake_lineage.yaml +1 -0
- metadata/examples/workflows/snowflake_usage.yaml +1 -0
- metadata/examples/workflows/spline.yaml +5 -4
- metadata/examples/workflows/sqlite.yaml +1 -0
- metadata/examples/workflows/superset.yaml +1 -0
- metadata/examples/workflows/tableau.yaml +1 -0
- metadata/examples/workflows/test_suite.yaml +13 -16
- metadata/examples/workflows/trino.yaml +1 -0
- metadata/examples/workflows/trino_lineage.yaml +1 -0
- metadata/examples/workflows/trino_usage.yaml +1 -0
- metadata/examples/workflows/unity_catalog.yaml +1 -1
- metadata/examples/workflows/unity_catalog_lineage.yaml +1 -1
- metadata/examples/workflows/unity_catalog_usage.yaml +1 -1
- metadata/examples/workflows/vertica.yaml +1 -0
- metadata/generated/antlr/EntityLinkLexer.py +354 -349
- 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 +2 -3
- metadata/generated/schema/api/classification/createTag.py +2 -3
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- 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 +4 -1
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- 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 +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +1 -1
- metadata/generated/schema/api/data/createQuery.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
- metadata/generated/schema/api/data/createTable.py +4 -3
- 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 +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- 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 +1 -1
- 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 +1 -1
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +2 -2
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +2 -2
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +4 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +4 -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 +1 -1
- 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/profilerConfiguration.py +66 -0
- 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/configuration/themeConfiguration.py +32 -0
- metadata/generated/schema/configuration/uiThemePreference.py +23 -0
- 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 +3 -3
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +1 -1
- 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 +3 -3
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +5 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +36 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +31 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +31 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +36 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +31 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +28 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +22 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +30 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +22 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +22 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +31 -0
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +22 -0
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +75 -0
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +2 -3
- metadata/generated/schema/entity/classification/tag.py +3 -9
- 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 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +2 -2
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +4 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +2 -2
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/data/table.py +26 -24
- 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 +1 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +18 -0
- metadata/generated/schema/entity/feed/customProperty.py +17 -0
- metadata/generated/schema/entity/feed/description.py +24 -0
- metadata/generated/schema/entity/feed/domain.py +23 -0
- metadata/generated/schema/entity/feed/entityInfo.py +19 -0
- metadata/generated/schema/entity/feed/owner.py +23 -0
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +23 -0
- metadata/generated/schema/entity/feed/testCaseResult.py +23 -0
- metadata/generated/schema/entity/feed/thread.py +81 -2
- 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 +3 -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 +3 -3
- 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 +5 -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 +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +33 -2
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +37 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +25 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +37 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +37 -0
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +38 -0
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +6 -15
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.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 +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +4 -1
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +4 -13
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -15
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +7 -13
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +5 -15
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +11 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +5 -15
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +12 -3
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- 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 +7 -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 +7 -3
- 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 +1 -1
- 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 +1 -1
- 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/kafkaConnectConnection.py +61 -0
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +73 -0
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- 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/adlsConnection.py +1 -1
- 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 +5 -2
- 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 +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
- 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 +7 -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 +1 -1
- 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 +1 -1
- 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 +2 -2
- metadata/generated/schema/entity/type.py +1 -1
- 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 +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +10 -1
- metadata/generated/schema/events/eventSubscription.py +6 -2
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +19 -6
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +37 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +23 -23
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +22 -4
- 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 +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
- 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 +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oidcClientConfig.py +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/gcpExternalAccount.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 +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +16 -4
- metadata/generated/schema/security/ssl/verifySSLConfig.py +10 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +5 -2
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +31 -15
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +13 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +22 -2
- 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 +7 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/customProperties/__init__.py +1 -1
- metadata/generated/schema/type/customProperties/complexTypes.py +86 -0
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +3 -3
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.py +39 -0
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +3 -1
- metadata/generated/schema/type/entityReference.py +1 -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 +1 -1
- 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 +4 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- 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 +1 -1
- 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 +0 -1
- metadata/ingestion/api/delete.py +33 -1
- metadata/ingestion/api/step.py +6 -1
- metadata/ingestion/api/topology_runner.py +122 -25
- metadata/ingestion/bulksink/metadata_usage.py +6 -1
- metadata/ingestion/lineage/models.py +34 -1
- metadata/ingestion/lineage/parser.py +15 -8
- metadata/ingestion/lineage/sql_lineage.py +21 -3
- metadata/ingestion/models/custom_properties.py +3 -0
- metadata/ingestion/models/life_cycle.py +4 -1
- metadata/ingestion/models/patch_request.py +177 -35
- metadata/ingestion/models/topology.py +81 -1
- metadata/ingestion/ometa/client.py +3 -0
- metadata/ingestion/ometa/mixins/es_mixin.py +95 -42
- metadata/ingestion/ometa/mixins/lineage_mixin.py +169 -4
- metadata/ingestion/ometa/mixins/patch_mixin.py +9 -4
- metadata/ingestion/ometa/mixins/server_mixin.py +50 -5
- metadata/ingestion/ometa/mixins/tests_mixin.py +55 -1
- metadata/ingestion/ometa/mixins/user_mixin.py +18 -6
- metadata/ingestion/ometa/ometa_api.py +6 -1
- metadata/ingestion/ometa/routes.py +3 -0
- metadata/ingestion/ometa/utils.py +2 -0
- metadata/ingestion/processor/query_parser.py +36 -26
- metadata/ingestion/sink/file.py +4 -1
- metadata/ingestion/sink/metadata_rest.py +19 -5
- metadata/ingestion/source/dashboard/dashboard_service.py +75 -16
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +7 -5
- metadata/ingestion/source/dashboard/lightdash/metadata.py +7 -5
- metadata/ingestion/source/dashboard/looker/metadata.py +25 -18
- metadata/ingestion/source/dashboard/metabase/client.py +39 -8
- metadata/ingestion/source/dashboard/metabase/connection.py +2 -1
- metadata/ingestion/source/dashboard/metabase/metadata.py +9 -7
- metadata/ingestion/source/dashboard/metabase/models.py +1 -1
- metadata/ingestion/source/dashboard/mode/metadata.py +7 -5
- metadata/ingestion/source/dashboard/mstr/metadata.py +10 -5
- metadata/ingestion/source/dashboard/powerbi/client.py +13 -3
- metadata/ingestion/source/dashboard/powerbi/connection.py +13 -5
- metadata/ingestion/source/dashboard/powerbi/file_client.py +327 -0
- metadata/ingestion/source/dashboard/powerbi/metadata.py +156 -53
- metadata/ingestion/source/dashboard/powerbi/models.py +26 -0
- metadata/ingestion/source/dashboard/qlikcloud/__init__.py +0 -0
- metadata/ingestion/source/dashboard/qlikcloud/client.py +167 -0
- metadata/ingestion/source/dashboard/qlikcloud/connection.py +56 -0
- metadata/ingestion/source/dashboard/qlikcloud/constants.py +66 -0
- metadata/ingestion/source/dashboard/qlikcloud/metadata.py +249 -0
- metadata/ingestion/source/dashboard/qlikcloud/models.py +33 -0
- metadata/ingestion/source/dashboard/qliksense/client.py +9 -26
- metadata/ingestion/source/dashboard/qliksense/metadata.py +30 -17
- metadata/ingestion/source/dashboard/qliksense/models.py +1 -0
- metadata/ingestion/source/dashboard/quicksight/metadata.py +7 -5
- metadata/ingestion/source/dashboard/redash/metadata.py +10 -5
- metadata/ingestion/source/dashboard/superset/api_source.py +10 -5
- metadata/ingestion/source/dashboard/superset/db_source.py +12 -6
- metadata/ingestion/source/dashboard/superset/metadata.py +8 -1
- metadata/ingestion/source/dashboard/superset/mixin.py +20 -3
- metadata/ingestion/source/dashboard/superset/models.py +2 -0
- metadata/ingestion/source/dashboard/superset/queries.py +23 -6
- metadata/ingestion/source/dashboard/tableau/metadata.py +71 -10
- metadata/ingestion/source/database/athena/client.py +1 -1
- metadata/ingestion/source/database/athena/lineage.py +2 -0
- metadata/ingestion/source/database/athena/metadata.py +83 -15
- metadata/ingestion/source/database/athena/models.py +1 -1
- metadata/ingestion/source/database/athena/query_parser.py +6 -1
- metadata/ingestion/source/database/athena/usage.py +2 -0
- metadata/ingestion/source/database/azuresql/metadata.py +4 -2
- metadata/ingestion/source/database/azuresql/query_parser.py +4 -1
- metadata/ingestion/source/database/bigquery/helper.py +23 -12
- metadata/ingestion/source/database/bigquery/incremental_table_processor.py +86 -0
- metadata/ingestion/source/database/bigquery/metadata.py +224 -52
- metadata/ingestion/source/database/bigquery/models.py +35 -1
- metadata/ingestion/source/database/bigquery/queries.py +25 -12
- metadata/ingestion/source/database/bigquery/query_parser.py +3 -1
- metadata/ingestion/source/database/bigtable/metadata.py +6 -4
- metadata/ingestion/source/database/clickhouse/metadata.py +27 -17
- metadata/ingestion/source/database/clickhouse/query_parser.py +4 -2
- metadata/ingestion/source/database/common_db_source.py +117 -65
- metadata/ingestion/source/database/common_nosql_source.py +15 -15
- metadata/ingestion/source/database/couchbase/metadata.py +8 -6
- metadata/ingestion/source/database/database_service.py +43 -27
- metadata/ingestion/source/database/databricks/metadata.py +80 -34
- metadata/ingestion/source/database/databricks/queries.py +0 -1
- metadata/ingestion/source/database/databricks/query_parser.py +9 -2
- metadata/ingestion/source/database/datalake/connection.py +1 -2
- metadata/ingestion/source/database/datalake/metadata.py +21 -19
- metadata/ingestion/source/database/db2/metadata.py +4 -1
- metadata/ingestion/source/database/dbt/dbt_service.py +13 -11
- metadata/ingestion/source/database/dbt/metadata.py +97 -33
- metadata/ingestion/source/database/dbt/models.py +10 -1
- metadata/ingestion/source/database/deltalake/connection.py +2 -2
- metadata/ingestion/source/database/deltalake/metadata.py +19 -17
- metadata/ingestion/source/database/domodatabase/metadata.py +16 -11
- metadata/ingestion/source/database/doris/connection.py +0 -10
- metadata/ingestion/source/database/doris/metadata.py +23 -4
- metadata/ingestion/source/database/druid/metadata.py +5 -1
- metadata/ingestion/source/database/dynamodb/metadata.py +3 -1
- metadata/ingestion/source/database/extended_sample_data.py +4 -2
- metadata/ingestion/source/database/external_table_lineage_mixin.py +82 -0
- metadata/ingestion/source/database/glue/metadata.py +23 -21
- metadata/ingestion/source/database/greenplum/connection.py +0 -10
- metadata/ingestion/source/database/greenplum/metadata.py +26 -11
- metadata/ingestion/source/database/hive/metadata.py +29 -4
- metadata/ingestion/source/database/iceberg/helper.py +42 -5
- metadata/ingestion/source/database/iceberg/metadata.py +18 -16
- metadata/ingestion/source/database/iceberg/models.py +12 -4
- metadata/ingestion/source/database/impala/metadata.py +4 -1
- metadata/ingestion/source/database/incremental_metadata_extraction.py +144 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +39 -36
- metadata/ingestion/source/database/mariadb/metadata.py +5 -1
- metadata/ingestion/source/database/mongodb/metadata.py +4 -2
- metadata/ingestion/source/database/mssql/metadata.py +15 -7
- metadata/ingestion/source/database/mssql/queries.py +18 -16
- metadata/ingestion/source/database/mssql/query_parser.py +4 -1
- metadata/ingestion/source/database/mssql/utils.py +3 -0
- metadata/ingestion/source/database/mysql/connection.py +0 -11
- metadata/ingestion/source/database/mysql/metadata.py +9 -2
- metadata/ingestion/source/database/oracle/connection.py +2 -2
- metadata/ingestion/source/database/oracle/metadata.py +33 -17
- metadata/ingestion/source/database/oracle/queries.py +13 -13
- metadata/ingestion/source/database/oracle/query_parser.py +4 -1
- metadata/ingestion/source/database/pinotdb/metadata.py +4 -1
- metadata/ingestion/source/database/postgres/connection.py +0 -10
- metadata/ingestion/source/database/postgres/metadata.py +38 -15
- metadata/ingestion/source/database/postgres/queries.py +17 -1
- metadata/ingestion/source/database/postgres/query_parser.py +4 -2
- metadata/ingestion/source/database/postgres/utils.py +98 -0
- metadata/ingestion/source/database/presto/connection.py +14 -0
- metadata/ingestion/source/database/presto/metadata.py +8 -5
- metadata/ingestion/source/database/query/lineage.py +5 -1
- metadata/ingestion/source/database/query/usage.py +4 -1
- metadata/ingestion/source/database/redshift/connection.py +0 -10
- metadata/ingestion/source/database/redshift/incremental_table_processor.py +192 -0
- metadata/ingestion/source/database/redshift/metadata.py +175 -26
- metadata/ingestion/source/database/redshift/models.py +74 -1
- metadata/ingestion/source/database/redshift/queries.py +17 -2
- metadata/ingestion/source/database/redshift/query_parser.py +3 -1
- metadata/ingestion/source/database/redshift/utils.py +13 -7
- metadata/ingestion/source/database/salesforce/metadata.py +13 -11
- metadata/ingestion/source/database/sample_data.py +56 -13
- metadata/ingestion/source/database/sample_usage.py +3 -1
- metadata/ingestion/source/database/saphana/metadata.py +6 -5
- metadata/ingestion/source/database/sas/metadata.py +8 -3
- metadata/ingestion/source/database/singlestore/metadata.py +5 -1
- metadata/ingestion/source/database/snowflake/metadata.py +193 -59
- metadata/ingestion/source/database/snowflake/models.py +24 -1
- metadata/ingestion/source/database/snowflake/queries.py +147 -25
- metadata/ingestion/source/database/snowflake/query_parser.py +3 -1
- metadata/ingestion/source/database/snowflake/utils.py +187 -11
- metadata/ingestion/source/database/sql_column_handler.py +2 -0
- metadata/ingestion/source/database/sqlalchemy_source.py +4 -4
- metadata/ingestion/source/database/sqlite/metadata.py +5 -1
- metadata/ingestion/source/database/stored_procedures_mixin.py +11 -9
- metadata/ingestion/source/database/trino/connection.py +20 -0
- metadata/ingestion/source/database/trino/metadata.py +7 -4
- metadata/ingestion/source/database/trino/query_parser.py +4 -1
- metadata/ingestion/source/database/unitycatalog/lineage.py +3 -1
- metadata/ingestion/source/database/unitycatalog/metadata.py +43 -32
- metadata/ingestion/source/database/unitycatalog/query_parser.py +4 -1
- metadata/ingestion/source/database/vertica/metadata.py +4 -2
- metadata/ingestion/source/database/vertica/query_parser.py +4 -2
- metadata/ingestion/source/messaging/common_broker_source.py +45 -6
- metadata/ingestion/source/messaging/kafka/metadata.py +21 -1
- metadata/ingestion/source/messaging/kinesis/metadata.py +11 -5
- metadata/ingestion/source/messaging/messaging_service.py +3 -3
- metadata/ingestion/source/messaging/redpanda/metadata.py +5 -1
- metadata/ingestion/source/metadata/amundsen/metadata.py +3 -1
- metadata/ingestion/source/metadata/atlas/metadata.py +3 -1
- metadata/ingestion/source/mlmodel/mlflow/metadata.py +4 -2
- metadata/ingestion/source/mlmodel/mlmodel_service.py +3 -3
- metadata/ingestion/source/mlmodel/sagemaker/metadata.py +8 -3
- metadata/ingestion/source/pipeline/airbyte/metadata.py +9 -7
- metadata/ingestion/source/pipeline/airflow/metadata.py +30 -14
- metadata/ingestion/source/pipeline/dagster/metadata.py +17 -15
- metadata/ingestion/source/pipeline/dagster/queries.py +53 -82
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +10 -8
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +6 -4
- metadata/ingestion/source/pipeline/fivetran/metadata.py +6 -4
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +7 -5
- metadata/ingestion/source/pipeline/kafkaconnect/__init__.py +0 -0
- metadata/ingestion/source/pipeline/kafkaconnect/client.py +278 -0
- metadata/ingestion/source/pipeline/kafkaconnect/connection.py +58 -0
- metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +319 -0
- metadata/ingestion/source/pipeline/kafkaconnect/models.py +62 -0
- metadata/ingestion/source/pipeline/nifi/metadata.py +4 -2
- metadata/ingestion/source/pipeline/openlineage/__init__.py +0 -0
- metadata/ingestion/source/pipeline/openlineage/connection.py +88 -0
- metadata/ingestion/source/pipeline/openlineage/metadata.py +520 -0
- metadata/ingestion/source/pipeline/openlineage/models.py +88 -0
- metadata/ingestion/source/pipeline/openlineage/utils.py +59 -0
- metadata/ingestion/source/pipeline/pipeline_service.py +13 -3
- metadata/ingestion/source/pipeline/spline/metadata.py +8 -6
- metadata/ingestion/source/search/elasticsearch/metadata.py +8 -6
- metadata/ingestion/source/search/search_service.py +3 -3
- metadata/ingestion/source/sqa_types.py +20 -1
- metadata/ingestion/source/storage/s3/connection.py +10 -1
- metadata/ingestion/source/storage/s3/metadata.py +45 -30
- metadata/ingestion/source/storage/s3/models.py +8 -4
- metadata/ingestion/source/storage/storage_service.py +4 -4
- metadata/ingestion/stage/table_usage.py +6 -1
- metadata/mixins/pandas/pandas_mixin.py +3 -3
- metadata/pii/processor.py +6 -1
- metadata/profiler/__init__.py +0 -0
- metadata/profiler/adaptors/__init__.py +0 -0
- metadata/profiler/adaptors/adaptor_factory.py +43 -0
- metadata/profiler/adaptors/dynamodb.py +40 -0
- metadata/profiler/adaptors/factory.py +76 -0
- metadata/profiler/adaptors/mongodb.py +178 -0
- metadata/profiler/adaptors/nosql_adaptor.py +65 -0
- metadata/profiler/api/models.py +1 -1
- metadata/profiler/factory.py +41 -0
- metadata/profiler/interface/nosql/profiler_interface.py +236 -0
- metadata/profiler/interface/pandas/profiler_interface.py +51 -30
- metadata/profiler/interface/profiler_interface.py +6 -2
- metadata/profiler/interface/profiler_interface_factory.py +11 -22
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +77 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +2 -1
- metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +3 -6
- metadata/profiler/metrics/composed/distinct_ratio.py +2 -1
- metadata/profiler/metrics/composed/duplicate_count.py +2 -1
- metadata/profiler/metrics/composed/ilike_ratio.py +2 -1
- metadata/profiler/metrics/composed/iqr.py +2 -1
- metadata/profiler/metrics/composed/like_ratio.py +2 -1
- metadata/profiler/metrics/composed/non_parametric_skew.py +2 -1
- metadata/profiler/metrics/composed/null_ratio.py +7 -4
- metadata/profiler/metrics/composed/unique_ratio.py +2 -1
- metadata/profiler/metrics/core.py +14 -1
- metadata/profiler/metrics/hybrid/histogram.py +2 -1
- metadata/profiler/metrics/registry.py +4 -0
- metadata/profiler/metrics/static/column_count.py +2 -1
- metadata/profiler/metrics/static/column_names.py +2 -1
- metadata/profiler/metrics/static/count.py +2 -1
- metadata/profiler/metrics/static/count_in_set.py +2 -1
- metadata/profiler/metrics/static/distinct_count.py +11 -2
- metadata/profiler/metrics/static/ilike_count.py +2 -1
- metadata/profiler/metrics/static/like_count.py +2 -1
- metadata/profiler/metrics/static/max.py +26 -7
- metadata/profiler/metrics/static/max_length.py +3 -2
- metadata/profiler/metrics/static/mean.py +30 -22
- metadata/profiler/metrics/static/min.py +25 -6
- metadata/profiler/metrics/static/min_length.py +3 -2
- metadata/profiler/metrics/static/not_like_count.py +2 -1
- metadata/profiler/metrics/static/not_regexp_match_count.py +2 -1
- metadata/profiler/metrics/static/null_count.py +2 -1
- metadata/profiler/metrics/static/null_missing_count.py +73 -0
- metadata/profiler/metrics/static/regexp_match_count.py +2 -1
- metadata/profiler/metrics/static/row_count.py +9 -3
- metadata/profiler/metrics/static/stddev.py +2 -1
- metadata/profiler/metrics/static/sum.py +22 -4
- metadata/profiler/metrics/static/unique_count.py +13 -4
- metadata/profiler/metrics/system/system.py +2 -1
- metadata/profiler/metrics/window/first_quartile.py +2 -1
- metadata/profiler/metrics/window/median.py +8 -2
- metadata/profiler/metrics/window/third_quartile.py +2 -1
- metadata/profiler/orm/converter/base.py +4 -1
- metadata/profiler/orm/converter/bigquery/converter.py +11 -0
- metadata/profiler/orm/converter/common.py +47 -0
- metadata/profiler/orm/converter/converter_registry.py +2 -0
- metadata/profiler/orm/converter/redshift/converter.py +48 -0
- metadata/profiler/orm/converter/snowflake/converter.py +13 -0
- metadata/profiler/orm/functions/conn_test.py +1 -1
- metadata/profiler/orm/functions/sum.py +4 -2
- metadata/profiler/orm/functions/table_metric_computer.py +1 -1
- metadata/profiler/orm/registry.py +6 -3
- metadata/profiler/processor/core.py +58 -97
- metadata/profiler/processor/default.py +5 -0
- metadata/profiler/processor/handle_partition.py +3 -3
- metadata/profiler/processor/metric_filter.py +267 -0
- metadata/profiler/processor/processor.py +4 -2
- metadata/profiler/processor/sampler/nosql/sampler.py +72 -0
- metadata/profiler/processor/sampler/pandas/sampler.py +5 -6
- metadata/profiler/processor/sampler/sampler_factory.py +9 -0
- metadata/profiler/processor/sampler/sampler_interface.py +2 -2
- metadata/profiler/processor/sampler/sqlalchemy/sampler.py +3 -3
- metadata/profiler/source/base/profiler_source.py +11 -3
- metadata/profiler/source/databricks/profiler_source.py +5 -1
- metadata/profiler/source/metadata.py +8 -1
- metadata/profiler/source/metadata_ext.py +2 -0
- metadata/readers/dataframe/avro.py +5 -5
- metadata/readers/dataframe/json.py +1 -1
- metadata/readers/file/adls.py +20 -0
- metadata/readers/file/base.py +6 -0
- metadata/readers/file/config_source_factory.py +12 -0
- metadata/readers/file/gcs.py +18 -0
- metadata/readers/file/local.py +12 -0
- metadata/readers/file/s3.py +16 -0
- metadata/utils/constants.py +32 -24
- metadata/utils/datalake/datalake_utils.py +40 -4
- metadata/utils/elasticsearch.py +8 -0
- metadata/utils/execution_time_tracker.py +69 -28
- metadata/utils/fqn.py +61 -7
- metadata/utils/helpers.py +2 -0
- metadata/utils/importer.py +15 -6
- metadata/utils/logger.py +1 -1
- metadata/utils/lru_cache.py +2 -0
- metadata/utils/messaging_utils.py +43 -0
- metadata/utils/partition.py +93 -28
- metadata/utils/sqlalchemy_utils.py +60 -1
- metadata/utils/ssl_manager.py +181 -0
- metadata/utils/tag_utils.py +30 -13
- metadata/utils/test_utils.py +65 -0
- metadata/workflow/application.py +6 -1
- metadata/workflow/base.py +1 -1
- metadata/workflow/ingestion.py +19 -0
- metadata/workflow/metadata.py +9 -1
- metadata/workflow/output_handler.py +24 -2
- metadata/workflow/workflow_output_handler.py +2 -0
- {openmetadata_ingestion-1.3.4.0.dist-info → openmetadata_ingestion-1.4.0.0rc2.dist-info}/METADATA +325 -326
- openmetadata_ingestion-1.4.0.0rc2.dist-info/RECORD +1501 -0
- metadata/applications/auto_tagger.py +0 -212
- metadata/cli/backup.py +0 -202
- metadata/cli/db_dump.py +0 -239
- metadata/cli/docker.py +0 -382
- metadata/cli/openmetadata_dag_config_migration.py +0 -109
- metadata/cli/openmetadata_imports_migration.py +0 -71
- metadata/cli/utils.py +0 -56
- metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +0 -28
- openmetadata_ingestion-1.3.4.0.dist-info/RECORD +0 -1435
- {openmetadata_ingestion-1.3.4.0.dist-info → openmetadata_ingestion-1.4.0.0rc2.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.3.4.0.dist-info → openmetadata_ingestion-1.4.0.0rc2.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.3.4.0.dist-info → openmetadata_ingestion-1.4.0.0rc2.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.3.4.0.dist-info → openmetadata_ingestion-1.4.0.0rc2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
factory for NoSQL adaptors that are used in the NoSQLProfiler.
|
|
13
|
+
"""
|
|
14
|
+
from metadata.generated.schema.entity.services.connections.database.dynamoDBConnection import (
|
|
15
|
+
DynamoDBConnection,
|
|
16
|
+
)
|
|
17
|
+
from metadata.generated.schema.entity.services.connections.database.mongoDBConnection import (
|
|
18
|
+
MongoDBConnection,
|
|
19
|
+
)
|
|
20
|
+
from metadata.profiler.adaptors.dynamodb import DynamoDB
|
|
21
|
+
from metadata.profiler.adaptors.mongodb import MongoDB
|
|
22
|
+
from metadata.profiler.factory import Factory
|
|
23
|
+
from metadata.utils.logger import profiler_logger
|
|
24
|
+
|
|
25
|
+
logger = profiler_logger()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class NoSQLAdaptorFactory(Factory):
|
|
29
|
+
def create(self, interface_type: str, *args, **kwargs) -> any:
|
|
30
|
+
logger.debug(f"Creating NoSQL client for {interface_type}")
|
|
31
|
+
client_class = self._interface_type.get(interface_type)
|
|
32
|
+
if not client_class:
|
|
33
|
+
raise ValueError(f"Unknown NoSQL source: {interface_type}")
|
|
34
|
+
logger.debug(f"Using NoSQL client constructor: {client_class.__name__}")
|
|
35
|
+
return client_class(*args, **kwargs)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
adaptors = profilers = {
|
|
39
|
+
MongoDBConnection.__name__: MongoDB,
|
|
40
|
+
DynamoDBConnection.__name__: DynamoDB,
|
|
41
|
+
}
|
|
42
|
+
factory = NoSQLAdaptorFactory()
|
|
43
|
+
factory.register_many(adaptors)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
DyanmoDB adaptor for the NoSQL profiler.
|
|
13
|
+
"""
|
|
14
|
+
from typing import TYPE_CHECKING, Dict, List
|
|
15
|
+
|
|
16
|
+
from metadata.generated.schema.entity.data.table import Column, Table
|
|
17
|
+
from metadata.profiler.adaptors.nosql_adaptor import NoSQLAdaptor
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from mypy_boto3_dynamodb.service_resource import DynamoDBServiceResource
|
|
21
|
+
else:
|
|
22
|
+
DynamoDBServiceResource = None # pylint: disable=invalid-name
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class DynamoDB(NoSQLAdaptor):
|
|
26
|
+
"""A MongoDB client that serves as an adaptor for profiling data assets on MongoDB"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, client: DynamoDBServiceResource):
|
|
29
|
+
self.client = client
|
|
30
|
+
|
|
31
|
+
def item_count(self, table: Table) -> int:
|
|
32
|
+
table = self.client.Table(table.name.__root__)
|
|
33
|
+
return table.item_count
|
|
34
|
+
|
|
35
|
+
def scan(
|
|
36
|
+
self, table: Table, columns: List[Column], limit: int
|
|
37
|
+
) -> List[Dict[str, any]]:
|
|
38
|
+
table = self.client.Table(table.name.__root__)
|
|
39
|
+
response = table.scan(Limit=limit)
|
|
40
|
+
return response["Items"]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
factory for NoSQL adaptors that are used in the NoSQLProfiler.
|
|
13
|
+
"""
|
|
14
|
+
from typing import Callable
|
|
15
|
+
|
|
16
|
+
from metadata.generated.schema.entity.services.connections.database.dynamoDBConnection import (
|
|
17
|
+
DynamoDBConnection,
|
|
18
|
+
)
|
|
19
|
+
from metadata.generated.schema.entity.services.connections.database.mongoDBConnection import (
|
|
20
|
+
MongoDBConnection,
|
|
21
|
+
)
|
|
22
|
+
from metadata.profiler.adaptors.dynamodb import DynamoDB
|
|
23
|
+
from metadata.profiler.adaptors.mongodb import MongoDB
|
|
24
|
+
from metadata.profiler.adaptors.nosql_adaptor import NoSQLAdaptor
|
|
25
|
+
from metadata.profiler.factory import Factory
|
|
26
|
+
|
|
27
|
+
NoSQLAdaptorConstructor = Callable[[any], NoSQLAdaptor]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class NoSQLAdaptorFactory(Factory):
|
|
31
|
+
"""
|
|
32
|
+
A factory class for creating NoSQL client instances.
|
|
33
|
+
|
|
34
|
+
This class maintains a registry of callable constructors for different NoSQL client types.
|
|
35
|
+
The client types are registered with their corresponding constructors,
|
|
36
|
+
and can be created using the `construct` method.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def register(self, interface_type: str, interface_class: NoSQLAdaptorConstructor):
|
|
40
|
+
"""
|
|
41
|
+
Register a client type with its constructor.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
source_class_name (str): The class of the source client.
|
|
45
|
+
target_class (NoSQLClientConstructor): The constructor for the target client.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
None
|
|
49
|
+
"""
|
|
50
|
+
self._interface_type[interface_type] = interface_class
|
|
51
|
+
|
|
52
|
+
def create(self, interface_type: any, *args, **kwargs) -> NoSQLAdaptor:
|
|
53
|
+
"""
|
|
54
|
+
Create a client instance of the type of the given source client.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
interface_type (str): The type of the source connection.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
NoSQLAdaptor: The created client instance.
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If the type of the source client is not registered.
|
|
64
|
+
"""
|
|
65
|
+
client_class = self._interface_type.get(interface_type)
|
|
66
|
+
if not client_class:
|
|
67
|
+
raise ValueError(f"Unknown NoSQL source: {interface_type}")
|
|
68
|
+
return client_class(*args, **kwargs)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
factory = NoSQLAdaptorFactory()
|
|
72
|
+
adaptors = {
|
|
73
|
+
MongoDBConnection.__name__: MongoDB,
|
|
74
|
+
DynamoDBConnection.__name__: DynamoDB,
|
|
75
|
+
}
|
|
76
|
+
factory.register_many(adaptors)
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
MongoDB adaptor for the NoSQL profiler.
|
|
13
|
+
"""
|
|
14
|
+
import json
|
|
15
|
+
from enum import Enum
|
|
16
|
+
from typing import TYPE_CHECKING, Dict, List, Optional, Union
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, Field
|
|
19
|
+
|
|
20
|
+
from metadata.generated.schema.entity.data.table import Column, Table
|
|
21
|
+
from metadata.profiler.adaptors.nosql_adaptor import NoSQLAdaptor
|
|
22
|
+
from metadata.utils.sqa_like_column import SQALikeColumn
|
|
23
|
+
|
|
24
|
+
# pylint: disable=invalid-name
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from pymongo import MongoClient
|
|
27
|
+
from pymongo.command_cursor import CommandCursor
|
|
28
|
+
from pymongo.cursor import Cursor
|
|
29
|
+
else:
|
|
30
|
+
MongoClient = None
|
|
31
|
+
CommandCursor = None
|
|
32
|
+
Cursor = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class AggregationFunction(Enum):
|
|
36
|
+
SUM = "$sum"
|
|
37
|
+
MEAN = "$avg"
|
|
38
|
+
COUNT = "$count"
|
|
39
|
+
MAX = "$max"
|
|
40
|
+
MIN = "$min"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class Executable(BaseModel):
|
|
44
|
+
def to_executable(self, client: MongoClient) -> Union[CommandCursor, Cursor]:
|
|
45
|
+
raise NotImplementedError
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class Query(Executable):
|
|
49
|
+
database: str
|
|
50
|
+
collection: str
|
|
51
|
+
filter: dict = Field(default_factory=dict)
|
|
52
|
+
limit: Optional[int] = None
|
|
53
|
+
|
|
54
|
+
def to_executable(self, client: MongoClient) -> Cursor:
|
|
55
|
+
db = client[self.database]
|
|
56
|
+
collection = db[self.collection]
|
|
57
|
+
query = collection.find(self.filter)
|
|
58
|
+
if self.limit:
|
|
59
|
+
query = query.limit(self.limit)
|
|
60
|
+
return query
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Aggregation(Executable):
|
|
64
|
+
database: str
|
|
65
|
+
collection: str
|
|
66
|
+
column: str
|
|
67
|
+
aggregations: List[AggregationFunction]
|
|
68
|
+
|
|
69
|
+
def to_executable(self, client: MongoClient) -> CommandCursor:
|
|
70
|
+
db = client[self.database]
|
|
71
|
+
collection = db[self.collection]
|
|
72
|
+
return collection.aggregate(
|
|
73
|
+
[
|
|
74
|
+
{
|
|
75
|
+
"$group": {
|
|
76
|
+
"_id": None,
|
|
77
|
+
**{
|
|
78
|
+
a.name.lower(): {a.value: f"${self.column}"}
|
|
79
|
+
for a in self.aggregations
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class MongoDB(NoSQLAdaptor):
|
|
88
|
+
"""A MongoDB client that serves as an adaptor for profiling data assets on MongoDB"""
|
|
89
|
+
|
|
90
|
+
def __init__(self, client: MongoClient):
|
|
91
|
+
self.client = client
|
|
92
|
+
|
|
93
|
+
def item_count(self, table: Table) -> int:
|
|
94
|
+
db = self.client[table.databaseSchema.name]
|
|
95
|
+
collection = db[table.name.__root__]
|
|
96
|
+
return collection.count_documents({})
|
|
97
|
+
|
|
98
|
+
def scan(
|
|
99
|
+
self, table: Table, columns: List[Column], limit: int
|
|
100
|
+
) -> List[Dict[str, any]]:
|
|
101
|
+
return self.execute(
|
|
102
|
+
Query(
|
|
103
|
+
database=table.databaseSchema.name,
|
|
104
|
+
collection=table.name.__root__,
|
|
105
|
+
limit=limit,
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def query(
|
|
110
|
+
self, table: Table, columns: List[Column], query: any, limit: int
|
|
111
|
+
) -> List[Dict[str, any]]:
|
|
112
|
+
try:
|
|
113
|
+
json_query = json.loads(query)
|
|
114
|
+
except json.JSONDecodeError:
|
|
115
|
+
raise ValueError("Invalid JSON query")
|
|
116
|
+
return self.execute(
|
|
117
|
+
Query(
|
|
118
|
+
database=table.databaseSchema.name,
|
|
119
|
+
collection=table.name.__root__,
|
|
120
|
+
filter=json_query,
|
|
121
|
+
)
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
def get_aggregates(
|
|
125
|
+
self,
|
|
126
|
+
table: Table,
|
|
127
|
+
column: SQALikeColumn,
|
|
128
|
+
aggregate_functions: List[AggregationFunction],
|
|
129
|
+
) -> Dict[str, Union[int, float]]:
|
|
130
|
+
"""
|
|
131
|
+
Get the aggregate functions for a column in a table
|
|
132
|
+
Returns:
|
|
133
|
+
Dict[str, Union[int, float]]: A dictionary of the aggregate functions
|
|
134
|
+
Example:
|
|
135
|
+
{
|
|
136
|
+
"sum": 100,
|
|
137
|
+
"avg": 50,
|
|
138
|
+
"count": 2,
|
|
139
|
+
"max": 75,
|
|
140
|
+
"min": 25
|
|
141
|
+
}
|
|
142
|
+
"""
|
|
143
|
+
row = self.execute(
|
|
144
|
+
Aggregation(
|
|
145
|
+
database=table.databaseSchema.name,
|
|
146
|
+
collection=table.name.__root__,
|
|
147
|
+
column=column.name,
|
|
148
|
+
aggregations=aggregate_functions,
|
|
149
|
+
)
|
|
150
|
+
)[0]
|
|
151
|
+
return {k: v for k, v in row.items() if k != "_id"}
|
|
152
|
+
|
|
153
|
+
def sum(self, table: Table, column: SQALikeColumn) -> AggregationFunction:
|
|
154
|
+
return AggregationFunction.SUM
|
|
155
|
+
|
|
156
|
+
def mean(self, table: Table, column: SQALikeColumn) -> AggregationFunction:
|
|
157
|
+
return AggregationFunction.MEAN
|
|
158
|
+
|
|
159
|
+
def max(self, table: Table, column: SQALikeColumn) -> AggregationFunction:
|
|
160
|
+
return AggregationFunction.MAX
|
|
161
|
+
|
|
162
|
+
def min(self, table: Table, column: SQALikeColumn) -> AggregationFunction:
|
|
163
|
+
return AggregationFunction.MIN
|
|
164
|
+
|
|
165
|
+
def execute(self, query: Executable) -> List[Dict[str, any]]:
|
|
166
|
+
records = list(query.to_executable(self.client))
|
|
167
|
+
result = []
|
|
168
|
+
for r in records:
|
|
169
|
+
result.append({c: self._json_safe(r.get(c)) for c in r})
|
|
170
|
+
return result
|
|
171
|
+
|
|
172
|
+
@staticmethod
|
|
173
|
+
def _json_safe(data: any):
|
|
174
|
+
try:
|
|
175
|
+
json.dumps(data)
|
|
176
|
+
return data
|
|
177
|
+
except Exception: # noqa
|
|
178
|
+
return str(data)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
NoSQL adaptor for the NoSQL profiler.
|
|
13
|
+
"""
|
|
14
|
+
from abc import ABC, abstractmethod
|
|
15
|
+
from typing import Dict, List, Union
|
|
16
|
+
|
|
17
|
+
from metadata.generated.schema.entity.data.table import Column, Table
|
|
18
|
+
from metadata.utils.sqa_like_column import SQALikeColumn
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class NoSQLAdaptor(ABC):
|
|
22
|
+
"""
|
|
23
|
+
NoSQL adaptor for the NoSQL profiler. This class implememts the required methods for retreiving data from a NoSQL
|
|
24
|
+
database.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def item_count(self, table: Table) -> int:
|
|
29
|
+
raise NotImplementedError
|
|
30
|
+
|
|
31
|
+
@abstractmethod
|
|
32
|
+
def scan(
|
|
33
|
+
self, table: Table, columns: List[Column], limit: int
|
|
34
|
+
) -> List[Dict[str, any]]:
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
def query(
|
|
38
|
+
self, table: Table, columns: List[Column], query: any, limit: int
|
|
39
|
+
) -> List[Dict[str, any]]:
|
|
40
|
+
raise NotImplementedError
|
|
41
|
+
|
|
42
|
+
def get_aggregates(
|
|
43
|
+
self, table: Table, column: SQALikeColumn, aggregate_functions: List[any]
|
|
44
|
+
) -> Dict[str, Union[int, float]]:
|
|
45
|
+
raise NotImplementedError
|
|
46
|
+
|
|
47
|
+
def sum(
|
|
48
|
+
self, table: Table, column: Column # pylint: disable=unused-argument
|
|
49
|
+
) -> any:
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
def mean(
|
|
53
|
+
self, table: Table, column: Column # pylint: disable=unused-argument
|
|
54
|
+
) -> any:
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
def max(
|
|
58
|
+
self, table: Table, column: Column # pylint: disable=unused-argument
|
|
59
|
+
) -> any:
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
def min(
|
|
63
|
+
self, table: Table, column: Column # pylint: disable=unused-argument
|
|
64
|
+
) -> any:
|
|
65
|
+
return None
|
metadata/profiler/api/models.py
CHANGED
|
@@ -122,7 +122,7 @@ class ProfilerResponse(ConfigModel):
|
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
class ThreadPoolMetrics(ConfigModel):
|
|
125
|
-
"""
|
|
125
|
+
"""A container for all metrics to be computed on the same thread."""
|
|
126
126
|
|
|
127
127
|
metrics: Union[List[Union[Type[Metric], CustomMetric]], Type[Metric]]
|
|
128
128
|
metric_type: MetricTypes
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
Factory class for creating profiler interface objects
|
|
14
|
+
"""
|
|
15
|
+
from abc import ABC, abstractmethod
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Factory(ABC):
|
|
19
|
+
"""Creational factory for interface objects"""
|
|
20
|
+
|
|
21
|
+
def __init__(self):
|
|
22
|
+
self._interface_type = {}
|
|
23
|
+
|
|
24
|
+
def register(self, interface_type: str, interface_class):
|
|
25
|
+
"""Register a new interface"""
|
|
26
|
+
self._interface_type[interface_type] = interface_class
|
|
27
|
+
|
|
28
|
+
def register_many(self, interface_dict):
|
|
29
|
+
"""
|
|
30
|
+
Registers multiple profiler interfaces at once.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
interface_dict: A dictionary mapping connection class names (strings) to their
|
|
34
|
+
corresponding profiler interface classes.
|
|
35
|
+
"""
|
|
36
|
+
for interface_type, interface_class in interface_dict.items():
|
|
37
|
+
self.register(interface_type, interface_class)
|
|
38
|
+
|
|
39
|
+
@abstractmethod
|
|
40
|
+
def create(self, interface_type: str, *args, **kwargs) -> any:
|
|
41
|
+
pass
|
|
@@ -0,0 +1,236 @@
|
|
|
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
|
+
# pylint: disable=arguments-differ
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
Interfaces with database for all database engine
|
|
15
|
+
supporting sqlalchemy abstraction layer
|
|
16
|
+
"""
|
|
17
|
+
import traceback
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
from datetime import datetime, timezone
|
|
20
|
+
from typing import Dict, List, Optional, Type
|
|
21
|
+
|
|
22
|
+
from sqlalchemy import Column
|
|
23
|
+
|
|
24
|
+
from metadata.generated.schema.entity.data.table import TableData
|
|
25
|
+
from metadata.generated.schema.tests.customMetric import CustomMetric
|
|
26
|
+
from metadata.profiler.adaptors.factory import factory
|
|
27
|
+
from metadata.profiler.adaptors.nosql_adaptor import NoSQLAdaptor
|
|
28
|
+
from metadata.profiler.api.models import ThreadPoolMetrics
|
|
29
|
+
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
30
|
+
from metadata.profiler.metrics.core import Metric, MetricTypes
|
|
31
|
+
from metadata.profiler.metrics.registry import Metrics
|
|
32
|
+
from metadata.profiler.processor.metric_filter import MetricFilter
|
|
33
|
+
from metadata.profiler.processor.sampler.nosql.sampler import NoSQLSampler
|
|
34
|
+
from metadata.utils.logger import profiler_interface_registry_logger
|
|
35
|
+
from metadata.utils.sqa_like_column import SQALikeColumn
|
|
36
|
+
|
|
37
|
+
logger = profiler_interface_registry_logger()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class NoSQLProfilerInterface(ProfilerInterface):
|
|
41
|
+
"""
|
|
42
|
+
Interface to interact with registry supporting
|
|
43
|
+
sqlalchemy.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
# pylint: disable=too-many-arguments
|
|
47
|
+
|
|
48
|
+
def __init__(self, *args, **kwargs):
|
|
49
|
+
super().__init__(*args, **kwargs)
|
|
50
|
+
self.sampler = self._get_sampler()
|
|
51
|
+
|
|
52
|
+
def _compute_table_metrics(
|
|
53
|
+
self,
|
|
54
|
+
metrics: List[Type[Metric]],
|
|
55
|
+
runner: NoSQLAdaptor,
|
|
56
|
+
*args,
|
|
57
|
+
**kwargs,
|
|
58
|
+
):
|
|
59
|
+
result = {}
|
|
60
|
+
for metric in metrics:
|
|
61
|
+
try:
|
|
62
|
+
fn = metric().nosql_fn(runner)
|
|
63
|
+
result[metric.name()] = fn(self.table)
|
|
64
|
+
except Exception as exc:
|
|
65
|
+
logger.debug(
|
|
66
|
+
f"{traceback.format_exc()}\n"
|
|
67
|
+
f"Error trying to compute metric {metric} for {self.table.fullyQualifiedName}: {exc}"
|
|
68
|
+
)
|
|
69
|
+
raise RuntimeError(
|
|
70
|
+
f"Error trying to compute metric {metric.name()} for {self.table.fullyQualifiedName}: {exc}"
|
|
71
|
+
)
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
def _compute_static_metrics(
|
|
75
|
+
self,
|
|
76
|
+
metrics: List[Metrics],
|
|
77
|
+
runner: NoSQLAdaptor,
|
|
78
|
+
column: SQALikeColumn,
|
|
79
|
+
*args,
|
|
80
|
+
**kwargs,
|
|
81
|
+
) -> Dict[str, any]:
|
|
82
|
+
try:
|
|
83
|
+
aggs = [metric(column).nosql_fn(runner)(self.table) for metric in metrics]
|
|
84
|
+
filtered = [agg for agg in aggs if agg is not None]
|
|
85
|
+
if not filtered:
|
|
86
|
+
return {}
|
|
87
|
+
row = runner.get_aggregates(self.table, column, filtered)
|
|
88
|
+
return dict(row)
|
|
89
|
+
except Exception as exc:
|
|
90
|
+
logger.debug(
|
|
91
|
+
f"{traceback.format_exc()}\n"
|
|
92
|
+
f"Error trying to compute metrics for {self.table.fullyQualifiedName}: {exc}"
|
|
93
|
+
)
|
|
94
|
+
raise RuntimeError(
|
|
95
|
+
f"Error trying to compute metris for {self.table.fullyQualifiedName}: {exc}"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
def _compute_query_metrics(
|
|
99
|
+
self,
|
|
100
|
+
metric: Metrics,
|
|
101
|
+
runner,
|
|
102
|
+
*args,
|
|
103
|
+
**kwargs,
|
|
104
|
+
):
|
|
105
|
+
return None
|
|
106
|
+
|
|
107
|
+
def _compute_window_metrics(
|
|
108
|
+
self,
|
|
109
|
+
metrics: List[Metrics],
|
|
110
|
+
runner,
|
|
111
|
+
*args,
|
|
112
|
+
**kwargs,
|
|
113
|
+
):
|
|
114
|
+
return None
|
|
115
|
+
|
|
116
|
+
def _compute_system_metrics(
|
|
117
|
+
self,
|
|
118
|
+
metrics: Metrics,
|
|
119
|
+
runner: List,
|
|
120
|
+
*args,
|
|
121
|
+
**kwargs,
|
|
122
|
+
):
|
|
123
|
+
return None
|
|
124
|
+
|
|
125
|
+
def _compute_custom_metrics(
|
|
126
|
+
self, metrics: List[CustomMetric], runner, *args, **kwargs
|
|
127
|
+
):
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
def compute_metrics(
|
|
131
|
+
self,
|
|
132
|
+
client: NoSQLAdaptor,
|
|
133
|
+
metric_func: ThreadPoolMetrics,
|
|
134
|
+
):
|
|
135
|
+
"""Run metrics in processor worker"""
|
|
136
|
+
logger.debug(f"Running profiler for {metric_func.table}")
|
|
137
|
+
try:
|
|
138
|
+
row = self._get_metric_fn[metric_func.metric_type.value](
|
|
139
|
+
metric_func.metrics,
|
|
140
|
+
client,
|
|
141
|
+
column=metric_func.column,
|
|
142
|
+
)
|
|
143
|
+
except Exception as exc:
|
|
144
|
+
name = f"{metric_func.column if metric_func.column is not None else metric_func.table}"
|
|
145
|
+
error = f"{name} metric_type.value: {exc}"
|
|
146
|
+
logger.error(error)
|
|
147
|
+
self.status.failed_profiler(error, traceback.format_exc())
|
|
148
|
+
row = None
|
|
149
|
+
if metric_func.column is not None:
|
|
150
|
+
column = metric_func.column.name
|
|
151
|
+
self.status.scanned(f"{metric_func.table.name.__root__}.{column}")
|
|
152
|
+
else:
|
|
153
|
+
self.status.scanned(metric_func.table.name.__root__)
|
|
154
|
+
column = None
|
|
155
|
+
return row, column, metric_func.metric_type.value
|
|
156
|
+
|
|
157
|
+
def fetch_sample_data(self, table, columns: List[SQALikeColumn]) -> TableData:
|
|
158
|
+
return self.sampler.fetch_sample_data(columns)
|
|
159
|
+
|
|
160
|
+
def _get_sampler(self) -> NoSQLSampler:
|
|
161
|
+
"""Get NoSQL sampler from config"""
|
|
162
|
+
from metadata.profiler.processor.sampler.sampler_factory import ( # pylint: disable=import-outside-toplevel
|
|
163
|
+
sampler_factory_,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
return sampler_factory_.create(
|
|
167
|
+
self.service_connection_config.__class__.__name__,
|
|
168
|
+
table=self.table,
|
|
169
|
+
client=factory.create(
|
|
170
|
+
self.service_connection_config.__class__.__name__,
|
|
171
|
+
client=self.connection,
|
|
172
|
+
),
|
|
173
|
+
profile_sample_config=self.profile_sample_config,
|
|
174
|
+
partition_details=self.partition_details,
|
|
175
|
+
profile_sample_query=self.profile_query,
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
def get_composed_metrics(
|
|
179
|
+
self, column: Column, metric: Metrics, column_results: Dict
|
|
180
|
+
):
|
|
181
|
+
return None
|
|
182
|
+
|
|
183
|
+
def get_hybrid_metrics(
|
|
184
|
+
self, column: Column, metric: Metrics, column_results: Dict, **kwargs
|
|
185
|
+
):
|
|
186
|
+
return None
|
|
187
|
+
|
|
188
|
+
def get_all_metrics(
|
|
189
|
+
self,
|
|
190
|
+
metric_funcs: List[ThreadPoolMetrics],
|
|
191
|
+
):
|
|
192
|
+
"""get all profiler metrics"""
|
|
193
|
+
profile_results = {"table": {}, "columns": defaultdict(dict)}
|
|
194
|
+
runner = factory.create(
|
|
195
|
+
self.service_connection_config.__class__.__name__,
|
|
196
|
+
client=self.connection,
|
|
197
|
+
)
|
|
198
|
+
metric_list = [
|
|
199
|
+
self.compute_metrics(runner, metric_func)
|
|
200
|
+
for metric_func in MetricFilter.filter_empty_metrics(metric_funcs)
|
|
201
|
+
]
|
|
202
|
+
for metric_result in metric_list:
|
|
203
|
+
profile, column, metric_type = metric_result
|
|
204
|
+
if profile:
|
|
205
|
+
if metric_type == MetricTypes.Table.value:
|
|
206
|
+
profile_results["table"].update(profile)
|
|
207
|
+
if metric_type == MetricTypes.System.value:
|
|
208
|
+
profile_results["system"] = profile
|
|
209
|
+
elif metric_type == MetricTypes.Custom.value and column is None:
|
|
210
|
+
profile_results["table"].update(profile)
|
|
211
|
+
else:
|
|
212
|
+
profile_results["columns"][column].update(
|
|
213
|
+
{
|
|
214
|
+
"name": column,
|
|
215
|
+
"timestamp": int(
|
|
216
|
+
datetime.now(tz=timezone.utc).timestamp() * 1000
|
|
217
|
+
),
|
|
218
|
+
**profile,
|
|
219
|
+
}
|
|
220
|
+
)
|
|
221
|
+
return profile_results
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def table(self):
|
|
225
|
+
"""OM Table entity"""
|
|
226
|
+
return self.table_entity
|
|
227
|
+
|
|
228
|
+
def get_columns(self) -> List[Optional[SQALikeColumn]]:
|
|
229
|
+
return [
|
|
230
|
+
SQALikeColumn(name=c.name.__root__, type=c.dataType)
|
|
231
|
+
for c in self.table.columns
|
|
232
|
+
]
|
|
233
|
+
|
|
234
|
+
def close(self):
|
|
235
|
+
if getattr(self.connection, "close", None):
|
|
236
|
+
self.connection.close()
|