openmetadata-ingestion 1.5.13.0__py3-none-any.whl → 1.6.0.0rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- _openmetadata_testutils/dict.py +23 -0
- _openmetadata_testutils/pydantic/test_utils.py +22 -2
- _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/classify.py +52 -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/cmd.py +9 -0
- metadata/config/common.py +3 -1
- metadata/data_quality/api/models.py +2 -1
- metadata/data_quality/builders/{i_validator_builder.py → validator_builder.py} +45 -31
- metadata/data_quality/interface/pandas/pandas_test_suite_interface.py +25 -24
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +23 -49
- metadata/data_quality/interface/test_suite_interface.py +36 -52
- metadata/data_quality/processor/test_case_runner.py +9 -9
- metadata/data_quality/runner/base_test_suite_source.py +52 -26
- metadata/data_quality/source/test_suite.py +1 -1
- metadata/data_quality/validations/base_test_handler.py +13 -8
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +4 -2
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueMaxToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueMeanToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueMedianToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueMinToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueStdDevToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesMissingCount.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesSumToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeAtExpectedLocation.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeUnique.py +2 -8
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +1 -1
- metadata/data_quality/validations/models.py +6 -1
- metadata/data_quality/validations/runtime_param_setter/param_setter.py +2 -3
- metadata/data_quality/validations/runtime_param_setter/param_setter_factory.py +45 -17
- metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +26 -16
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +192 -17
- metadata/data_quality/validations/table/sqlalchemy/tableRowInsertedCountToBeBetween.py +2 -2
- metadata/examples/workflows/bigquery_classifier.yaml +56 -0
- metadata/examples/workflows/bigquery_profiler.yaml +1 -2
- metadata/examples/workflows/datafactory.yaml +29 -0
- metadata/examples/workflows/db2_profiler.yaml +1 -2
- metadata/examples/workflows/dbtcloud.yaml +2 -1
- metadata/examples/workflows/matillion.yaml +31 -0
- metadata/examples/workflows/{mstr.yaml → microstrategy.yaml} +3 -2
- metadata/examples/workflows/mysql_profiler.yaml +0 -1
- metadata/examples/workflows/redshift_classifier.yaml +38 -0
- metadata/examples/workflows/redshift_profiler.yaml +2 -3
- 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/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 +8 -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 -14
- 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 +9 -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 +4 -2
- 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/external/slackAppTokenConfiguration.py +22 -0
- 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 +16 -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/microStrategyConnection.py +67 -0
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/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 +3 -2
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +11 -7
- 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 +17 -5
- 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 +8 -5
- 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 +2 -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 +50 -0
- metadata/generated/schema/governance/workflows/workflowInstanceState.py +73 -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/databaseServiceAutoClassificationPipeline.py +127 -0
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -9
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +28 -17
- 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 +9 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +9 -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 +9 -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 +15 -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 -1
- 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/models.py +9 -5
- metadata/ingestion/api/parser.py +14 -0
- metadata/ingestion/lineage/parser.py +4 -6
- metadata/ingestion/lineage/sql_lineage.py +29 -185
- 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/models/patch_request.py +0 -1
- metadata/ingestion/ometa/mixins/es_mixin.py +66 -8
- metadata/ingestion/ometa/models.py +1 -0
- metadata/ingestion/ometa/ometa_api.py +6 -3
- metadata/ingestion/ometa/routes.py +4 -2
- metadata/ingestion/processor/query_parser.py +2 -2
- metadata/ingestion/sink/metadata_rest.py +23 -18
- 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/microstrategy/__init__.py +0 -0
- metadata/ingestion/source/dashboard/{mstr → microstrategy}/client.py +27 -32
- metadata/ingestion/source/dashboard/{mstr → microstrategy}/connection.py +7 -10
- metadata/ingestion/source/dashboard/{mstr → microstrategy}/metadata.py +18 -14
- metadata/ingestion/source/dashboard/{mstr → microstrategy}/models.py +1 -1
- metadata/ingestion/source/dashboard/microstrategy/service_spec.py +6 -0
- metadata/ingestion/source/dashboard/mode/service_spec.py +4 -0
- metadata/ingestion/source/dashboard/powerbi/client.py +1 -2
- 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 +12 -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 +16 -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/{data_quality/builders/sqa_validator_builder.py → ingestion/source/database/couchbase/models.py} +15 -9
- 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 +20 -0
- metadata/ingestion/source/database/datalake/clients/azure_blob.py +0 -3
- metadata/ingestion/source/database/datalake/clients/base.py +10 -1
- metadata/ingestion/source/database/datalake/clients/gcs.py +10 -6
- metadata/ingestion/source/database/datalake/clients/s3.py +0 -3
- metadata/ingestion/source/database/datalake/metadata.py +2 -13
- metadata/ingestion/source/database/datalake/service_spec.py +16 -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/constants.py +4 -0
- metadata/ingestion/source/database/dbt/dbt_config.py +19 -1
- metadata/ingestion/source/database/dbt/dbt_service.py +8 -1
- metadata/ingestion/source/database/dbt/dbt_utils.py +29 -0
- metadata/ingestion/source/database/dbt/metadata.py +73 -7
- metadata/ingestion/source/database/dbt/models.py +2 -0
- 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 +10 -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 +10 -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 +0 -2
- metadata/ingestion/source/database/mysql/queries.py +0 -2
- metadata/ingestion/source/database/mysql/service_spec.py +10 -0
- metadata/ingestion/source/database/mysql/usage.py +0 -2
- 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 +129 -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 +20 -62
- metadata/ingestion/source/database/snowflake/models.py +50 -2
- 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 +28 -22
- metadata/ingestion/source/database/snowflake/service_spec.py +20 -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 -52
- 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 +16 -0
- metadata/ingestion/source/database/unitycatalog/metadata.py +3 -24
- metadata/ingestion/source/database/unitycatalog/service_spec.py +22 -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/connection.py +45 -2
- metadata/ingestion/source/pipeline/airflow/metadata.py +71 -27
- 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/client.py +67 -28
- metadata/ingestion/source/pipeline/dbtcloud/connection.py +1 -3
- metadata/ingestion/source/pipeline/dbtcloud/models.py +1 -1
- 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/client.py +1 -1
- 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/metadata.py +53 -0
- metadata/ingestion/source/search/elasticsearch/service_spec.py +4 -0
- metadata/ingestion/source/search/search_service.py +44 -1
- 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/pandas/pandas_mixin.py +2 -31
- metadata/mixins/sqalchemy/sqa_mixin.py +18 -17
- metadata/parsers/avro_parser.py +51 -16
- metadata/parsers/json_schema_parser.py +45 -16
- metadata/pii/processor.py +10 -9
- metadata/pii/scanners/ner_scanner.py +2 -1
- metadata/profiler/api/models.py +4 -75
- metadata/profiler/config.py +39 -0
- metadata/profiler/interface/nosql/profiler_interface.py +1 -26
- metadata/profiler/interface/pandas/profiler_interface.py +37 -77
- metadata/profiler/interface/profiler_interface.py +25 -279
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +0 -19
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +2 -17
- metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +1 -1
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +7 -5
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +73 -125
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +5 -5
- metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +1 -1
- metadata/profiler/interface/sqlalchemy/stored_statistics_profiler.py +145 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +9 -4
- metadata/profiler/metrics/system/system.py +69 -374
- metadata/profiler/orm/converter/base.py +23 -13
- 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/{data_quality/builders/pandas_validator_builder.py → profiler/orm/functions/substr.py} +13 -10
- metadata/profiler/orm/functions/table_metric_computer.py +6 -5
- metadata/profiler/orm/functions/unique_count.py +6 -0
- metadata/profiler/orm/registry.py +27 -2
- metadata/profiler/processor/core.py +13 -62
- metadata/profiler/processor/handle_partition.py +0 -48
- metadata/profiler/processor/processor.py +1 -1
- metadata/profiler/processor/runner.py +111 -35
- metadata/profiler/processor/sample_data_handler.py +7 -4
- metadata/profiler/source/database/base/profiler_source.py +215 -0
- metadata/profiler/source/{bigquery → database/bigquery}/profiler_source.py +4 -4
- metadata/profiler/source/{databricks → database/databricks}/profiler_source.py +6 -7
- 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/config.py +44 -0
- metadata/profiler/source/fetcher/entity_fetcher.py +62 -0
- metadata/profiler/source/fetcher/fetcher_strategy.py +299 -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/sampler/config.py +237 -0
- metadata/sampler/models.py +106 -0
- metadata/{profiler/processor/sampler → sampler}/nosql/sampler.py +44 -12
- metadata/sampler/pandas/sampler.py +239 -0
- metadata/{utils → sampler}/partition.py +66 -51
- metadata/sampler/processor.py +158 -0
- metadata/sampler/sampler_interface.py +251 -0
- metadata/{profiler/processor/sampler → sampler}/sqlalchemy/azuresql/sampler.py +1 -1
- metadata/{profiler/processor/sampler → sampler}/sqlalchemy/bigquery/sampler.py +55 -26
- metadata/sampler/sqlalchemy/postgres/sampler.py +91 -0
- metadata/{profiler/processor/sampler → sampler}/sqlalchemy/sampler.py +90 -98
- metadata/sampler/sqlalchemy/snowflake/sampler.py +95 -0
- metadata/{profiler/processor/sampler → sampler}/sqlalchemy/trino/sampler.py +5 -3
- metadata/utils/class_helper.py +5 -0
- metadata/utils/collaborative_super.py +28 -0
- metadata/utils/constants.py +65 -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 +3 -2
- metadata/utils/importer.py +12 -24
- metadata/utils/logger.py +31 -1
- metadata/utils/lru_cache.py +76 -15
- metadata/utils/profiler_utils.py +43 -9
- metadata/utils/service_spec/__init__.py +5 -0
- metadata/utils/service_spec/default.py +21 -0
- metadata/utils/service_spec/service_spec.py +146 -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/classification.py +53 -0
- metadata/workflow/ingestion.py +6 -38
- metadata/workflow/profiler.py +1 -17
- metadata/workflow/workflow_output_handler.py +11 -8
- metadata/workflow/workflow_status_mixin.py +0 -2
- openmetadata_ingestion-1.6.0.0rc2.dist-info/LICENSE +114 -0
- {openmetadata_ingestion-1.5.13.0.dist-info → openmetadata_ingestion-1.6.0.0rc2.dist-info}/METADATA +473 -548
- {openmetadata_ingestion-1.5.13.0.dist-info → openmetadata_ingestion-1.6.0.0rc2.dist-info}/RECORD +995 -809
- {openmetadata_ingestion-1.5.13.0.dist-info → openmetadata_ingestion-1.6.0.0rc2.dist-info}/entry_points.txt +3 -0
- metadata/data_quality/interface/test_suite_interface_factory.py +0 -128
- metadata/data_quality/runner/test_suite_source_factory.py +0 -38
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +0 -54
- 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/processor/sampler/pandas/sampler.py +0 -170
- metadata/profiler/processor/sampler/sampler_factory.py +0 -100
- metadata/profiler/processor/sampler/sampler_interface.py +0 -74
- metadata/profiler/processor/sampler/sqlalchemy/snowflake/sampler.py +0 -60
- metadata/profiler/source/base/profiler_source.py +0 -299
- metadata/profiler/source/profiler_source_factory.py +0 -54
- openmetadata_ingestion-1.5.13.0.dist-info/LICENSE +0 -201
- {metadata/ingestion/source/dashboard/mstr → _openmetadata_testutils/pytest_openmetadata}/__init__.py +0 -0
- /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.13.0.dist-info → openmetadata_ingestion-1.6.0.0rc2.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.5.13.0.dist-info → openmetadata_ingestion-1.6.0.0rc2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Manifests are used to store class information
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Optional, Type, cast
|
|
6
|
+
|
|
7
|
+
from pydantic import model_validator
|
|
8
|
+
|
|
9
|
+
from metadata.data_quality.interface.test_suite_interface import TestSuiteInterface
|
|
10
|
+
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
11
|
+
from metadata.ingestion.api.steps import Source
|
|
12
|
+
from metadata.ingestion.models.custom_pydantic import BaseModel
|
|
13
|
+
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
14
|
+
from metadata.sampler.sampler_interface import SamplerInterface
|
|
15
|
+
from metadata.utils.importer import (
|
|
16
|
+
TYPE_SEPARATOR,
|
|
17
|
+
DynamicImportException,
|
|
18
|
+
get_class_path,
|
|
19
|
+
get_module_dir,
|
|
20
|
+
import_from_module,
|
|
21
|
+
)
|
|
22
|
+
from metadata.utils.logger import utils_logger
|
|
23
|
+
|
|
24
|
+
logger = utils_logger()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class BaseSpec(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
# The OpenMetadata Ingestion Service Specification (Spec)
|
|
30
|
+
|
|
31
|
+
This is the API for defining a service in OpenMetadata it needs to be in the classpath of the connector in
|
|
32
|
+
the form:
|
|
33
|
+
|
|
34
|
+
metadata.ingestion.source.{service_type}.{service_name}.service_spec.ServiceSpec
|
|
35
|
+
|
|
36
|
+
Example for postres:
|
|
37
|
+
|
|
38
|
+
metadata.ingestion.source.database.postgres.service_spec.ServiceSpec
|
|
39
|
+
|
|
40
|
+
You can supply either strings with the full classpath or concrete classes that will be converted to strings.
|
|
41
|
+
|
|
42
|
+
The use of strings for the values gives us a few advantages:
|
|
43
|
+
1. manifests can be defined using json/yaml and deserialized into this class.
|
|
44
|
+
2. We can dynamically import the class when needed and avoid dependency issues.
|
|
45
|
+
3. We avoid circular imports.
|
|
46
|
+
4. We can hot-swap the class implementation without changing the manifest (example: for testing).
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
profiler_class: Optional[str] = None
|
|
50
|
+
test_suite_class: Optional[str] = None
|
|
51
|
+
metadata_source_class: str
|
|
52
|
+
lineage_source_class: Optional[str] = None
|
|
53
|
+
usage_source_class: Optional[str] = None
|
|
54
|
+
sampler_class: Optional[str] = None
|
|
55
|
+
|
|
56
|
+
@model_validator(mode="before")
|
|
57
|
+
@classmethod
|
|
58
|
+
def transform_fields(cls, values):
|
|
59
|
+
"""This allows us to pass in the class directly instead of the string representation of the class. The
|
|
60
|
+
validator will convert the class to a string representation of the class."""
|
|
61
|
+
for field in list(cls.model_fields.keys()):
|
|
62
|
+
if isinstance(values.get(field), type):
|
|
63
|
+
values[field] = get_class_path(values[field])
|
|
64
|
+
return values
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def get_for_source(
|
|
68
|
+
cls, service_type: ServiceType, source_type: str, from_: str = "ingestion"
|
|
69
|
+
) -> "BaseSpec":
|
|
70
|
+
"""Retrieves the manifest for a given source type. If it does not exist will attempt to retrieve
|
|
71
|
+
a default manifest for the service type.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
service_type (ServiceType): The service type.
|
|
75
|
+
source_type (str): The source type.
|
|
76
|
+
from_ (str, optional): The module to import from. Defaults to "ingestion".
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
BaseSpec: The manifest for the source type.
|
|
80
|
+
"""
|
|
81
|
+
return cls.model_validate(
|
|
82
|
+
import_from_module(
|
|
83
|
+
"metadata.{}.source.{}.{}.{}.ServiceSpec".format( # pylint: disable=C0209
|
|
84
|
+
from_,
|
|
85
|
+
service_type.name.lower(),
|
|
86
|
+
get_module_dir(source_type),
|
|
87
|
+
"service_spec",
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def import_source_class(
|
|
94
|
+
service_type: ServiceType, source_type: str, from_: str = "ingestion"
|
|
95
|
+
) -> Type[Source]:
|
|
96
|
+
source_class_type = source_type.split(TYPE_SEPARATOR)[-1]
|
|
97
|
+
if source_class_type in ["usage", "lineage"]:
|
|
98
|
+
field = f"{source_class_type}_source_class"
|
|
99
|
+
else:
|
|
100
|
+
field = "metadata_source_class"
|
|
101
|
+
spec = BaseSpec.get_for_source(service_type, source_type, from_)
|
|
102
|
+
return cast(
|
|
103
|
+
Type[Source],
|
|
104
|
+
import_from_module(spec.model_dump()[field]),
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def import_profiler_class(
|
|
109
|
+
service_type: ServiceType, source_type: str
|
|
110
|
+
) -> Type[ProfilerInterface]:
|
|
111
|
+
class_path = BaseSpec.get_for_source(service_type, source_type).profiler_class
|
|
112
|
+
return cast(Type[ProfilerInterface], import_from_module(class_path))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def import_test_suite_class(
|
|
116
|
+
service_type: ServiceType,
|
|
117
|
+
source_type: str,
|
|
118
|
+
source_config_type: Optional[str] = None,
|
|
119
|
+
) -> Type[TestSuiteInterface]:
|
|
120
|
+
try:
|
|
121
|
+
class_path = BaseSpec.get_for_source(service_type, source_type).test_suite_class
|
|
122
|
+
except DynamicImportException:
|
|
123
|
+
if source_config_type:
|
|
124
|
+
class_path = BaseSpec.get_for_source(
|
|
125
|
+
service_type, source_config_type.lower()
|
|
126
|
+
).test_suite_class
|
|
127
|
+
else:
|
|
128
|
+
raise
|
|
129
|
+
return cast(Type[TestSuiteInterface], import_from_module(class_path))
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def import_sampler_class(
|
|
133
|
+
service_type: ServiceType,
|
|
134
|
+
source_type: str,
|
|
135
|
+
source_config_type: Optional[str] = None,
|
|
136
|
+
) -> Type[SamplerInterface]:
|
|
137
|
+
try:
|
|
138
|
+
class_path = BaseSpec.get_for_source(service_type, source_type).sampler_class
|
|
139
|
+
except DynamicImportException:
|
|
140
|
+
if source_config_type:
|
|
141
|
+
class_path = BaseSpec.get_for_source(
|
|
142
|
+
service_type, source_config_type.lower()
|
|
143
|
+
).sampler_class
|
|
144
|
+
else:
|
|
145
|
+
raise
|
|
146
|
+
return cast(Type[SamplerInterface], import_from_module(class_path))
|
metadata/utils/ssl_manager.py
CHANGED
|
@@ -51,6 +51,9 @@ from metadata.generated.schema.entity.services.connections.database.salesforceCo
|
|
|
51
51
|
from metadata.generated.schema.entity.services.connections.messaging.kafkaConnection import (
|
|
52
52
|
KafkaConnection,
|
|
53
53
|
)
|
|
54
|
+
from metadata.generated.schema.entity.services.connections.pipeline.matillionConnection import (
|
|
55
|
+
MatillionConnection,
|
|
56
|
+
)
|
|
54
57
|
from metadata.generated.schema.security.ssl import verifySSLConfig
|
|
55
58
|
from metadata.ingestion.connections.builders import init_empty_connection_arguments
|
|
56
59
|
from metadata.ingestion.models.custom_pydantic import CustomSecretStr
|
|
@@ -112,6 +115,21 @@ class SSLManager:
|
|
|
112
115
|
connection.connectionArguments.root["ssl"] = ssl_args
|
|
113
116
|
return connection
|
|
114
117
|
|
|
118
|
+
@setup_ssl.register(MatillionConnection)
|
|
119
|
+
def _(self, connection):
|
|
120
|
+
matillion_connection = cast(MatillionConnection, connection)
|
|
121
|
+
if (
|
|
122
|
+
matillion_connection.connection
|
|
123
|
+
and matillion_connection.connection.sslConfig
|
|
124
|
+
):
|
|
125
|
+
if matillion_connection.connection.sslConfig.root.caCertificate:
|
|
126
|
+
setattr(
|
|
127
|
+
matillion_connection.connection.sslConfig.root,
|
|
128
|
+
"caCertificate",
|
|
129
|
+
self.ca_file_path,
|
|
130
|
+
)
|
|
131
|
+
return connection
|
|
132
|
+
|
|
115
133
|
@setup_ssl.register(PostgresConnection)
|
|
116
134
|
@setup_ssl.register(RedshiftConnection)
|
|
117
135
|
@setup_ssl.register(GreenplumConnection)
|
|
@@ -194,6 +212,21 @@ def check_ssl_and_init(_) -> Optional[SSLManager]:
|
|
|
194
212
|
return None
|
|
195
213
|
|
|
196
214
|
|
|
215
|
+
@check_ssl_and_init.register(MatillionConnection)
|
|
216
|
+
def _(connection) -> Union[SSLManager, None]:
|
|
217
|
+
service_connection = cast(MatillionConnection, connection)
|
|
218
|
+
if service_connection.connection:
|
|
219
|
+
ssl: Optional[
|
|
220
|
+
verifySSLConfig.SslConfig
|
|
221
|
+
] = service_connection.connection.sslConfig
|
|
222
|
+
if ssl and ssl.root.caCertificate:
|
|
223
|
+
ssl_dict: dict[str, Union[CustomSecretStr, None]] = {
|
|
224
|
+
"ca": ssl.root.caCertificate
|
|
225
|
+
}
|
|
226
|
+
return SSLManager(**ssl_dict)
|
|
227
|
+
return None
|
|
228
|
+
|
|
229
|
+
|
|
197
230
|
@check_ssl_and_init.register(cls=SalesforceConnection)
|
|
198
231
|
def _(connection) -> Union[SSLManager, None]:
|
|
199
232
|
service_connection = cast(SalesforceConnection, connection)
|
metadata/utils/time_utils.py
CHANGED
|
@@ -17,28 +17,55 @@ from datetime import datetime, time, timedelta, timezone
|
|
|
17
17
|
from math import floor
|
|
18
18
|
from typing import Union
|
|
19
19
|
|
|
20
|
+
from metadata.generated.schema.type.basic import Timestamp
|
|
21
|
+
from metadata.utils.deprecation import deprecated
|
|
20
22
|
from metadata.utils.helpers import datetime_to_ts
|
|
23
|
+
from metadata.utils.logger import utils_logger
|
|
21
24
|
|
|
25
|
+
logger = utils_logger()
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
|
|
28
|
+
def datetime_to_timestamp(datetime_value: datetime, milliseconds=False) -> int:
|
|
29
|
+
"""Convert a datetime object to timestamp integer. If datetime is timezone aware, it will be converted to UTC.
|
|
30
|
+
If it is naive it will be assumed to be in UTC.
|
|
31
|
+
|
|
32
|
+
# TODO: not sure the milliseconds flag is useful. Maybe this should return a 'Timestamp' object instead.
|
|
25
33
|
|
|
26
34
|
Args:
|
|
27
35
|
datetime_value (_type_): datetime object
|
|
28
36
|
milliseconds (bool, optional): make it a milliseconds timestamp. Defaults to False.
|
|
29
37
|
|
|
30
38
|
Returns:
|
|
31
|
-
int:
|
|
39
|
+
int : timestamp in seconds or milliseconds
|
|
32
40
|
"""
|
|
33
41
|
if not getattr(datetime_value, "timestamp", None):
|
|
34
|
-
raise TypeError(
|
|
35
|
-
|
|
42
|
+
raise TypeError(
|
|
43
|
+
f"Object of type {type(datetime_value).__name__} has not method `timestamp()`"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
datetime_value = (
|
|
47
|
+
datetime_value.replace(tzinfo=timezone.utc)
|
|
48
|
+
if datetime_value.tzinfo is None
|
|
49
|
+
else datetime_value.astimezone(timezone.utc)
|
|
50
|
+
)
|
|
36
51
|
tmsap = datetime_value.timestamp()
|
|
37
52
|
if milliseconds:
|
|
38
53
|
return int(tmsap * 1000)
|
|
39
54
|
return int(tmsap)
|
|
40
55
|
|
|
41
56
|
|
|
57
|
+
def timestamp_to_datetime(ts: Timestamp) -> datetime:
|
|
58
|
+
"""Convert a timestamp to datetime object in UTC.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
ts (Timestamp): timestamp
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
datetime: datetime object
|
|
65
|
+
"""
|
|
66
|
+
return datetime.fromtimestamp(ts.root / 1000, tz=timezone.utc)
|
|
67
|
+
|
|
68
|
+
|
|
42
69
|
def get_beginning_of_day_timestamp_mill(
|
|
43
70
|
days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
|
|
44
71
|
) -> int:
|
|
@@ -115,6 +142,7 @@ def convert_timestamp(timestamp: str) -> Union[int, float]:
|
|
|
115
142
|
return float(timestamp) / 1000
|
|
116
143
|
|
|
117
144
|
|
|
145
|
+
@deprecated("Use `datetime_to_timestamp` instead", "1.7.0")
|
|
118
146
|
def convert_timestamp_to_milliseconds(timestamp: Union[int, float]) -> int:
|
|
119
147
|
"""convert timestamp to milliseconds
|
|
120
148
|
Args:
|
metadata/workflow/application.py
CHANGED
|
@@ -14,10 +14,6 @@ Generic Workflow entrypoint to execute Applications
|
|
|
14
14
|
from abc import ABC, abstractmethod
|
|
15
15
|
from typing import List, Optional
|
|
16
16
|
|
|
17
|
-
from metadata.config.common import WorkflowExecutionError
|
|
18
|
-
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
19
|
-
OpenMetadataConnection,
|
|
20
|
-
)
|
|
21
17
|
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
22
18
|
StackTraceError,
|
|
23
19
|
)
|
|
@@ -25,13 +21,11 @@ from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
|
25
21
|
from metadata.generated.schema.metadataIngestion.application import (
|
|
26
22
|
OpenMetadataApplicationConfig,
|
|
27
23
|
)
|
|
28
|
-
from metadata.
|
|
29
|
-
from metadata.ingestion.api.step import Step, Summary
|
|
24
|
+
from metadata.ingestion.api.step import Step
|
|
30
25
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
26
|
from metadata.utils.importer import import_from_module
|
|
32
27
|
from metadata.utils.logger import ingestion_logger
|
|
33
28
|
from metadata.workflow.base import BaseWorkflow
|
|
34
|
-
from metadata.workflow.workflow_status_mixin import SUCCESS_THRESHOLD_VALUE
|
|
35
29
|
|
|
36
30
|
logger = ingestion_logger()
|
|
37
31
|
|
|
@@ -84,29 +78,24 @@ class ApplicationWorkflow(BaseWorkflow, ABC):
|
|
|
84
78
|
config: OpenMetadataApplicationConfig
|
|
85
79
|
runner: Optional[AppRunner]
|
|
86
80
|
|
|
87
|
-
def __init__(self,
|
|
81
|
+
def __init__(self, config: OpenMetadataApplicationConfig):
|
|
88
82
|
self.runner = None # Will be passed in post-init
|
|
89
|
-
|
|
90
|
-
self.config = OpenMetadataApplicationConfig.model_validate(config_dict)
|
|
83
|
+
self.config = config
|
|
91
84
|
|
|
92
85
|
# Applications are associated to the OpenMetadata Service
|
|
93
86
|
self.service_type: ServiceType = ServiceType.Metadata
|
|
94
87
|
|
|
95
|
-
metadata_config: OpenMetadataConnection = (
|
|
96
|
-
self.config.workflowConfig.openMetadataServerConfig
|
|
97
|
-
)
|
|
98
|
-
log_level: LogLevels = self.config.workflowConfig.loggerLevel
|
|
99
|
-
|
|
100
88
|
super().__init__(
|
|
101
89
|
config=self.config,
|
|
102
|
-
|
|
103
|
-
metadata_config=metadata_config,
|
|
90
|
+
workflow_config=config.workflowConfig,
|
|
104
91
|
service_type=self.service_type,
|
|
105
92
|
)
|
|
106
93
|
|
|
107
94
|
@classmethod
|
|
108
95
|
def create(cls, config_dict: dict):
|
|
109
|
-
|
|
96
|
+
# TODO: Create a parse_gracefully method
|
|
97
|
+
config = OpenMetadataApplicationConfig.model_validate(config_dict)
|
|
98
|
+
return cls(config)
|
|
110
99
|
|
|
111
100
|
def post_init(self) -> None:
|
|
112
101
|
"""
|
|
@@ -134,26 +123,8 @@ class ApplicationWorkflow(BaseWorkflow, ABC):
|
|
|
134
123
|
"""Workflow-specific logic to execute safely"""
|
|
135
124
|
self.runner.run()
|
|
136
125
|
|
|
137
|
-
def calculate_success(self) -> float:
|
|
138
|
-
return self.runner.get_status().calculate_success()
|
|
139
|
-
|
|
140
126
|
def get_failures(self) -> List[StackTraceError]:
|
|
141
127
|
return self.workflow_steps()[0].get_status().failures
|
|
142
128
|
|
|
143
129
|
def workflow_steps(self) -> List[Step]:
|
|
144
130
|
return [self.runner]
|
|
145
|
-
|
|
146
|
-
def raise_from_status_internal(self, raise_warnings=False):
|
|
147
|
-
"""Check failed status in the runner"""
|
|
148
|
-
if (
|
|
149
|
-
self.runner.get_status().failures
|
|
150
|
-
and self.calculate_success() < SUCCESS_THRESHOLD_VALUE
|
|
151
|
-
):
|
|
152
|
-
raise WorkflowExecutionError(
|
|
153
|
-
f"{self.runner.name} reported errors: {Summary.from_step(self.runner)}"
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
if raise_warnings and self.runner.get_status().warnings:
|
|
157
|
-
raise WorkflowExecutionError(
|
|
158
|
-
f"{self.runner.name} reported warning: {Summary.from_step(self.runner)}"
|
|
159
|
-
)
|
metadata/workflow/base.py
CHANGED
|
@@ -16,8 +16,10 @@ import traceback
|
|
|
16
16
|
import uuid
|
|
17
17
|
from abc import ABC, abstractmethod
|
|
18
18
|
from datetime import datetime
|
|
19
|
+
from statistics import mean
|
|
19
20
|
from typing import Any, Dict, List, Optional, TypeVar, Union
|
|
20
21
|
|
|
22
|
+
from metadata.config.common import WorkflowExecutionError
|
|
21
23
|
from metadata.generated.schema.api.services.ingestionPipelines.createIngestionPipeline import (
|
|
22
24
|
CreateIngestionPipelineRequest,
|
|
23
25
|
)
|
|
@@ -32,10 +34,13 @@ from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipel
|
|
|
32
34
|
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
33
35
|
StackTraceError,
|
|
34
36
|
)
|
|
35
|
-
from metadata.generated.schema.metadataIngestion.workflow import
|
|
37
|
+
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
38
|
+
LogLevels,
|
|
39
|
+
WorkflowConfig,
|
|
40
|
+
)
|
|
36
41
|
from metadata.generated.schema.tests.testSuite import ServiceType
|
|
37
42
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
38
|
-
from metadata.ingestion.api.step import Step
|
|
43
|
+
from metadata.ingestion.api.step import Step, Summary
|
|
39
44
|
from metadata.ingestion.ometa.client_utils import create_ometa_client
|
|
40
45
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
41
46
|
from metadata.timer.repeated_timer import RepeatedTimer
|
|
@@ -49,10 +54,7 @@ from metadata.utils.execution_time_tracker import ExecutionTimeTracker
|
|
|
49
54
|
from metadata.utils.helpers import datetime_to_ts
|
|
50
55
|
from metadata.utils.logger import ingestion_logger, set_loggers_level
|
|
51
56
|
from metadata.workflow.workflow_output_handler import WorkflowOutputHandler
|
|
52
|
-
from metadata.workflow.workflow_status_mixin import
|
|
53
|
-
SUCCESS_THRESHOLD_VALUE,
|
|
54
|
-
WorkflowStatusMixin,
|
|
55
|
-
)
|
|
57
|
+
from metadata.workflow.workflow_status_mixin import WorkflowStatusMixin
|
|
56
58
|
|
|
57
59
|
logger = ingestion_logger()
|
|
58
60
|
|
|
@@ -82,8 +84,7 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
82
84
|
def __init__(
|
|
83
85
|
self,
|
|
84
86
|
config: Union[Any, Dict],
|
|
85
|
-
|
|
86
|
-
metadata_config: OpenMetadataConnection,
|
|
87
|
+
workflow_config: WorkflowConfig,
|
|
87
88
|
service_type: ServiceType,
|
|
88
89
|
output_handler: WorkflowOutputHandler = WorkflowOutputHandler(),
|
|
89
90
|
):
|
|
@@ -92,19 +93,22 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
92
93
|
"""
|
|
93
94
|
self.output_handler = output_handler
|
|
94
95
|
self.config = config
|
|
96
|
+
self.workflow_config = workflow_config
|
|
95
97
|
self.service_type = service_type
|
|
96
98
|
self._timer: Optional[RepeatedTimer] = None
|
|
97
99
|
self._ingestion_pipeline: Optional[IngestionPipeline] = None
|
|
98
100
|
self._start_ts = datetime_to_ts(datetime.now())
|
|
101
|
+
|
|
99
102
|
self._execution_time_tracker = ExecutionTimeTracker(
|
|
100
|
-
|
|
103
|
+
self.workflow_config.loggerLevel == LogLevels.DEBUG
|
|
101
104
|
)
|
|
102
105
|
|
|
103
|
-
set_loggers_level(
|
|
106
|
+
set_loggers_level(self.workflow_config.loggerLevel.value)
|
|
104
107
|
|
|
105
108
|
# We create the ometa client at the workflow level and pass it to the steps
|
|
106
|
-
self.
|
|
107
|
-
|
|
109
|
+
self.metadata = create_ometa_client(
|
|
110
|
+
self.workflow_config.openMetadataServerConfig
|
|
111
|
+
)
|
|
108
112
|
self.set_ingestion_pipeline_status(state=PipelineState.running)
|
|
109
113
|
|
|
110
114
|
self.post_init()
|
|
@@ -157,9 +161,22 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
157
161
|
def execute_internal(self) -> None:
|
|
158
162
|
"""Workflow-specific logic to execute safely"""
|
|
159
163
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
def calculate_success(self) -> Optional[float]:
|
|
165
|
+
"""
|
|
166
|
+
Get the success % of the internal execution.
|
|
167
|
+
Since we'll use this to get a single success % from multiple steps, we'll take
|
|
168
|
+
the minimum success % from all the steps. This way, we can have a proper
|
|
169
|
+
workflow status.
|
|
170
|
+
E.g., if we have no errors on the source but a bunch of them on the sink,
|
|
171
|
+
we still want the flow to be marked as a failure or partial success.
|
|
172
|
+
"""
|
|
173
|
+
if not self.workflow_steps():
|
|
174
|
+
logger.warning("No steps to calculate success")
|
|
175
|
+
return None
|
|
176
|
+
|
|
177
|
+
return mean(
|
|
178
|
+
[step.get_status().calculate_success() for step in self.workflow_steps()]
|
|
179
|
+
)
|
|
163
180
|
|
|
164
181
|
@abstractmethod
|
|
165
182
|
def get_failures(self) -> List[StackTraceError]:
|
|
@@ -169,9 +186,22 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
169
186
|
def workflow_steps(self) -> List[Step]:
|
|
170
187
|
"""Steps to report status from"""
|
|
171
188
|
|
|
172
|
-
@abstractmethod
|
|
173
189
|
def raise_from_status_internal(self, raise_warnings=False) -> None:
|
|
174
190
|
"""Based on the internal workflow status, raise a WorkflowExecutionError"""
|
|
191
|
+
for step in self.workflow_steps():
|
|
192
|
+
if (
|
|
193
|
+
step.get_status().failures
|
|
194
|
+
and step.get_status().calculate_success()
|
|
195
|
+
< self.workflow_config.successThreshold
|
|
196
|
+
):
|
|
197
|
+
raise WorkflowExecutionError(
|
|
198
|
+
f"{step.name} reported errors: {Summary.from_step(step)}"
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
if raise_warnings and step.status.warnings:
|
|
202
|
+
raise WorkflowExecutionError(
|
|
203
|
+
f"{step.name} reported warning: {Summary.from_step(step)}"
|
|
204
|
+
)
|
|
175
205
|
|
|
176
206
|
def execute(self) -> None:
|
|
177
207
|
"""
|
|
@@ -186,7 +216,7 @@ class BaseWorkflow(ABC, WorkflowStatusMixin):
|
|
|
186
216
|
try:
|
|
187
217
|
self.execute_internal()
|
|
188
218
|
|
|
189
|
-
if
|
|
219
|
+
if self.workflow_config.successThreshold <= self.calculate_success() < 100:
|
|
190
220
|
pipeline_state = PipelineState.partialSuccess
|
|
191
221
|
|
|
192
222
|
# Any unhandled exception breaking the workflow should update the status
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
"""
|
|
12
|
+
Workflow definition for the profiler
|
|
13
|
+
"""
|
|
14
|
+
from typing import cast
|
|
15
|
+
|
|
16
|
+
from metadata.generated.schema.metadataIngestion.databaseServiceAutoClassificationPipeline import (
|
|
17
|
+
DatabaseServiceAutoClassificationPipeline,
|
|
18
|
+
)
|
|
19
|
+
from metadata.ingestion.api.steps import Processor
|
|
20
|
+
from metadata.pii.processor import PIIProcessor
|
|
21
|
+
from metadata.sampler.processor import SamplerProcessor
|
|
22
|
+
from metadata.utils.logger import profiler_logger
|
|
23
|
+
from metadata.workflow.profiler import ProfilerWorkflow
|
|
24
|
+
|
|
25
|
+
logger = profiler_logger()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AutoClassificationWorkflow(ProfilerWorkflow):
|
|
29
|
+
"""Auto Classification workflow implementation. Based on the Profiler logic with different steps"""
|
|
30
|
+
|
|
31
|
+
def set_steps(self):
|
|
32
|
+
source_class = self._get_source_class()
|
|
33
|
+
self.source = source_class.create(self.config.model_dump(), self.metadata)
|
|
34
|
+
|
|
35
|
+
sink = self._get_sink()
|
|
36
|
+
sampler_processor = self._get_sampler_processor()
|
|
37
|
+
|
|
38
|
+
# Only instantiate the PII Processor on demand
|
|
39
|
+
source_config: DatabaseServiceAutoClassificationPipeline = cast(
|
|
40
|
+
DatabaseServiceAutoClassificationPipeline,
|
|
41
|
+
self.config.source.sourceConfig.config,
|
|
42
|
+
)
|
|
43
|
+
if source_config.enableAutoClassification:
|
|
44
|
+
pii_processor = self._get_pii_processor()
|
|
45
|
+
self.steps = (sampler_processor, pii_processor, sink)
|
|
46
|
+
else:
|
|
47
|
+
self.steps = (sampler_processor, sink)
|
|
48
|
+
|
|
49
|
+
def _get_pii_processor(self) -> Processor:
|
|
50
|
+
return PIIProcessor.create(self.config.model_dump(), self.metadata)
|
|
51
|
+
|
|
52
|
+
def _get_sampler_processor(self) -> Processor:
|
|
53
|
+
return SamplerProcessor.create(self.config.model_dump(), self.metadata)
|
metadata/workflow/ingestion.py
CHANGED
|
@@ -24,9 +24,6 @@ from abc import ABC, abstractmethod
|
|
|
24
24
|
from typing import List, Tuple, Type, cast
|
|
25
25
|
|
|
26
26
|
from metadata.config.common import WorkflowExecutionError
|
|
27
|
-
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
28
|
-
OpenMetadataConnection,
|
|
29
|
-
)
|
|
30
27
|
from metadata.generated.schema.entity.services.connections.serviceConnection import (
|
|
31
28
|
ServiceConnection,
|
|
32
29
|
)
|
|
@@ -38,7 +35,7 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
38
35
|
OpenMetadataWorkflowConfig,
|
|
39
36
|
)
|
|
40
37
|
from metadata.ingestion.api.parser import parse_workflow_config_gracefully
|
|
41
|
-
from metadata.ingestion.api.step import Step
|
|
38
|
+
from metadata.ingestion.api.step import Step
|
|
42
39
|
from metadata.ingestion.api.steps import BulkSink, Processor, Sink, Source, Stage
|
|
43
40
|
from metadata.ingestion.models.custom_types import ServiceWithConnectionType
|
|
44
41
|
from metadata.profiler.api.models import ProfilerProcessorConfig
|
|
@@ -51,18 +48,19 @@ from metadata.utils.importer import (
|
|
|
51
48
|
DynamicImportException,
|
|
52
49
|
MissingPluginException,
|
|
53
50
|
import_from_module,
|
|
54
|
-
import_source_class,
|
|
55
51
|
)
|
|
56
52
|
from metadata.utils.logger import ingestion_logger
|
|
53
|
+
from metadata.utils.service_spec.service_spec import import_source_class
|
|
57
54
|
from metadata.workflow.base import BaseWorkflow, InvalidWorkflowJSONException
|
|
58
|
-
from metadata.workflow.workflow_status_mixin import SUCCESS_THRESHOLD_VALUE
|
|
59
55
|
|
|
60
56
|
logger = ingestion_logger()
|
|
61
57
|
|
|
62
58
|
|
|
63
59
|
class IngestionWorkflow(BaseWorkflow, ABC):
|
|
64
60
|
"""
|
|
65
|
-
Base Ingestion Workflow implementation
|
|
61
|
+
Base Ingestion Workflow implementation. This is used for all
|
|
62
|
+
workflows minus the application one, which directly inherits the
|
|
63
|
+
BaseWorkflow.
|
|
66
64
|
"""
|
|
67
65
|
|
|
68
66
|
config: OpenMetadataWorkflowConfig
|
|
@@ -79,14 +77,9 @@ class IngestionWorkflow(BaseWorkflow, ABC):
|
|
|
79
77
|
self.config.source.type
|
|
80
78
|
)
|
|
81
79
|
|
|
82
|
-
metadata_config: OpenMetadataConnection = (
|
|
83
|
-
self.config.workflowConfig.openMetadataServerConfig
|
|
84
|
-
)
|
|
85
|
-
|
|
86
80
|
super().__init__(
|
|
87
81
|
config=config,
|
|
88
|
-
|
|
89
|
-
metadata_config=metadata_config,
|
|
82
|
+
workflow_config=config.workflowConfig,
|
|
90
83
|
service_type=self.service_type,
|
|
91
84
|
)
|
|
92
85
|
|
|
@@ -137,37 +130,12 @@ class IngestionWorkflow(BaseWorkflow, ABC):
|
|
|
137
130
|
if bulk_sink:
|
|
138
131
|
bulk_sink.run()
|
|
139
132
|
|
|
140
|
-
def calculate_success(self) -> float:
|
|
141
|
-
return self.source.get_status().calculate_success()
|
|
142
|
-
|
|
143
133
|
def get_failures(self) -> List[StackTraceError]:
|
|
144
134
|
return self.source.get_status().failures
|
|
145
135
|
|
|
146
136
|
def workflow_steps(self) -> List[Step]:
|
|
147
137
|
return [self.source] + list(self.steps)
|
|
148
138
|
|
|
149
|
-
def raise_from_status_internal(self, raise_warnings=False):
|
|
150
|
-
"""
|
|
151
|
-
Check the status of all steps
|
|
152
|
-
"""
|
|
153
|
-
if (
|
|
154
|
-
self.source.get_status().failures
|
|
155
|
-
and self.calculate_success() < SUCCESS_THRESHOLD_VALUE
|
|
156
|
-
):
|
|
157
|
-
raise WorkflowExecutionError(
|
|
158
|
-
f"{self.source.name} reported errors: {Summary.from_step(self.source)}"
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
for step in self.steps:
|
|
162
|
-
if step.status.failures:
|
|
163
|
-
raise WorkflowExecutionError(
|
|
164
|
-
f"{step.name} reported errors: {Summary.from_step(step)}"
|
|
165
|
-
)
|
|
166
|
-
if raise_warnings and step.status.warnings:
|
|
167
|
-
raise WorkflowExecutionError(
|
|
168
|
-
f"{step.name} reported warnings: {Summary.from_step(step)}"
|
|
169
|
-
)
|
|
170
|
-
|
|
171
139
|
def _retrieve_service_connection_if_needed(self, service_type: ServiceType) -> None:
|
|
172
140
|
"""
|
|
173
141
|
We override the current `serviceConnection` source config object if source workflow service already exists
|
metadata/workflow/profiler.py
CHANGED
|
@@ -11,11 +11,7 @@
|
|
|
11
11
|
"""
|
|
12
12
|
Workflow definition for the profiler
|
|
13
13
|
"""
|
|
14
|
-
from typing import cast
|
|
15
14
|
|
|
16
|
-
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
17
|
-
DatabaseServiceProfilerPipeline,
|
|
18
|
-
)
|
|
19
15
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
20
16
|
OpenMetadataWorkflowConfig,
|
|
21
17
|
)
|
|
@@ -24,7 +20,6 @@ from metadata.ingestion.connections.test_connections import (
|
|
|
24
20
|
raise_test_connection_exception,
|
|
25
21
|
)
|
|
26
22
|
from metadata.ingestion.source.connections import get_test_connection_fn
|
|
27
|
-
from metadata.pii.processor import PIIProcessor
|
|
28
23
|
from metadata.profiler.processor.processor import ProfilerProcessor
|
|
29
24
|
from metadata.profiler.source.metadata import OpenMetadataSource
|
|
30
25
|
from metadata.profiler.source.metadata_ext import OpenMetadataSourceExt
|
|
@@ -68,15 +63,7 @@ class ProfilerWorkflow(IngestionWorkflow):
|
|
|
68
63
|
profiler_processor = self._get_profiler_processor()
|
|
69
64
|
sink = self._get_sink()
|
|
70
65
|
|
|
71
|
-
|
|
72
|
-
source_config: DatabaseServiceProfilerPipeline = cast(
|
|
73
|
-
DatabaseServiceProfilerPipeline, self.config.source.sourceConfig.config
|
|
74
|
-
)
|
|
75
|
-
if source_config.processPiiSensitive:
|
|
76
|
-
pii_processor = self._get_pii_processor()
|
|
77
|
-
self.steps = (profiler_processor, pii_processor, sink)
|
|
78
|
-
else:
|
|
79
|
-
self.steps = (profiler_processor, sink)
|
|
66
|
+
self.steps = (profiler_processor, sink)
|
|
80
67
|
|
|
81
68
|
def test_connection(self) -> None:
|
|
82
69
|
service_config = self.config.source.serviceConnection.root.config
|
|
@@ -97,6 +84,3 @@ class ProfilerWorkflow(IngestionWorkflow):
|
|
|
97
84
|
|
|
98
85
|
def _get_profiler_processor(self) -> Processor:
|
|
99
86
|
return ProfilerProcessor.create(self.config.model_dump(), self.metadata)
|
|
100
|
-
|
|
101
|
-
def _get_pii_processor(self) -> Processor:
|
|
102
|
-
return PIIProcessor.create(self.config.model_dump(), self.metadata)
|