openmetadata-ingestion 1.1.4.0__py3-none-any.whl → 1.1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- metadata/data_insight/api/workflow.py +57 -1
- metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +1 -1
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +1 -1
- 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/entityReportData.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/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/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +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 +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 +6 -1
- metadata/generated/schema/api/data/createTable.py +1 -1
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.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/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/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/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/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +1 -1
- 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 +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +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/applicationConfiguration.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 +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/extensionConfiguration.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/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/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/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/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 +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +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 +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +6 -1
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/table.py +1 -1
- metadata/generated/schema/entity/data/topic.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/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- 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/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/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/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -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 +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
- 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/mongoDB/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.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 +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/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/nifiConnection.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/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConection.py +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 +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -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/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 +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/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 +1 -1
- 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/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/dataInsightAlertConfig.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/entitySpelFilters.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +29 -29
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +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 +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.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/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/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +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 +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/sqlMigrationScript.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/basic.py +7 -7
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/changeEvent.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/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -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/paging.py +1 -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/ingestion/lineage/sql_lineage.py +30 -7
- metadata/ingestion/ometa/mixins/data_insight_mixin.py +12 -1
- metadata/ingestion/ometa/mixins/query_mixin.py +40 -4
- metadata/ingestion/ometa/mixins/table_mixin.py +0 -5
- metadata/ingestion/processor/query_parser.py +6 -6
- metadata/ingestion/source/dashboard/tableau/models.py +0 -1
- metadata/ingestion/source/dashboard/tableau/queries.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +27 -38
- metadata/ingestion/source/database/bigquery/helper.py +66 -0
- metadata/ingestion/source/database/bigquery/metadata.py +69 -64
- metadata/ingestion/source/database/bigquery/queries.py +2 -2
- metadata/ingestion/source/database/bigquery/query_parser.py +19 -1
- metadata/ingestion/source/database/common_db_source.py +0 -3
- metadata/ingestion/source/database/database_service.py +27 -3
- metadata/ingestion/source/database/lineage_source.py +21 -18
- metadata/ingestion/source/database/query_parser_source.py +3 -0
- metadata/ingestion/source/database/sample_data.py +17 -9
- metadata/ingestion/source/database/usage_source.py +30 -29
- metadata/ingestion/stage/table_usage.py +42 -34
- metadata/profiler/interface/pandas/profiler_interface.py +24 -41
- metadata/profiler/interface/profiler_interface.py +62 -2
- metadata/profiler/interface/profiler_interface_factory.py +9 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +19 -36
- metadata/profiler/interface/sqlalchemy/single_store/__init__.py +0 -0
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +86 -0
- metadata/profiler/metrics/system/queries/redshift.py +3 -5
- metadata/profiler/metrics/system/system.py +0 -4
- metadata/profiler/metrics/window/first_quartile.py +4 -4
- metadata/profiler/metrics/window/median.py +4 -4
- metadata/profiler/metrics/window/percentille_mixin.py +9 -0
- metadata/profiler/metrics/window/third_quartile.py +4 -4
- metadata/profiler/processor/core.py +1 -1
- metadata/profiler/source/single_store/functions/median.py +17 -0
- metadata/profiler/source/single_store/metrics/window/first_quartile.py +10 -0
- metadata/profiler/source/single_store/metrics/window/median.py +10 -0
- metadata/profiler/source/single_store/metrics/window/third_quartile.py +10 -0
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/METADATA +176 -176
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/RECORD +445 -437
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.1.4.0.dist-info → openmetadata_ingestion-1.1.6.0.dist-info}/top_level.txt +0 -0
|
@@ -112,7 +112,7 @@ class DatabaseServiceTopology(ServiceTopology):
|
|
|
112
112
|
NodeStage(
|
|
113
113
|
type_=OMetaTagAndClassification,
|
|
114
114
|
context="tags",
|
|
115
|
-
processor="
|
|
115
|
+
processor="yield_database_schema_tag_details",
|
|
116
116
|
ack_sink=False,
|
|
117
117
|
nullable=True,
|
|
118
118
|
cache_all=True,
|
|
@@ -130,6 +130,14 @@ class DatabaseServiceTopology(ServiceTopology):
|
|
|
130
130
|
table = TopologyNode(
|
|
131
131
|
producer="get_tables_name_and_type",
|
|
132
132
|
stages=[
|
|
133
|
+
NodeStage(
|
|
134
|
+
type_=OMetaTagAndClassification,
|
|
135
|
+
context="tags",
|
|
136
|
+
processor="yield_table_tag_details",
|
|
137
|
+
ack_sink=False,
|
|
138
|
+
nullable=True,
|
|
139
|
+
cache_all=True,
|
|
140
|
+
),
|
|
133
141
|
NodeStage(
|
|
134
142
|
type_=Table,
|
|
135
143
|
context="table",
|
|
@@ -218,7 +226,23 @@ class DatabaseServiceSource(
|
|
|
218
226
|
From topology. To be run for each schema
|
|
219
227
|
"""
|
|
220
228
|
|
|
221
|
-
def
|
|
229
|
+
def yield_table_tags(
|
|
230
|
+
self, table_name_and_type: Tuple[str, TableType]
|
|
231
|
+
) -> Iterable[CreateTableRequest]:
|
|
232
|
+
"""
|
|
233
|
+
From topology. To be run for each table
|
|
234
|
+
"""
|
|
235
|
+
|
|
236
|
+
def yield_table_tag_details(
|
|
237
|
+
self, table_name_and_type: str
|
|
238
|
+
) -> Iterable[OMetaTagAndClassification]:
|
|
239
|
+
"""
|
|
240
|
+
From topology. To be run for each table
|
|
241
|
+
"""
|
|
242
|
+
if self.source_config.includeTags:
|
|
243
|
+
yield from self.yield_table_tags(table_name_and_type) or []
|
|
244
|
+
|
|
245
|
+
def yield_database_schema_tag_details(
|
|
222
246
|
self, schema_name: str
|
|
223
247
|
) -> Iterable[OMetaTagAndClassification]:
|
|
224
248
|
"""
|
|
@@ -267,7 +291,7 @@ class DatabaseServiceSource(
|
|
|
267
291
|
|
|
268
292
|
tag_labels = []
|
|
269
293
|
for tag_and_category in self.context.tags or []:
|
|
270
|
-
if tag_and_category.fqn.__root__ == entity_fqn:
|
|
294
|
+
if tag_and_category.fqn and tag_and_category.fqn.__root__ == entity_fqn:
|
|
271
295
|
tag_label = get_tag_label(
|
|
272
296
|
metadata=self.metadata,
|
|
273
297
|
tag_name=tag_and_category.tag_request.name.__root__,
|
|
@@ -78,25 +78,28 @@ class LineageSource(QueryParserSource, ABC):
|
|
|
78
78
|
Given an engine, iterate over the query results to
|
|
79
79
|
yield a TableQuery with query parsing info
|
|
80
80
|
"""
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
)
|
|
88
|
-
for row in rows:
|
|
89
|
-
query_dict = dict(row)
|
|
90
|
-
try:
|
|
91
|
-
yield TableQuery(
|
|
92
|
-
query=query_dict["query_text"],
|
|
93
|
-
databaseName=self.get_database_name(query_dict),
|
|
94
|
-
serviceName=self.config.serviceName,
|
|
95
|
-
databaseSchema=self.get_schema_name(query_dict),
|
|
81
|
+
for engine in self.get_engine():
|
|
82
|
+
with engine.connect() as conn:
|
|
83
|
+
rows = conn.execute(
|
|
84
|
+
self.get_sql_statement(
|
|
85
|
+
start_time=self.start,
|
|
86
|
+
end_time=self.end,
|
|
96
87
|
)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
88
|
+
)
|
|
89
|
+
for row in rows:
|
|
90
|
+
query_dict = dict(row)
|
|
91
|
+
try:
|
|
92
|
+
yield TableQuery(
|
|
93
|
+
query=query_dict["query_text"],
|
|
94
|
+
databaseName=self.get_database_name(query_dict),
|
|
95
|
+
serviceName=self.config.serviceName,
|
|
96
|
+
databaseSchema=self.get_schema_name(query_dict),
|
|
97
|
+
)
|
|
98
|
+
except Exception as exc:
|
|
99
|
+
logger.debug(traceback.format_exc())
|
|
100
|
+
logger.warning(
|
|
101
|
+
f"Error processing query_dict {query_dict}: {exc}"
|
|
102
|
+
)
|
|
100
103
|
|
|
101
104
|
def next_record(self) -> Iterable[AddLineageRequest]:
|
|
102
105
|
"""
|
|
@@ -112,6 +112,9 @@ class QueryParserSource(Source[Union[TableQuery, AddLineageRequest]], ABC):
|
|
|
112
112
|
return f"{self.filters} AND {self.source_config.filterCondition}"
|
|
113
113
|
return self.filters
|
|
114
114
|
|
|
115
|
+
def get_engine(self):
|
|
116
|
+
yield self.engine
|
|
117
|
+
|
|
115
118
|
def close(self):
|
|
116
119
|
"""
|
|
117
120
|
By default, there is nothing to close
|
|
@@ -1121,15 +1121,22 @@ class SampleDataSource(
|
|
|
1121
1121
|
rowCount=profile["rowCount"],
|
|
1122
1122
|
createDateTime=profile.get("createDateTime"),
|
|
1123
1123
|
sizeInByte=profile.get("sizeInByte"),
|
|
1124
|
-
timestamp=(
|
|
1125
|
-
|
|
1126
|
-
|
|
1124
|
+
timestamp=int(
|
|
1125
|
+
(
|
|
1126
|
+
datetime.now(tz=timezone.utc) - timedelta(days=days)
|
|
1127
|
+
).timestamp()
|
|
1128
|
+
* 1000
|
|
1129
|
+
),
|
|
1127
1130
|
),
|
|
1128
1131
|
columnProfile=[
|
|
1129
1132
|
ColumnProfile(
|
|
1130
|
-
timestamp=(
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
+
timestamp=int(
|
|
1134
|
+
(
|
|
1135
|
+
datetime.now(tz=timezone.utc)
|
|
1136
|
+
- timedelta(days=days)
|
|
1137
|
+
).timestamp()
|
|
1138
|
+
* 1000
|
|
1139
|
+
),
|
|
1133
1140
|
**col_profile,
|
|
1134
1141
|
)
|
|
1135
1142
|
for col_profile in profile["columnProfile"]
|
|
@@ -1216,9 +1223,10 @@ class SampleDataSource(
|
|
|
1216
1223
|
for days, result in enumerate(test_case_results["results"]):
|
|
1217
1224
|
yield OMetaTestCaseResultsSample(
|
|
1218
1225
|
test_case_results=TestCaseResult(
|
|
1219
|
-
timestamp=(
|
|
1220
|
-
datetime.now() - timedelta(days=days)
|
|
1221
|
-
|
|
1226
|
+
timestamp=int(
|
|
1227
|
+
(datetime.now() - timedelta(days=days)).timestamp()
|
|
1228
|
+
* 1000
|
|
1229
|
+
),
|
|
1222
1230
|
testCaseStatus=result["testCaseStatus"],
|
|
1223
1231
|
result=result["result"],
|
|
1224
1232
|
testResultValue=[
|
|
@@ -93,37 +93,38 @@ class UsageSource(QueryParserSource, ABC):
|
|
|
93
93
|
f"{(self.start + timedelta(days=days + 1)).date()}"
|
|
94
94
|
)
|
|
95
95
|
try:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
for engine in self.get_engine():
|
|
97
|
+
with engine.connect() as conn:
|
|
98
|
+
rows = conn.execute(
|
|
99
|
+
self.get_sql_statement(
|
|
100
|
+
start_time=self.start + timedelta(days=days),
|
|
101
|
+
end_time=self.start + timedelta(days=days + 1),
|
|
102
|
+
)
|
|
101
103
|
)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
104
|
+
queries = []
|
|
105
|
+
for row in rows:
|
|
106
|
+
row = dict(row)
|
|
107
|
+
try:
|
|
108
|
+
queries.append(
|
|
109
|
+
TableQuery(
|
|
110
|
+
query=self.format_query(row["query_text"]),
|
|
111
|
+
userName=row["user_name"],
|
|
112
|
+
startTime=str(row["start_time"]),
|
|
113
|
+
endTime=str(row["end_time"]),
|
|
114
|
+
analysisDate=row["start_time"],
|
|
115
|
+
aborted=self.get_aborted_status(row),
|
|
116
|
+
databaseName=self.get_database_name(row),
|
|
117
|
+
duration=row.get("duration"),
|
|
118
|
+
serviceName=self.config.serviceName,
|
|
119
|
+
databaseSchema=self.get_schema_name(row),
|
|
120
|
+
)
|
|
119
121
|
)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
yield TableQueries(queries=queries)
|
|
122
|
+
except Exception as exc:
|
|
123
|
+
logger.debug(traceback.format_exc())
|
|
124
|
+
logger.warning(
|
|
125
|
+
f"Unexpected exception processing row [{row}]: {exc}"
|
|
126
|
+
)
|
|
127
|
+
yield TableQueries(queries=queries)
|
|
127
128
|
except Exception as exc:
|
|
128
129
|
logger.debug(traceback.format_exc())
|
|
129
130
|
logger.error(f"Source usage processing error: {exc}")
|
|
@@ -18,6 +18,7 @@ import os
|
|
|
18
18
|
import shutil
|
|
19
19
|
import traceback
|
|
20
20
|
from pathlib import Path
|
|
21
|
+
from typing import List, Tuple
|
|
21
22
|
|
|
22
23
|
from metadata.config.common import ConfigModel
|
|
23
24
|
from metadata.generated.schema.api.data.createQuery import CreateQueryRequest
|
|
@@ -25,7 +26,7 @@ from metadata.generated.schema.entity.services.connections.metadata.openMetadata
|
|
|
25
26
|
OpenMetadataConnection,
|
|
26
27
|
)
|
|
27
28
|
from metadata.generated.schema.entity.teams.user import User
|
|
28
|
-
from metadata.generated.schema.type.queryParserData import QueryParserData
|
|
29
|
+
from metadata.generated.schema.type.queryParserData import ParsedData, QueryParserData
|
|
29
30
|
from metadata.generated.schema.type.tableUsageCount import TableUsageCount
|
|
30
31
|
from metadata.ingestion.api.stage import Stage
|
|
31
32
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -80,20 +81,22 @@ class TableUsageStage(Stage[QueryParserData]):
|
|
|
80
81
|
logger.info(f"Creating the directory to store staging data in {location}")
|
|
81
82
|
location.mkdir(parents=True, exist_ok=True)
|
|
82
83
|
|
|
83
|
-
def _get_user_entity(self, username: str):
|
|
84
|
+
def _get_user_entity(self, username: str) -> Tuple[List[str], List[str]]:
|
|
84
85
|
if username:
|
|
85
86
|
user = self.metadata.get_by_name(entity=User, fqn=username)
|
|
86
87
|
if user:
|
|
87
|
-
return [user.fullyQualifiedName.__root__]
|
|
88
|
-
return []
|
|
88
|
+
return [user.fullyQualifiedName.__root__], []
|
|
89
|
+
return [], [username]
|
|
89
90
|
|
|
90
91
|
def _add_sql_query(self, record, table):
|
|
92
|
+
users, used_by = self._get_user_entity(record.userName)
|
|
91
93
|
if self.table_queries.get((table, record.date)):
|
|
92
94
|
self.table_queries[(table, record.date)].append(
|
|
93
95
|
CreateQueryRequest(
|
|
94
96
|
query=record.sql,
|
|
95
|
-
users=
|
|
97
|
+
users=users,
|
|
96
98
|
queryDate=record.date,
|
|
99
|
+
usedBy=used_by,
|
|
97
100
|
duration=record.duration,
|
|
98
101
|
)
|
|
99
102
|
)
|
|
@@ -101,13 +104,45 @@ class TableUsageStage(Stage[QueryParserData]):
|
|
|
101
104
|
self.table_queries[(table, record.date)] = [
|
|
102
105
|
CreateQueryRequest(
|
|
103
106
|
query=record.sql,
|
|
104
|
-
users=
|
|
107
|
+
users=users,
|
|
105
108
|
queryDate=record.date,
|
|
109
|
+
usedBy=used_by,
|
|
106
110
|
duration=record.duration,
|
|
107
111
|
)
|
|
108
112
|
]
|
|
109
113
|
|
|
114
|
+
def _handle_table_usage(self, parsed_data: ParsedData, table: str) -> None:
|
|
115
|
+
table_joins = parsed_data.joins.get(table)
|
|
116
|
+
try:
|
|
117
|
+
self._add_sql_query(record=parsed_data, table=table)
|
|
118
|
+
table_usage_count = self.table_usage.get((table, parsed_data.date))
|
|
119
|
+
if table_usage_count is not None:
|
|
120
|
+
table_usage_count.count = table_usage_count.count + 1
|
|
121
|
+
if table_joins:
|
|
122
|
+
table_usage_count.joins.extend(table_joins)
|
|
123
|
+
else:
|
|
124
|
+
joins = []
|
|
125
|
+
if table_joins:
|
|
126
|
+
joins.extend(table_joins)
|
|
127
|
+
|
|
128
|
+
table_usage_count = TableUsageCount(
|
|
129
|
+
table=table,
|
|
130
|
+
databaseName=parsed_data.databaseName,
|
|
131
|
+
date=parsed_data.date,
|
|
132
|
+
joins=joins,
|
|
133
|
+
serviceName=parsed_data.serviceName,
|
|
134
|
+
sqlQueries=[],
|
|
135
|
+
databaseSchema=parsed_data.databaseSchema,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
except Exception as exc:
|
|
139
|
+
logger.debug(traceback.format_exc())
|
|
140
|
+
logger.warning(f"Error in staging record: {exc}")
|
|
141
|
+
self.table_usage[(table, parsed_data.date)] = table_usage_count
|
|
142
|
+
logger.info(f"Successfully record staged for {table}")
|
|
143
|
+
|
|
110
144
|
def stage_record(self, record: QueryParserData) -> None:
|
|
145
|
+
|
|
111
146
|
"""
|
|
112
147
|
Process the parsed data and store it in a file
|
|
113
148
|
"""
|
|
@@ -119,34 +154,7 @@ class TableUsageStage(Stage[QueryParserData]):
|
|
|
119
154
|
if parsed_data is None:
|
|
120
155
|
continue
|
|
121
156
|
for table in parsed_data.tables:
|
|
122
|
-
|
|
123
|
-
try:
|
|
124
|
-
self._add_sql_query(record=parsed_data, table=table)
|
|
125
|
-
table_usage_count = self.table_usage.get((table, parsed_data.date))
|
|
126
|
-
if table_usage_count is not None:
|
|
127
|
-
table_usage_count.count = table_usage_count.count + 1
|
|
128
|
-
if table_joins:
|
|
129
|
-
table_usage_count.joins.extend(table_joins)
|
|
130
|
-
else:
|
|
131
|
-
joins = []
|
|
132
|
-
if table_joins:
|
|
133
|
-
joins.extend(table_joins)
|
|
134
|
-
|
|
135
|
-
table_usage_count = TableUsageCount(
|
|
136
|
-
table=table,
|
|
137
|
-
databaseName=parsed_data.databaseName,
|
|
138
|
-
date=parsed_data.date,
|
|
139
|
-
joins=joins,
|
|
140
|
-
serviceName=parsed_data.serviceName,
|
|
141
|
-
sqlQueries=[],
|
|
142
|
-
databaseSchema=parsed_data.databaseSchema,
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
except Exception as exc:
|
|
146
|
-
logger.debug(traceback.format_exc())
|
|
147
|
-
logger.warning(f"Error in staging record: {exc}")
|
|
148
|
-
self.table_usage[(table, parsed_data.date)] = table_usage_count
|
|
149
|
-
logger.info(f"Successfully record staged for {table}")
|
|
157
|
+
self._handle_table_usage(parsed_data=parsed_data, table=table)
|
|
150
158
|
self.dump_data_to_file()
|
|
151
159
|
|
|
152
160
|
def dump_data_to_file(self):
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
9
|
# See the License for the specific language governing permissions and
|
|
10
10
|
# limitations under the License.
|
|
11
|
+
# pylint: disable=arguments-differ
|
|
11
12
|
|
|
12
13
|
"""
|
|
13
14
|
Interfaces with database for all database engine
|
|
@@ -32,7 +33,6 @@ from metadata.profiler.metrics.registry import Metrics
|
|
|
32
33
|
from metadata.profiler.processor.sampler.sampler_factory import sampler_factory_
|
|
33
34
|
from metadata.readers.dataframe.models import DatalakeTableSchemaWrapper
|
|
34
35
|
from metadata.utils.datalake.datalake_utils import fetch_dataframe
|
|
35
|
-
from metadata.utils.dispatch import valuedispatch
|
|
36
36
|
from metadata.utils.logger import profiler_interface_registry_logger
|
|
37
37
|
from metadata.utils.sqa_like_column import SQALikeColumn, Type
|
|
38
38
|
|
|
@@ -109,20 +109,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
109
109
|
profile_sample_query=self.profile_query,
|
|
110
110
|
)
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
def _get_metrics(self, *args, **kwargs):
|
|
114
|
-
"""Generic getter method for metrics. To be used with
|
|
115
|
-
specific dispatch methods
|
|
116
|
-
"""
|
|
117
|
-
logger.warning("Could not get metric. No function registered.")
|
|
118
|
-
|
|
119
|
-
# pylint: disable=unused-argument
|
|
120
|
-
@_get_metrics.register(MetricTypes.Table.value)
|
|
121
|
-
def _(
|
|
112
|
+
def _compute_table_metrics(
|
|
122
113
|
self,
|
|
123
|
-
metric_type: str,
|
|
124
114
|
metrics: List[Metrics],
|
|
125
|
-
|
|
115
|
+
runner: List,
|
|
126
116
|
*args,
|
|
127
117
|
**kwargs,
|
|
128
118
|
):
|
|
@@ -138,7 +128,7 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
138
128
|
|
|
139
129
|
try:
|
|
140
130
|
row_dict = {}
|
|
141
|
-
df_list = [df.where(pd.notnull(df), None) for df in
|
|
131
|
+
df_list = [df.where(pd.notnull(df), None) for df in runner]
|
|
142
132
|
for metric in metrics:
|
|
143
133
|
row_dict[metric.name()] = metric().df_fn(df_list)
|
|
144
134
|
return row_dict
|
|
@@ -147,13 +137,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
147
137
|
logger.warning(f"Error trying to compute profile for {exc}")
|
|
148
138
|
raise RuntimeError(exc)
|
|
149
139
|
|
|
150
|
-
|
|
151
|
-
@_get_metrics.register(MetricTypes.Static.value)
|
|
152
|
-
def _(
|
|
140
|
+
def _compute_static_metrics(
|
|
153
141
|
self,
|
|
154
|
-
metric_type: str,
|
|
155
142
|
metrics: List[Metrics],
|
|
156
|
-
|
|
143
|
+
runner: List,
|
|
157
144
|
column,
|
|
158
145
|
*args,
|
|
159
146
|
**kwargs,
|
|
@@ -172,7 +159,7 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
172
159
|
try:
|
|
173
160
|
row_dict = {}
|
|
174
161
|
for metric in metrics:
|
|
175
|
-
metric_resp = metric(column).df_fn(
|
|
162
|
+
metric_resp = metric(column).df_fn(runner)
|
|
176
163
|
row_dict[metric.name()] = (
|
|
177
164
|
None if pd.isnull(metric_resp) else metric_resp
|
|
178
165
|
)
|
|
@@ -183,13 +170,10 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
183
170
|
)
|
|
184
171
|
raise RuntimeError(exc)
|
|
185
172
|
|
|
186
|
-
|
|
187
|
-
@_get_metrics.register(MetricTypes.Query.value)
|
|
188
|
-
def _(
|
|
173
|
+
def _compute_query_metrics(
|
|
189
174
|
self,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
dfs,
|
|
175
|
+
metric: Metrics,
|
|
176
|
+
runner: List,
|
|
193
177
|
column,
|
|
194
178
|
*args,
|
|
195
179
|
**kwargs,
|
|
@@ -204,18 +188,15 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
204
188
|
dictionnary of results
|
|
205
189
|
"""
|
|
206
190
|
col_metric = None
|
|
207
|
-
col_metric =
|
|
191
|
+
col_metric = metric(column).df_fn(runner)
|
|
208
192
|
if not col_metric:
|
|
209
193
|
return None
|
|
210
|
-
return {
|
|
194
|
+
return {metric.name(): col_metric}
|
|
211
195
|
|
|
212
|
-
|
|
213
|
-
@_get_metrics.register(MetricTypes.Window.value)
|
|
214
|
-
def _(
|
|
196
|
+
def _compute_window_metrics(
|
|
215
197
|
self,
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
dfs,
|
|
198
|
+
metrics: List[Metrics],
|
|
199
|
+
runner: List,
|
|
219
200
|
column,
|
|
220
201
|
*args,
|
|
221
202
|
**kwargs,
|
|
@@ -224,19 +205,21 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
224
205
|
Given a list of metrics, compute the given results
|
|
225
206
|
and returns the values
|
|
226
207
|
"""
|
|
208
|
+
|
|
227
209
|
try:
|
|
228
210
|
metric_values = {}
|
|
229
211
|
for metric in metrics:
|
|
230
|
-
metric_values[metric.name()] = metric(column).df_fn(
|
|
212
|
+
metric_values[metric.name()] = metric(column).df_fn(runner)
|
|
231
213
|
return metric_values if metric_values else None
|
|
232
214
|
except Exception as exc:
|
|
233
215
|
logger.debug(traceback.format_exc())
|
|
234
216
|
logger.warning(f"Unexpected exception computing metrics: {exc}")
|
|
235
217
|
return None
|
|
236
218
|
|
|
237
|
-
|
|
238
|
-
def _(
|
|
219
|
+
def _compute_system_metrics(
|
|
239
220
|
self,
|
|
221
|
+
metrics: Metrics,
|
|
222
|
+
runner: List,
|
|
240
223
|
*args,
|
|
241
224
|
**kwargs,
|
|
242
225
|
):
|
|
@@ -260,11 +243,9 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
260
243
|
try:
|
|
261
244
|
row = None
|
|
262
245
|
if self.dfs:
|
|
263
|
-
row = self.
|
|
264
|
-
metric_type.value,
|
|
246
|
+
row = self._get_metric_fn[metric_type.value](
|
|
265
247
|
metrics,
|
|
266
248
|
dfs,
|
|
267
|
-
session=self.client,
|
|
268
249
|
column=column,
|
|
269
250
|
)
|
|
270
251
|
except Exception as exc:
|
|
@@ -354,7 +335,9 @@ class PandasProfilerInterface(ProfilerInterface, PandasInterfaceMixin):
|
|
|
354
335
|
profile_results["columns"][column].update(
|
|
355
336
|
{
|
|
356
337
|
"name": column,
|
|
357
|
-
"timestamp":
|
|
338
|
+
"timestamp": int(
|
|
339
|
+
datetime.now(tz=timezone.utc).timestamp() * 1000
|
|
340
|
+
),
|
|
358
341
|
**profile,
|
|
359
342
|
}
|
|
360
343
|
)
|
|
@@ -15,7 +15,7 @@ supporting sqlalchemy abstraction layer
|
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
from abc import ABC, abstractmethod
|
|
18
|
-
from typing import Dict, Optional, Union
|
|
18
|
+
from typing import Dict, List, Optional, Union
|
|
19
19
|
|
|
20
20
|
from sqlalchemy import Column
|
|
21
21
|
from typing_extensions import Self
|
|
@@ -36,7 +36,9 @@ from metadata.ingestion.api.processor import ProfilerProcessorStatus
|
|
|
36
36
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
37
37
|
from metadata.ingestion.source.connections import get_connection
|
|
38
38
|
from metadata.profiler.api.models import ProfileSampleConfig, TableConfig
|
|
39
|
+
from metadata.profiler.metrics.core import MetricTypes
|
|
39
40
|
from metadata.profiler.metrics.registry import Metrics
|
|
41
|
+
from metadata.profiler.processor.runner import QueryRunner
|
|
40
42
|
from metadata.utils.partition import get_partition_details
|
|
41
43
|
|
|
42
44
|
|
|
@@ -78,6 +80,14 @@ class ProfilerInterface(ABC):
|
|
|
78
80
|
)
|
|
79
81
|
self.timeout_seconds = timeout_seconds
|
|
80
82
|
|
|
83
|
+
self._get_metric_fn = {
|
|
84
|
+
MetricTypes.Table.value: self._compute_table_metrics,
|
|
85
|
+
MetricTypes.Static.value: self._compute_static_metrics,
|
|
86
|
+
MetricTypes.Query.value: self._compute_query_metrics,
|
|
87
|
+
MetricTypes.Window.value: self._compute_window_metrics,
|
|
88
|
+
MetricTypes.System.value: self._compute_system_metrics,
|
|
89
|
+
}
|
|
90
|
+
|
|
81
91
|
@abstractmethod
|
|
82
92
|
def _get_sampler(self):
|
|
83
93
|
"""Get the sampler"""
|
|
@@ -222,7 +232,57 @@ class ProfilerInterface(ABC):
|
|
|
222
232
|
raise NotImplementedError
|
|
223
233
|
|
|
224
234
|
@abstractmethod
|
|
225
|
-
def
|
|
235
|
+
def _compute_table_metrics(
|
|
236
|
+
self,
|
|
237
|
+
metrics: List[Metrics],
|
|
238
|
+
runner,
|
|
239
|
+
*args,
|
|
240
|
+
**kwargs,
|
|
241
|
+
):
|
|
242
|
+
"""Get metrics"""
|
|
243
|
+
raise NotImplementedError
|
|
244
|
+
|
|
245
|
+
@abstractmethod
|
|
246
|
+
def _compute_static_metrics(
|
|
247
|
+
self,
|
|
248
|
+
metrics: List[Metrics],
|
|
249
|
+
runner,
|
|
250
|
+
*args,
|
|
251
|
+
**kwargs,
|
|
252
|
+
):
|
|
253
|
+
"""Get metrics"""
|
|
254
|
+
raise NotImplementedError
|
|
255
|
+
|
|
256
|
+
@abstractmethod
|
|
257
|
+
def _compute_query_metrics(
|
|
258
|
+
self,
|
|
259
|
+
metric: Metrics,
|
|
260
|
+
runner,
|
|
261
|
+
*args,
|
|
262
|
+
**kwargs,
|
|
263
|
+
):
|
|
264
|
+
"""Get metrics"""
|
|
265
|
+
raise NotImplementedError
|
|
266
|
+
|
|
267
|
+
@abstractmethod
|
|
268
|
+
def _compute_window_metrics(
|
|
269
|
+
self,
|
|
270
|
+
metrics: List[Metrics],
|
|
271
|
+
runner: QueryRunner,
|
|
272
|
+
*args,
|
|
273
|
+
**kwargs,
|
|
274
|
+
):
|
|
275
|
+
"""Get metrics"""
|
|
276
|
+
raise NotImplementedError
|
|
277
|
+
|
|
278
|
+
@abstractmethod
|
|
279
|
+
def _compute_system_metrics(
|
|
280
|
+
self,
|
|
281
|
+
metrics: Metrics,
|
|
282
|
+
runner,
|
|
283
|
+
*args,
|
|
284
|
+
**kwargs,
|
|
285
|
+
):
|
|
226
286
|
"""Get metrics"""
|
|
227
287
|
raise NotImplementedError
|
|
228
288
|
|
|
@@ -21,6 +21,9 @@ from metadata.generated.schema.entity.services.connections.database.bigQueryConn
|
|
|
21
21
|
from metadata.generated.schema.entity.services.connections.database.datalakeConnection import (
|
|
22
22
|
DatalakeConnection,
|
|
23
23
|
)
|
|
24
|
+
from metadata.generated.schema.entity.services.connections.database.singleStoreConnection import (
|
|
25
|
+
SingleStoreConnection,
|
|
26
|
+
)
|
|
24
27
|
from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
|
|
25
28
|
from metadata.profiler.interface.pandas.profiler_interface import (
|
|
26
29
|
PandasProfilerInterface,
|
|
@@ -32,6 +35,9 @@ from metadata.profiler.interface.sqlalchemy.bigquery.profiler_interface import (
|
|
|
32
35
|
from metadata.profiler.interface.sqlalchemy.profiler_interface import (
|
|
33
36
|
SQAProfilerInterface,
|
|
34
37
|
)
|
|
38
|
+
from metadata.profiler.interface.sqlalchemy.single_store.profiler_interface import (
|
|
39
|
+
SingleStoreProfilerInterface,
|
|
40
|
+
)
|
|
35
41
|
|
|
36
42
|
|
|
37
43
|
class ProfilerInterfaceFactory:
|
|
@@ -58,6 +64,9 @@ profiler_interface_factory.register(DatabaseConnection.__name__, SQAProfilerInte
|
|
|
58
64
|
profiler_interface_factory.register(
|
|
59
65
|
BigQueryConnection.__name__, BigQueryProfilerInterface
|
|
60
66
|
)
|
|
67
|
+
profiler_interface_factory.register(
|
|
68
|
+
SingleStoreConnection.__name__, SingleStoreProfilerInterface
|
|
69
|
+
)
|
|
61
70
|
profiler_interface_factory.register(
|
|
62
71
|
DatalakeConnection.__name__, PandasProfilerInterface
|
|
63
72
|
)
|