openmetadata-ingestion 1.5.11.0__py3-none-any.whl → 1.6.0.0rc1__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.
- _openmetadata_testutils/dict.py +23 -0
- _openmetadata_testutils/pydantic/test_utils.py +22 -2
- _openmetadata_testutils/pytest_openmetadata/__init__.py +0 -0
- _openmetadata_testutils/pytest_openmetadata/plugin.py +86 -0
- _openmetadata_testutils/pytest_openmetadata/test_utils.py +99 -0
- metadata/cli/app.py +1 -0
- metadata/cli/dataquality.py +4 -1
- metadata/cli/ingest.py +2 -1
- metadata/cli/lineage.py +2 -1
- metadata/cli/profile.py +4 -1
- metadata/cli/usage.py +2 -1
- metadata/config/common.py +3 -1
- metadata/data_quality/api/models.py +2 -1
- metadata/data_quality/builders/i_validator_builder.py +5 -2
- metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +1 -0
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +1 -0
- metadata/data_quality/interface/test_suite_interface.py +6 -11
- metadata/data_quality/interface/test_suite_interface_factory.py +63 -33
- metadata/data_quality/source/test_suite.py +1 -1
- metadata/data_quality/validations/base_test_handler.py +3 -3
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +4 -2
- metadata/data_quality/validations/models.py +6 -1
- metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +7 -2
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +175 -3
- metadata/examples/workflows/datafactory.yaml +29 -0
- metadata/examples/workflows/matillion.yaml +31 -0
- metadata/examples/workflows/rest.yaml +20 -0
- metadata/examples/workflows/sigma.yaml +25 -0
- metadata/examples/workflows/trino_profiler.yaml +20 -0
- metadata/generated/antlr/EntityLinkLexer.py +70 -99
- metadata/generated/antlr/FqnLexer.py +15 -15
- 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/addTagToAssetsRequest.py +43 -0
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +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/createAPICollection.py +1 -1
- metadata/generated/schema/api/data/createAPIEndpoint.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/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/createMetric.py +83 -0
- 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 +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/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/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.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/governance/__init__.py +3 -0
- metadata/generated/schema/api/governance/createWorkflowDefinition.py +83 -0
- metadata/generated/schema/api/governance/createWorkflowInstanceState.py +22 -0
- 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/createApiService.py +2 -2
- 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 +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/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestCaseResult.py +71 -0
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +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/assetCertificationSettings.py +22 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -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/limitsConfiguration.py +1 -1
- metadata/generated/schema/configuration/lineageSettings.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 +1 -1
- metadata/generated/schema/configuration/searchSettings.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/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +9 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +23 -8
- metadata/generated/schema/dataInsight/custom/summaryCard.py +20 -9
- 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/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +8 -1
- metadata/generated/schema/entity/applications/appExtension.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 +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +54 -2
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.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/collateAIAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +8 -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 +8 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +8 -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 +3 -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 -2
- metadata/generated/schema/entity/classification/tag.py +2 -2
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +4 -2
- metadata/generated/schema/entity/data/apiEndpoint.py +4 -2
- metadata/generated/schema/entity/data/chart.py +4 -3
- metadata/generated/schema/entity/data/container.py +4 -2
- metadata/generated/schema/entity/data/dashboard.py +4 -2
- metadata/generated/schema/entity/data/dashboardDataModel.py +5 -2
- metadata/generated/schema/entity/data/database.py +7 -7
- metadata/generated/schema/entity/data/databaseSchema.py +5 -2
- metadata/generated/schema/entity/data/glossary.py +2 -2
- metadata/generated/schema/entity/data/glossaryTerm.py +3 -2
- metadata/generated/schema/entity/data/metric.py +196 -0
- metadata/generated/schema/entity/data/mlmodel.py +4 -2
- metadata/generated/schema/entity/data/pipeline.py +4 -3
- metadata/generated/schema/entity/data/query.py +3 -5
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +4 -2
- metadata/generated/schema/entity/data/storedProcedure.py +4 -2
- metadata/generated/schema/entity/data/table.py +36 -3
- metadata/generated/schema/entity/data/topic.py +4 -3
- 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 +19 -2
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.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 +4 -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/apiService.py +7 -7
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/{apiService → api}/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/{apiService → api}/restConnection.py +15 -7
- 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 +29 -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 +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.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/sigmaConnection.py +41 -0
- 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 +5 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +9 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.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/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/common/noConfigAuthenticationTypes.py +11 -0
- 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 +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 +4 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/exasolConnection.py +84 -0
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +4 -1
- 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 +4 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +8 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +9 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapErpConnection.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 +5 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +9 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +7 -2
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.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/mlmodel/vertexaiConnection.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/datafactoryConnection.py +69 -0
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.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/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +65 -0
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- 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/pipeline/stitchConnection.py +43 -0
- 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 +3 -3
- 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 +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 +5 -2
- metadata/generated/schema/entity/services/databaseService.py +5 -2
- 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 +2 -2
- metadata/generated/schema/entity/services/metadataService.py +2 -2
- metadata/generated/schema/entity/services/mlmodelService.py +2 -2
- metadata/generated/schema/entity/services/pipelineService.py +11 -2
- metadata/generated/schema/entity/services/searchService.py +2 -2
- metadata/generated/schema/entity/services/serviceType.py +2 -2
- metadata/generated/schema/entity/services/storageService.py +2 -2
- 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 +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/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/api/eventSubscriptionDiagnosticInfo.py +69 -0
- metadata/generated/schema/events/api/eventsRecord.py +37 -0
- metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -4
- metadata/generated/schema/events/api/typedEvent.py +46 -0
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +15 -46
- metadata/generated/schema/events/eventSubscriptionOffset.py +7 -2
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/failedEventResponse.py +38 -0
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/statusContext.py +43 -0
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionStatus.py +78 -0
- metadata/generated/schema/events/testDestinationStatus.py +88 -0
- metadata/generated/schema/governance/workflows/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/__init__.py +5 -0
- metadata/generated/schema/governance/workflows/elements/edge.py +29 -0
- metadata/generated/schema/governance/workflows/elements/nodeSubType.py +16 -0
- metadata/generated/schema/governance/workflows/elements/nodeType.py +14 -0
- metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +5 -0
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +44 -0
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +49 -0
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +42 -0
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +30 -0
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +30 -0
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +57 -0
- metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +3 -0
- metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +43 -0
- metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +44 -0
- metadata/generated/schema/{entity/data/metrics.py → governance/workflows/workflowDefinition.py} +36 -49
- metadata/generated/schema/governance/workflows/workflowInstance.py +43 -0
- metadata/generated/schema/governance/workflows/workflowInstanceState.py +66 -0
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +53 -0
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.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 -9
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +37 -2
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +42 -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/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 +4 -1
- metadata/generated/schema/metadataIngestion/workflow.py +13 -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/credentials/gitlabCredentials.py +1 -1
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.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 +7 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +2 -2
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/limitsResponse.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 +19 -4
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +6 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +17 -2
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +9 -2
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/assetCertification.py +26 -0
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -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 +1 -1
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +8 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.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/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +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/api/parser.py +14 -0
- metadata/ingestion/models/custom_basemodel_validation.py +80 -0
- metadata/ingestion/models/custom_pydantic.py +33 -1
- metadata/ingestion/models/custom_types.py +2 -0
- metadata/ingestion/models/entity_interface.py +71 -0
- metadata/ingestion/ometa/mixins/es_mixin.py +66 -8
- metadata/ingestion/ometa/routes.py +4 -2
- metadata/ingestion/processor/query_parser.py +2 -2
- metadata/ingestion/source/api/api_service.py +212 -0
- metadata/ingestion/source/api/rest/connection.py +93 -0
- metadata/ingestion/source/api/rest/metadata.py +278 -0
- metadata/ingestion/source/api/rest/models.py +41 -0
- metadata/ingestion/source/api/rest/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/domodashboard/service_spec.py +6 -0
- metadata/ingestion/source/dashboard/lightdash/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/looker/metadata.py +33 -4
- metadata/ingestion/source/dashboard/looker/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/metabase/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/mode/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/mstr/client.py +3 -2
- metadata/ingestion/source/dashboard/mstr/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/powerbi/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/qlikcloud/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/qliksense/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/quicksight/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/redash/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/sigma/__init__.py +0 -0
- metadata/ingestion/source/dashboard/sigma/client.py +186 -0
- metadata/ingestion/source/dashboard/sigma/connection.py +67 -0
- metadata/ingestion/source/dashboard/sigma/metadata.py +331 -0
- metadata/ingestion/source/dashboard/sigma/models.py +97 -0
- metadata/ingestion/source/dashboard/sigma/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/superset/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/tableau/service_spec.py +4 -0
- metadata/ingestion/source/database/athena/service_spec.py +10 -0
- metadata/ingestion/source/database/azuresql/service_spec.py +10 -0
- metadata/ingestion/source/database/bigquery/connection.py +28 -2
- metadata/ingestion/source/database/bigquery/lineage.py +29 -2
- metadata/ingestion/source/database/bigquery/metadata.py +1 -25
- metadata/ingestion/source/database/bigquery/profiler/__init__.py +0 -0
- metadata/ingestion/source/database/bigquery/profiler/profiler.py +30 -0
- metadata/ingestion/source/database/bigquery/profiler/system.py +165 -0
- metadata/ingestion/source/database/bigquery/queries.py +69 -1
- metadata/ingestion/source/database/bigquery/service_spec.py +14 -0
- metadata/ingestion/source/database/bigtable/service_spec.py +4 -0
- metadata/ingestion/source/database/clickhouse/service_spec.py +12 -0
- metadata/ingestion/source/database/common_db_source.py +150 -147
- metadata/ingestion/source/database/common_nosql_source.py +0 -14
- metadata/ingestion/source/database/couchbase/metadata.py +62 -2
- metadata/ingestion/source/database/couchbase/models.py +31 -0
- metadata/ingestion/source/database/couchbase/queries.py +6 -1
- metadata/ingestion/source/database/couchbase/service_spec.py +4 -0
- metadata/ingestion/source/database/database_service.py +15 -22
- metadata/ingestion/source/database/databricks/metadata.py +12 -1
- metadata/ingestion/source/database/databricks/service_spec.py +16 -0
- metadata/ingestion/source/database/datalake/clients/gcs.py +6 -4
- metadata/ingestion/source/database/datalake/metadata.py +2 -13
- metadata/ingestion/source/database/datalake/service_spec.py +9 -0
- metadata/ingestion/source/database/db2/lineage.py +46 -0
- metadata/ingestion/source/database/db2/service_spec.py +9 -0
- metadata/ingestion/source/database/dbt/metadata.py +3 -6
- metadata/ingestion/source/database/dbt/service_spec.py +4 -0
- metadata/ingestion/source/database/deltalake/metadata.py +1 -12
- metadata/ingestion/source/database/deltalake/service_spec.py +4 -0
- metadata/ingestion/source/database/domodatabase/metadata.py +1 -12
- metadata/ingestion/source/database/domodatabase/service_spec.py +4 -0
- metadata/ingestion/source/database/doris/metadata.py +1 -1
- metadata/ingestion/source/database/doris/service_spec.py +4 -0
- metadata/ingestion/source/database/druid/lineage.py +46 -0
- metadata/ingestion/source/database/druid/service_spec.py +4 -0
- metadata/ingestion/source/database/dynamodb/service_spec.py +7 -0
- metadata/ingestion/source/database/exasol/__init__.py +0 -0
- metadata/ingestion/source/database/exasol/connection.py +87 -0
- metadata/ingestion/source/database/exasol/metadata.py +27 -0
- metadata/ingestion/source/database/exasol/service_spec.py +4 -0
- metadata/ingestion/source/database/glue/metadata.py +49 -19
- metadata/ingestion/source/database/glue/models.py +8 -0
- metadata/ingestion/source/database/glue/service_spec.py +4 -0
- metadata/ingestion/source/database/greenplum/lineage.py +46 -0
- metadata/ingestion/source/database/greenplum/service_spec.py +4 -0
- metadata/ingestion/source/database/hive/lineage.py +46 -0
- metadata/ingestion/source/database/hive/service_spec.py +4 -0
- metadata/ingestion/source/database/iceberg/metadata.py +1 -16
- metadata/ingestion/source/database/iceberg/service_spec.py +4 -0
- metadata/ingestion/source/database/impala/lineage.py +46 -0
- metadata/ingestion/source/database/impala/service_spec.py +4 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +3 -5
- metadata/ingestion/source/database/lineage_source.py +124 -32
- metadata/ingestion/source/database/mariadb/lineage.py +46 -0
- metadata/ingestion/source/database/mariadb/service_spec.py +4 -0
- metadata/ingestion/source/database/mongodb/service_spec.py +7 -0
- metadata/ingestion/source/database/mssql/lineage.py +51 -2
- metadata/ingestion/source/database/mssql/metadata.py +2 -44
- metadata/ingestion/source/database/mssql/service_spec.py +10 -0
- metadata/ingestion/source/database/mysql/lineage.py +46 -0
- metadata/ingestion/source/database/mysql/service_spec.py +4 -0
- metadata/ingestion/source/database/oracle/lineage.py +28 -1
- metadata/ingestion/source/database/oracle/metadata.py +2 -23
- metadata/ingestion/source/database/oracle/service_spec.py +10 -0
- metadata/ingestion/source/database/pinotdb/lineage.py +46 -0
- metadata/ingestion/source/database/pinotdb/service_spec.py +4 -0
- metadata/ingestion/source/database/postgres/metadata.py +4 -13
- metadata/ingestion/source/database/postgres/service_spec.py +10 -0
- metadata/ingestion/source/database/postgres/utils.py +26 -0
- metadata/ingestion/source/database/presto/service_spec.py +4 -0
- metadata/ingestion/source/database/query/service_spec.py +9 -0
- metadata/ingestion/source/database/query_parser_source.py +1 -0
- metadata/ingestion/source/database/redshift/connection.py +9 -2
- metadata/ingestion/source/database/redshift/lineage.py +27 -3
- metadata/ingestion/source/database/redshift/metadata.py +2 -27
- metadata/ingestion/source/database/redshift/profiler/__init__.py +0 -0
- metadata/ingestion/source/database/redshift/profiler/profiler.py +14 -0
- metadata/ingestion/source/database/redshift/profiler/system.py +148 -0
- metadata/ingestion/source/database/redshift/queries.py +99 -8
- metadata/ingestion/source/database/redshift/service_spec.py +14 -0
- metadata/ingestion/source/database/redshift/utils.py +3 -3
- metadata/ingestion/source/database/salesforce/metadata.py +1 -12
- metadata/ingestion/source/database/salesforce/service_spec.py +4 -0
- metadata/ingestion/source/database/sample_data.py +137 -34
- metadata/ingestion/source/database/saperp/service_spec.py +4 -0
- metadata/ingestion/source/database/saphana/service_spec.py +7 -0
- metadata/ingestion/source/database/sas/metadata.py +1 -10
- metadata/ingestion/source/database/sas/service_spec.py +4 -0
- metadata/ingestion/source/database/singlestore/lineage.py +46 -0
- metadata/ingestion/source/database/singlestore/service_spec.py +9 -0
- metadata/ingestion/source/database/snowflake/connection.py +6 -1
- metadata/ingestion/source/database/snowflake/lineage.py +31 -2
- metadata/ingestion/source/database/snowflake/metadata.py +1 -24
- metadata/ingestion/source/database/snowflake/models.py +50 -1
- metadata/ingestion/source/database/snowflake/profiler/__init__.py +0 -0
- metadata/ingestion/source/database/snowflake/profiler/profiler.py +26 -0
- metadata/ingestion/source/database/snowflake/profiler/system.py +436 -0
- metadata/ingestion/source/database/snowflake/queries.py +27 -0
- metadata/ingestion/source/database/snowflake/service_spec.py +14 -0
- metadata/ingestion/source/database/sql_column_handler.py +26 -0
- metadata/ingestion/source/database/sqlite/lineage.py +46 -0
- metadata/ingestion/source/database/sqlite/service_spec.py +4 -0
- metadata/ingestion/source/database/stored_procedures_mixin.py +78 -37
- metadata/ingestion/source/database/teradata/lineage.py +46 -0
- metadata/ingestion/source/database/teradata/service_spec.py +4 -0
- metadata/ingestion/source/database/trino/connection.py +60 -23
- metadata/ingestion/source/database/trino/profiler/__init__.py +0 -0
- metadata/ingestion/source/database/trino/profiler/system_tables_profiler.py +167 -0
- metadata/ingestion/source/database/trino/service_spec.py +14 -0
- metadata/ingestion/source/database/unitycatalog/metadata.py +3 -24
- metadata/ingestion/source/database/unitycatalog/service_spec.py +18 -0
- metadata/ingestion/source/database/usage_source.py +4 -1
- metadata/ingestion/source/database/vertica/service_spec.py +10 -0
- metadata/ingestion/source/messaging/kafka/service_spec.py +4 -0
- metadata/ingestion/source/messaging/kinesis/service_spec.py +4 -0
- metadata/ingestion/source/messaging/redpanda/service_spec.py +4 -0
- metadata/ingestion/source/metadata/alationsink/service_spec.py +4 -0
- metadata/ingestion/source/metadata/amundsen/service_spec.py +4 -0
- metadata/ingestion/source/metadata/atlas/service_spec.py +4 -0
- metadata/ingestion/source/mlmodel/mlflow/service_spec.py +4 -0
- metadata/ingestion/source/mlmodel/sagemaker/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/airbyte/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/airflow/metadata.py +36 -2
- metadata/ingestion/source/pipeline/airflow/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/dagster/metadata.py +3 -1
- metadata/ingestion/source/pipeline/dagster/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/databrickspipeline/service_spec.py +6 -0
- metadata/ingestion/source/pipeline/dbtcloud/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/domopipeline/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/fivetran/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/flink/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/gluepipeline/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/kafkaconnect/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/nifi/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/openlineage/service_spec.py +4 -0
- metadata/ingestion/source/pipeline/pipeline_service.py +3 -1
- metadata/ingestion/source/pipeline/spline/service_spec.py +4 -0
- metadata/ingestion/source/search/elasticsearch/service_spec.py +4 -0
- metadata/ingestion/source/storage/gcs/metadata.py +2 -2
- metadata/ingestion/source/storage/gcs/service_spec.py +4 -0
- metadata/ingestion/source/storage/s3/service_spec.py +4 -0
- metadata/mixins/sqalchemy/sqa_mixin.py +2 -1
- metadata/parsers/avro_parser.py +51 -16
- metadata/parsers/json_schema_parser.py +45 -16
- metadata/pii/scanners/ner_scanner.py +2 -1
- metadata/profiler/api/models.py +5 -0
- metadata/profiler/interface/profiler_interface.py +26 -8
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +5 -3
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +32 -21
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +3 -3
- metadata/profiler/interface/sqlalchemy/stored_statistics_profiler.py +147 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +7 -2
- metadata/profiler/metrics/system/system.py +69 -374
- metadata/profiler/orm/converter/base.py +2 -1
- metadata/profiler/orm/converter/bigquery/converter.py +1 -1
- metadata/profiler/orm/functions/count.py +9 -0
- metadata/profiler/orm/functions/md5.py +39 -0
- metadata/profiler/orm/functions/substr.py +32 -0
- metadata/profiler/orm/functions/table_metric_computer.py +1 -1
- metadata/profiler/orm/functions/unique_count.py +6 -0
- metadata/profiler/orm/registry.py +27 -2
- metadata/profiler/processor/core.py +8 -4
- metadata/profiler/processor/processor.py +1 -1
- metadata/profiler/processor/sampler/sqlalchemy/snowflake/sampler.py +28 -5
- metadata/profiler/source/{base → database/base}/profiler_source.py +20 -23
- metadata/profiler/source/{bigquery → database/bigquery}/profiler_source.py +1 -1
- metadata/profiler/source/{databricks → database/databricks}/profiler_source.py +4 -4
- metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/first_quartile.py +1 -1
- metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/median.py +1 -1
- metadata/profiler/source/{mariadb → database/mariadb}/metrics/window/third_quartile.py +1 -1
- metadata/profiler/source/{single_store → database/single_store}/metrics/window/first_quartile.py +3 -1
- metadata/profiler/source/{single_store → database/single_store}/metrics/window/median.py +3 -1
- metadata/profiler/source/{single_store → database/single_store}/metrics/window/third_quartile.py +3 -1
- metadata/profiler/source/fetcher/entity_fetcher.py +62 -0
- metadata/profiler/source/fetcher/fetcher_strategy.py +301 -0
- metadata/profiler/source/fetcher/profiler_source_factory.py +89 -0
- metadata/profiler/source/metadata.py +16 -201
- metadata/profiler/source/metadata_ext.py +23 -18
- metadata/profiler/source/model.py +29 -0
- metadata/utils/class_helper.py +5 -0
- metadata/utils/collaborative_super.py +28 -0
- metadata/utils/constants.py +2 -0
- metadata/utils/constraints.py +65 -0
- metadata/utils/dict.py +8 -0
- metadata/utils/dispatch.py +1 -53
- metadata/utils/entity_link.py +8 -2
- metadata/utils/entity_utils.py +93 -0
- metadata/utils/filters.py +15 -0
- metadata/utils/fqn.py +15 -0
- metadata/utils/helpers.py +2 -0
- metadata/utils/importer.py +12 -24
- metadata/utils/logger.py +23 -2
- metadata/utils/lru_cache.py +76 -15
- metadata/utils/profiler_utils.py +1 -9
- metadata/utils/service_spec/__init__.py +5 -0
- metadata/utils/service_spec/default.py +15 -0
- metadata/utils/service_spec/service_spec.py +99 -0
- metadata/utils/ssl_manager.py +33 -0
- metadata/utils/time_utils.py +33 -5
- metadata/workflow/application.py +7 -36
- metadata/workflow/base.py +47 -17
- metadata/workflow/ingestion.py +6 -38
- metadata/workflow/workflow_output_handler.py +11 -8
- metadata/workflow/workflow_status_mixin.py +0 -2
- openmetadata_ingestion-1.6.0.0rc1.dist-info/LICENSE +114 -0
- {openmetadata_ingestion-1.5.11.0.dist-info → openmetadata_ingestion-1.6.0.0rc1.dist-info}/METADATA +499 -578
- {openmetadata_ingestion-1.5.11.0.dist-info → openmetadata_ingestion-1.6.0.0rc1.dist-info}/RECORD +908 -728
- {openmetadata_ingestion-1.5.11.0.dist-info → openmetadata_ingestion-1.6.0.0rc1.dist-info}/entry_points.txt +3 -0
- metadata/profiler/interface/profiler_interface_factory.py +0 -107
- metadata/profiler/metrics/system/queries/bigquery.py +0 -54
- metadata/profiler/metrics/system/queries/redshift.py +0 -103
- metadata/profiler/metrics/system/queries/snowflake.py +0 -191
- metadata/profiler/source/profiler_source_factory.py +0 -54
- openmetadata_ingestion-1.5.11.0.dist-info/LICENSE +0 -201
- /metadata/profiler/source/{bigquery → database/bigquery}/type_mapper.py +0 -0
- /metadata/profiler/source/{mariadb → database/mariadb}/functions/median.py +0 -0
- /metadata/profiler/source/{single_store → database/single_store}/functions/median.py +0 -0
- {openmetadata_ingestion-1.5.11.0.dist-info → openmetadata_ingestion-1.6.0.0rc1.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.5.11.0.dist-info → openmetadata_ingestion-1.6.0.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
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=import-outside-toplevel
|
|
12
|
+
"""
|
|
13
|
+
Factory class for creating profiler source objects
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from typing import Callable, Dict, Type
|
|
17
|
+
|
|
18
|
+
from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
|
|
19
|
+
BigqueryType,
|
|
20
|
+
)
|
|
21
|
+
from metadata.generated.schema.entity.services.connections.database.databricksConnection import (
|
|
22
|
+
DatabricksType,
|
|
23
|
+
)
|
|
24
|
+
from metadata.profiler.source.profiler_source_interface import ProfilerSourceInterface
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ProfilerSourceFactory:
|
|
28
|
+
"""Creational factory for profiler source objects"""
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
self._source_type: Dict[str, Callable[[], Type[ProfilerSourceInterface]]] = {
|
|
32
|
+
"base": self.base
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
def register_source(self, type_: str, source_fn):
|
|
36
|
+
"""Register a new source type"""
|
|
37
|
+
self._source_type[type_] = source_fn
|
|
38
|
+
|
|
39
|
+
def register_many_sources(
|
|
40
|
+
self, source_dict: Dict[str, Callable[[], Type[ProfilerSourceInterface]]]
|
|
41
|
+
):
|
|
42
|
+
"""Register multiple source types at once"""
|
|
43
|
+
for type_, source_fn in source_dict.items():
|
|
44
|
+
self.register_source(type_, source_fn)
|
|
45
|
+
|
|
46
|
+
def create(self, type_: str, *args, **kwargs) -> ProfilerSourceInterface:
|
|
47
|
+
"""Create source object based on source type"""
|
|
48
|
+
source_fn = self._source_type.get(type_)
|
|
49
|
+
if not source_fn:
|
|
50
|
+
source_fn = self._source_type["base"]
|
|
51
|
+
|
|
52
|
+
source_class = source_fn()
|
|
53
|
+
return source_class(*args, **kwargs)
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def base() -> Type[ProfilerSourceInterface]:
|
|
57
|
+
"""Lazy loading of the base source"""
|
|
58
|
+
from metadata.profiler.source.database.base.profiler_source import (
|
|
59
|
+
ProfilerSource,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
return ProfilerSource
|
|
63
|
+
|
|
64
|
+
@staticmethod
|
|
65
|
+
def bigquery() -> Type[ProfilerSourceInterface]:
|
|
66
|
+
"""Lazy loading of the BigQuery source"""
|
|
67
|
+
from metadata.profiler.source.database.bigquery.profiler_source import (
|
|
68
|
+
BigQueryProfilerSource,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
return BigQueryProfilerSource
|
|
72
|
+
|
|
73
|
+
@staticmethod
|
|
74
|
+
def databricks() -> Type[ProfilerSourceInterface]:
|
|
75
|
+
"""Lazy loading of the Databricks source"""
|
|
76
|
+
from metadata.profiler.source.database.databricks.profiler_source import (
|
|
77
|
+
DataBricksProfilerSource,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return DataBricksProfilerSource
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
source = {
|
|
84
|
+
BigqueryType.BigQuery.value.lower(): ProfilerSourceFactory.bigquery,
|
|
85
|
+
DatabricksType.Databricks.value.lower(): ProfilerSourceFactory.databricks,
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
profiler_source_factory = ProfilerSourceFactory()
|
|
89
|
+
profiler_source_factory.register_many_sources(source)
|
|
@@ -11,18 +11,9 @@
|
|
|
11
11
|
"""
|
|
12
12
|
OpenMetadata source for the profiler
|
|
13
13
|
"""
|
|
14
|
-
import traceback
|
|
15
14
|
from typing import Iterable, List, Optional, cast
|
|
16
15
|
|
|
17
|
-
from pydantic import BaseModel, ConfigDict
|
|
18
|
-
|
|
19
|
-
from metadata.generated.schema.entity.data.database import Database
|
|
20
|
-
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
21
|
-
from metadata.generated.schema.entity.data.table import Table, TableType
|
|
22
16
|
from metadata.generated.schema.entity.services.databaseService import DatabaseService
|
|
23
|
-
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
24
|
-
StackTraceError,
|
|
25
|
-
)
|
|
26
17
|
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
27
18
|
DatabaseServiceProfilerPipeline,
|
|
28
19
|
)
|
|
@@ -34,32 +25,16 @@ from metadata.ingestion.api.parser import parse_workflow_config_gracefully
|
|
|
34
25
|
from metadata.ingestion.api.step import Step
|
|
35
26
|
from metadata.ingestion.api.steps import Source
|
|
36
27
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
37
|
-
from metadata.profiler.source.
|
|
38
|
-
from metadata.profiler.source.
|
|
39
|
-
from metadata.utils import fqn
|
|
40
|
-
from metadata.utils.filters import filter_by_database, filter_by_schema, filter_by_table
|
|
28
|
+
from metadata.profiler.source.fetcher.entity_fetcher import EntityFetcher
|
|
29
|
+
from metadata.profiler.source.model import ProfilerSourceAndEntity
|
|
41
30
|
from metadata.utils.logger import profiler_logger
|
|
42
31
|
|
|
43
32
|
logger = profiler_logger()
|
|
44
33
|
|
|
45
|
-
|
|
46
34
|
TABLE_FIELDS = ["tableProfilerConfig", "columns", "customMetrics"]
|
|
47
35
|
TAGS_FIELD = ["tags"]
|
|
48
36
|
|
|
49
37
|
|
|
50
|
-
class ProfilerSourceAndEntity(BaseModel):
|
|
51
|
-
"""Return class for the OpenMetadata Profiler Source"""
|
|
52
|
-
|
|
53
|
-
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
|
|
54
|
-
|
|
55
|
-
profiler_source: ProfilerSource
|
|
56
|
-
entity: Table
|
|
57
|
-
|
|
58
|
-
def __str__(self):
|
|
59
|
-
"""Return the information of the table being profiler"""
|
|
60
|
-
return f"Table [{self.entity.name.root}]"
|
|
61
|
-
|
|
62
|
-
|
|
63
38
|
class OpenMetadataSource(Source):
|
|
64
39
|
"""
|
|
65
40
|
This source lists and filters the entities that need
|
|
@@ -70,20 +45,16 @@ class OpenMetadataSource(Source):
|
|
|
70
45
|
We do this here as well.
|
|
71
46
|
"""
|
|
72
47
|
|
|
73
|
-
def init_steps(self):
|
|
74
|
-
super().__init__()
|
|
75
|
-
|
|
76
48
|
@property
|
|
77
49
|
def name(self) -> str:
|
|
78
50
|
return "OpenMetadata Service"
|
|
79
51
|
|
|
80
|
-
# pylint: disable=super-init-not-called
|
|
81
52
|
def __init__(
|
|
82
53
|
self,
|
|
83
54
|
config: OpenMetadataWorkflowConfig,
|
|
84
55
|
metadata: OpenMetadata,
|
|
85
56
|
):
|
|
86
|
-
|
|
57
|
+
super().__init__()
|
|
87
58
|
|
|
88
59
|
self.config = config
|
|
89
60
|
self.metadata = metadata
|
|
@@ -107,10 +78,18 @@ class OpenMetadataSource(Source):
|
|
|
107
78
|
f":{self.config.source.type.lower()}"
|
|
108
79
|
)
|
|
109
80
|
|
|
81
|
+
def _get_fields(self) -> List[str]:
|
|
82
|
+
"""Get the fields required to process the tables"""
|
|
83
|
+
return (
|
|
84
|
+
TABLE_FIELDS
|
|
85
|
+
if not self.source_config.processPiiSensitive
|
|
86
|
+
else TABLE_FIELDS + TAGS_FIELD
|
|
87
|
+
)
|
|
88
|
+
|
|
110
89
|
def _validate_service_name(self):
|
|
111
90
|
"""Validate service name exists in OpenMetadata"""
|
|
112
91
|
return self.metadata.get_by_name(
|
|
113
|
-
entity=DatabaseService, fqn=self.config.source.serviceName
|
|
92
|
+
entity=DatabaseService, fqn=self.config.source.serviceName # type: ignore
|
|
114
93
|
)
|
|
115
94
|
|
|
116
95
|
def prepare(self):
|
|
@@ -125,30 +104,10 @@ class OpenMetadataSource(Source):
|
|
|
125
104
|
|
|
126
105
|
def _iter(self, *_, **__) -> Iterable[Either[ProfilerSourceAndEntity]]:
|
|
127
106
|
global_profiler_config = self.metadata.get_profiler_config_settings()
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
self.config,
|
|
133
|
-
database,
|
|
134
|
-
self.metadata,
|
|
135
|
-
global_profiler_config,
|
|
136
|
-
)
|
|
137
|
-
for entity in self.get_table_entities(database=database):
|
|
138
|
-
yield Either(
|
|
139
|
-
right=ProfilerSourceAndEntity(
|
|
140
|
-
profiler_source=profiler_source,
|
|
141
|
-
entity=entity,
|
|
142
|
-
)
|
|
143
|
-
)
|
|
144
|
-
except Exception as exc:
|
|
145
|
-
yield Either(
|
|
146
|
-
left=StackTraceError(
|
|
147
|
-
name=database.fullyQualifiedName.root,
|
|
148
|
-
error=f"Error listing source and entities for database due to [{exc}]",
|
|
149
|
-
stackTrace=traceback.format_exc(),
|
|
150
|
-
)
|
|
151
|
-
)
|
|
107
|
+
entity_fetcher = EntityFetcher(
|
|
108
|
+
self.config, self.metadata, global_profiler_config, self.status
|
|
109
|
+
)
|
|
110
|
+
yield from entity_fetcher.fetch()
|
|
152
111
|
|
|
153
112
|
@classmethod
|
|
154
113
|
def create(
|
|
@@ -160,149 +119,5 @@ class OpenMetadataSource(Source):
|
|
|
160
119
|
config = parse_workflow_config_gracefully(config_dict)
|
|
161
120
|
return cls(config=config, metadata=metadata)
|
|
162
121
|
|
|
163
|
-
def filter_databases(self, database: Database) -> Optional[Database]:
|
|
164
|
-
"""Returns filtered database entities"""
|
|
165
|
-
database_fqn = fqn.build(
|
|
166
|
-
self.metadata,
|
|
167
|
-
entity_type=Database,
|
|
168
|
-
service_name=self.config.source.serviceName,
|
|
169
|
-
database_name=database.name.root,
|
|
170
|
-
)
|
|
171
|
-
if filter_by_database(
|
|
172
|
-
self.source_config.databaseFilterPattern,
|
|
173
|
-
database_fqn
|
|
174
|
-
if self.source_config.useFqnForFiltering
|
|
175
|
-
else database.name.root,
|
|
176
|
-
):
|
|
177
|
-
self.status.filter(database.name.root, "Database pattern not allowed")
|
|
178
|
-
return None
|
|
179
|
-
return database
|
|
180
|
-
|
|
181
|
-
def filter_entities(self, tables: Iterable[Table]) -> Iterable[Table]:
|
|
182
|
-
"""
|
|
183
|
-
From a list of tables, apply the SQLSourceConfig
|
|
184
|
-
filter patterns.
|
|
185
|
-
|
|
186
|
-
We will update the status on the SQLSource Status.
|
|
187
|
-
"""
|
|
188
|
-
for table in tables:
|
|
189
|
-
try:
|
|
190
|
-
schema_fqn = fqn.build(
|
|
191
|
-
self.metadata,
|
|
192
|
-
entity_type=DatabaseSchema,
|
|
193
|
-
service_name=self.config.source.serviceName,
|
|
194
|
-
database_name=table.database.name,
|
|
195
|
-
schema_name=table.databaseSchema.name,
|
|
196
|
-
)
|
|
197
|
-
if filter_by_schema(
|
|
198
|
-
self.source_config.schemaFilterPattern,
|
|
199
|
-
schema_fqn
|
|
200
|
-
if self.source_config.useFqnForFiltering
|
|
201
|
-
else table.databaseSchema.name, # type: ignore
|
|
202
|
-
):
|
|
203
|
-
self.status.filter(
|
|
204
|
-
f"Schema pattern not allowed: {table.fullyQualifiedName.root}",
|
|
205
|
-
"Schema pattern not allowed",
|
|
206
|
-
)
|
|
207
|
-
continue
|
|
208
|
-
table_fqn = fqn.build(
|
|
209
|
-
self.metadata,
|
|
210
|
-
entity_type=Table,
|
|
211
|
-
service_name=self.config.source.serviceName,
|
|
212
|
-
database_name=table.database.name,
|
|
213
|
-
schema_name=table.databaseSchema.name,
|
|
214
|
-
table_name=table.name.root,
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
if filter_by_table(
|
|
218
|
-
self.source_config.tableFilterPattern,
|
|
219
|
-
table_fqn
|
|
220
|
-
if self.source_config.useFqnForFiltering
|
|
221
|
-
else table.name.root,
|
|
222
|
-
):
|
|
223
|
-
self.status.filter(
|
|
224
|
-
f"Table pattern not allowed: {table.fullyQualifiedName.root}",
|
|
225
|
-
"Table pattern not allowed",
|
|
226
|
-
)
|
|
227
|
-
continue
|
|
228
|
-
if (
|
|
229
|
-
table.tableType == TableType.View
|
|
230
|
-
and not self.source_config.includeViews
|
|
231
|
-
):
|
|
232
|
-
self.status.filter(
|
|
233
|
-
table.fullyQualifiedName.root,
|
|
234
|
-
"View filtered out",
|
|
235
|
-
)
|
|
236
|
-
continue
|
|
237
|
-
yield table
|
|
238
|
-
except Exception as exc:
|
|
239
|
-
self.status.failed(
|
|
240
|
-
StackTraceError(
|
|
241
|
-
name=table.fullyQualifiedName.root,
|
|
242
|
-
error=f"Unexpected error filtering entities for table [{table}]: {exc}",
|
|
243
|
-
stackTrace=traceback.format_exc(),
|
|
244
|
-
)
|
|
245
|
-
)
|
|
246
|
-
|
|
247
|
-
def get_database_entities(self):
|
|
248
|
-
"""List all databases in service"""
|
|
249
|
-
|
|
250
|
-
databases = [
|
|
251
|
-
self.filter_databases(database)
|
|
252
|
-
for database in self.metadata.list_all_entities(
|
|
253
|
-
entity=Database,
|
|
254
|
-
params={"service": self.config.source.serviceName},
|
|
255
|
-
)
|
|
256
|
-
if self.filter_databases(database)
|
|
257
|
-
]
|
|
258
|
-
|
|
259
|
-
if not databases:
|
|
260
|
-
raise ValueError(
|
|
261
|
-
"databaseFilterPattern returned 0 result. At least 1 database must be returned by the filter pattern."
|
|
262
|
-
f"\n\t- includes: {self.source_config.databaseFilterPattern.includes if self.source_config.databaseFilterPattern else None}" # pylint: disable=line-too-long
|
|
263
|
-
f"\n\t- excludes: {self.source_config.databaseFilterPattern.excludes if self.source_config.databaseFilterPattern else None}" # pylint: disable=line-too-long
|
|
264
|
-
)
|
|
265
|
-
|
|
266
|
-
return databases
|
|
267
|
-
|
|
268
|
-
def _get_fields(self) -> List[str]:
|
|
269
|
-
"""Get the fields required to process the tables"""
|
|
270
|
-
return (
|
|
271
|
-
TABLE_FIELDS
|
|
272
|
-
if not self.source_config.processPiiSensitive
|
|
273
|
-
else TABLE_FIELDS + TAGS_FIELD
|
|
274
|
-
)
|
|
275
|
-
|
|
276
|
-
def get_table_entities(self, database):
|
|
277
|
-
"""
|
|
278
|
-
List and filter OpenMetadata tables based on the
|
|
279
|
-
source configuration.
|
|
280
|
-
|
|
281
|
-
The listing will be based on the entities from the
|
|
282
|
-
informed service name in the source configuration.
|
|
283
|
-
|
|
284
|
-
Note that users can specify `table_filter_pattern` to
|
|
285
|
-
either be `includes` or `excludes`. This means
|
|
286
|
-
that we will either what is specified in `includes`
|
|
287
|
-
or we will use everything but the tables excluded.
|
|
288
|
-
|
|
289
|
-
Same with `schema_filter_pattern`.
|
|
290
|
-
"""
|
|
291
|
-
tables = self.metadata.list_all_entities(
|
|
292
|
-
entity=Table,
|
|
293
|
-
fields=self._get_fields(),
|
|
294
|
-
params={
|
|
295
|
-
"service": self.config.source.serviceName,
|
|
296
|
-
"database": fqn.build(
|
|
297
|
-
self.metadata,
|
|
298
|
-
entity_type=Database,
|
|
299
|
-
service_name=self.config.source.serviceName,
|
|
300
|
-
database_name=database.name.root,
|
|
301
|
-
),
|
|
302
|
-
}, # type: ignore
|
|
303
|
-
)
|
|
304
|
-
|
|
305
|
-
yield from self.filter_entities(tables)
|
|
306
|
-
|
|
307
122
|
def close(self) -> None:
|
|
308
123
|
"""Nothing to close"""
|
|
@@ -21,7 +21,7 @@ and sample data for that identified entity.
|
|
|
21
21
|
"""
|
|
22
22
|
import traceback
|
|
23
23
|
from copy import deepcopy
|
|
24
|
-
from typing import Iterable, cast
|
|
24
|
+
from typing import Iterable, Type, cast
|
|
25
25
|
|
|
26
26
|
from sqlalchemy.inspection import inspect
|
|
27
27
|
|
|
@@ -29,6 +29,7 @@ from metadata.generated.schema.entity.data.database import Database
|
|
|
29
29
|
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
30
30
|
StackTraceError,
|
|
31
31
|
)
|
|
32
|
+
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
32
33
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
33
34
|
DatabaseServiceMetadataPipeline,
|
|
34
35
|
)
|
|
@@ -40,16 +41,16 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
40
41
|
)
|
|
41
42
|
from metadata.ingestion.api.models import Either
|
|
42
43
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
43
|
-
from metadata.profiler.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
)
|
|
47
|
-
from metadata.profiler.source.profiler_source_factory import profiler_source_factory
|
|
44
|
+
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
45
|
+
from metadata.profiler.source.metadata import OpenMetadataSource
|
|
46
|
+
from metadata.profiler.source.model import ProfilerSourceAndEntity
|
|
48
47
|
from metadata.utils import fqn
|
|
49
48
|
from metadata.utils.class_helper import get_service_type_from_source_type
|
|
50
49
|
from metadata.utils.filters import filter_by_database, filter_by_schema, filter_by_table
|
|
51
|
-
from metadata.utils.importer import
|
|
50
|
+
from metadata.utils.importer import import_from_module
|
|
52
51
|
from metadata.utils.logger import profiler_logger
|
|
52
|
+
from metadata.utils.service_spec import BaseSpec
|
|
53
|
+
from metadata.utils.service_spec.service_spec import import_source_class
|
|
53
54
|
from metadata.utils.ssl_manager import get_ssl_connection
|
|
54
55
|
|
|
55
56
|
logger = profiler_logger()
|
|
@@ -65,17 +66,12 @@ class OpenMetadataSourceExt(OpenMetadataSource):
|
|
|
65
66
|
We do this here as well.
|
|
66
67
|
"""
|
|
67
68
|
|
|
68
|
-
# pylint: disable=super-init-not-called
|
|
69
69
|
def __init__(
|
|
70
70
|
self,
|
|
71
71
|
config: OpenMetadataWorkflowConfig,
|
|
72
72
|
metadata: OpenMetadata,
|
|
73
73
|
):
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
self.config = config
|
|
77
|
-
self.metadata = metadata
|
|
78
|
-
self.test_connection()
|
|
74
|
+
super().__init__(config, metadata)
|
|
79
75
|
|
|
80
76
|
# Init and type the source config
|
|
81
77
|
self.service_connection = self.config.source.serviceConnection.root.config
|
|
@@ -145,8 +141,7 @@ class OpenMetadataSourceExt(OpenMetadataSource):
|
|
|
145
141
|
)
|
|
146
142
|
continue
|
|
147
143
|
|
|
148
|
-
profiler_source =
|
|
149
|
-
self.config.source.type.lower(),
|
|
144
|
+
profiler_source = self.import_profiler_interface()(
|
|
150
145
|
self.config,
|
|
151
146
|
database_entity,
|
|
152
147
|
self.metadata,
|
|
@@ -174,6 +169,14 @@ class OpenMetadataSourceExt(OpenMetadataSource):
|
|
|
174
169
|
continue
|
|
175
170
|
yield table_name
|
|
176
171
|
|
|
172
|
+
def import_profiler_interface(self) -> Type[ProfilerInterface]:
|
|
173
|
+
class_path = BaseSpec.get_for_source(
|
|
174
|
+
ServiceType.Database,
|
|
175
|
+
source_type=self.config.source.type.lower(),
|
|
176
|
+
).profiler_class
|
|
177
|
+
profiler_source_class = import_from_module(class_path)
|
|
178
|
+
return cast(Type[ProfilerInterface], profiler_source_class)
|
|
179
|
+
|
|
177
180
|
def get_schema_names(self) -> Iterable[str]:
|
|
178
181
|
if self.service_connection.__dict__.get("databaseSchema"):
|
|
179
182
|
yield self.service_connection.databaseSchema
|
|
@@ -206,9 +209,11 @@ class OpenMetadataSourceExt(OpenMetadataSource):
|
|
|
206
209
|
)
|
|
207
210
|
if filter_by_database(
|
|
208
211
|
self.source_config.databaseFilterPattern,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
+
(
|
|
213
|
+
database_fqn
|
|
214
|
+
if self.source_config.useFqnForFiltering
|
|
215
|
+
else database
|
|
216
|
+
),
|
|
212
217
|
):
|
|
213
218
|
self.status.filter(database, "Database pattern not allowed")
|
|
214
219
|
continue
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
"""Model for the OpenMetadata Profiler Source"""
|
|
12
|
+
from pydantic import ConfigDict
|
|
13
|
+
|
|
14
|
+
from metadata.ingestion.models.custom_pydantic import BaseModel
|
|
15
|
+
from metadata.ingestion.models.entity_interface import EntityInterface
|
|
16
|
+
from metadata.profiler.source.profiler_source_interface import ProfilerSourceInterface
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ProfilerSourceAndEntity(BaseModel):
|
|
20
|
+
"""Return class for the OpenMetadata Profiler Source"""
|
|
21
|
+
|
|
22
|
+
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
|
|
23
|
+
|
|
24
|
+
profiler_source: ProfilerSourceInterface
|
|
25
|
+
entity: EntityInterface
|
|
26
|
+
|
|
27
|
+
def __str__(self):
|
|
28
|
+
"""Return the information of the table being profiler"""
|
|
29
|
+
return f"Table [{self.entity.name.root}]"
|
metadata/utils/class_helper.py
CHANGED
|
@@ -22,6 +22,9 @@ from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipel
|
|
|
22
22
|
PipelineType,
|
|
23
23
|
)
|
|
24
24
|
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
25
|
+
from metadata.generated.schema.metadataIngestion.apiServiceMetadataPipeline import (
|
|
26
|
+
ApiServiceMetadataPipeline,
|
|
27
|
+
)
|
|
25
28
|
from metadata.generated.schema.metadataIngestion.dashboardServiceMetadataPipeline import (
|
|
26
29
|
DashboardServiceMetadataPipeline,
|
|
27
30
|
)
|
|
@@ -65,6 +68,7 @@ from metadata.generated.schema.metadataIngestion.testSuitePipeline import (
|
|
|
65
68
|
from metadata.generated.schema.metadataIngestion.workflow import SourceConfig
|
|
66
69
|
|
|
67
70
|
SERVICE_TYPE_REF = {
|
|
71
|
+
ServiceType.Api.value: "apiService",
|
|
68
72
|
ServiceType.Database.value: "databaseService",
|
|
69
73
|
ServiceType.Dashboard.value: "dashboardService",
|
|
70
74
|
ServiceType.Pipeline.value: "pipelineService",
|
|
@@ -76,6 +80,7 @@ SERVICE_TYPE_REF = {
|
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
SOURCE_CONFIG_TYPE_INGESTION = {
|
|
83
|
+
ApiServiceMetadataPipeline.__name__: PipelineType.metadata,
|
|
79
84
|
DatabaseServiceMetadataPipeline.__name__: PipelineType.metadata,
|
|
80
85
|
DatabaseServiceQueryUsagePipeline.__name__: PipelineType.usage,
|
|
81
86
|
DatabaseServiceQueryLineagePipeline.__name__: PipelineType.lineage,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module provides utilties for building a collaborative constructor library.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from abc import ABC
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Root:
|
|
9
|
+
"""Root class for any class that needs to implement a colllaborative constructor but
|
|
10
|
+
might end up at the end of the inheritance chain. Since python's object.__init__ is not
|
|
11
|
+
a collaborative constructor, we need to have a root class that has a collaborative constructor.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
__terminal__ = {object, ABC}
|
|
15
|
+
|
|
16
|
+
def __init__(self, *args, **kwargs):
|
|
17
|
+
"""Collaborative constructor"""
|
|
18
|
+
super_class = None
|
|
19
|
+
for cls, super_class in zip(
|
|
20
|
+
self.__class__.mro()[:-1], self.__class__.mro()[1:]
|
|
21
|
+
):
|
|
22
|
+
if cls is Root:
|
|
23
|
+
break
|
|
24
|
+
for cls in self.__terminal__:
|
|
25
|
+
if super_class is cls:
|
|
26
|
+
break
|
|
27
|
+
else:
|
|
28
|
+
super().__init__(*args, **kwargs)
|
metadata/utils/constants.py
CHANGED
|
@@ -26,6 +26,7 @@ from metadata.generated.schema.entity.data.table import Table
|
|
|
26
26
|
from metadata.generated.schema.entity.data.topic import Topic
|
|
27
27
|
from metadata.generated.schema.entity.domains.dataProduct import DataProduct
|
|
28
28
|
from metadata.generated.schema.entity.domains.domain import Domain
|
|
29
|
+
from metadata.generated.schema.entity.services.apiService import ApiService
|
|
29
30
|
from metadata.generated.schema.entity.services.dashboardService import DashboardService
|
|
30
31
|
from metadata.generated.schema.entity.services.databaseService import DatabaseService
|
|
31
32
|
from metadata.generated.schema.entity.services.messagingService import MessagingService
|
|
@@ -77,6 +78,7 @@ ENTITY_REFERENCE_CLASS_MAP = {
|
|
|
77
78
|
# Service Entities
|
|
78
79
|
"databaseService": DatabaseService,
|
|
79
80
|
"messagingService": MessagingService,
|
|
81
|
+
"apiService": ApiService,
|
|
80
82
|
"dashboardService": DashboardService,
|
|
81
83
|
"pipelineService": PipelineService,
|
|
82
84
|
"storageService": StorageService,
|
|
@@ -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
|
+
"""
|
|
13
|
+
Define constraints helper methods useful for the metadata ingestion
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from typing import Dict, List
|
|
17
|
+
|
|
18
|
+
from metadata.generated.schema.entity.data.table import (
|
|
19
|
+
Column,
|
|
20
|
+
ConstraintType,
|
|
21
|
+
RelationshipType,
|
|
22
|
+
)
|
|
23
|
+
from metadata.ingestion.ometa.utils import model_str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _is_column_unique(column: Dict, columns: List[Column]) -> bool:
|
|
27
|
+
"""
|
|
28
|
+
Method to check if the column in unique in the table
|
|
29
|
+
"""
|
|
30
|
+
if column and len(column) > 0:
|
|
31
|
+
constrained_column = column[0]
|
|
32
|
+
for col in columns or []:
|
|
33
|
+
if model_str(col.name) == constrained_column:
|
|
34
|
+
if col.constraint and col.constraint.value in {
|
|
35
|
+
ConstraintType.UNIQUE.value,
|
|
36
|
+
ConstraintType.PRIMARY_KEY.value,
|
|
37
|
+
}:
|
|
38
|
+
return True
|
|
39
|
+
break
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_relationship_type(
|
|
44
|
+
column: Dict, referred_table_columns: List[Column], columns: List[Column]
|
|
45
|
+
) -> str:
|
|
46
|
+
"""
|
|
47
|
+
Determine the type of relationship (one-to-one, one-to-many, etc.)
|
|
48
|
+
"""
|
|
49
|
+
# Check if the column is unique in the current table
|
|
50
|
+
is_unique_in_current_table = _is_column_unique(
|
|
51
|
+
column.get("constrained_columns"), columns
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Check if the referred column is unique in the referred table
|
|
55
|
+
is_unique_in_referred_table = _is_column_unique(
|
|
56
|
+
column.get("referred_columns"), referred_table_columns
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if is_unique_in_current_table and is_unique_in_referred_table:
|
|
60
|
+
return RelationshipType.ONE_TO_ONE
|
|
61
|
+
if is_unique_in_current_table:
|
|
62
|
+
return RelationshipType.ONE_TO_MANY
|
|
63
|
+
if is_unique_in_referred_table:
|
|
64
|
+
return RelationshipType.MANY_TO_ONE
|
|
65
|
+
return RelationshipType.MANY_TO_MANY
|