openmetadata-ingestion 1.2.5.2__py3-none-any.whl → 1.3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- airflow_provider_openmetadata/lineage/runner.py +44 -5
- airflow_provider_openmetadata/lineage/status.py +1 -1
- metadata/antlr/split_listener.py +1 -4
- metadata/applications/auto_tagger.py +212 -0
- metadata/cli/app.py +47 -0
- metadata/cli/db_dump.py +6 -3
- metadata/clients/aws_client.py +4 -0
- metadata/clients/domo_client.py +0 -2
- metadata/cmd.py +24 -13
- metadata/data_insight/processor/reports/entity_report_data_processor.py +8 -2
- metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +4 -0
- metadata/data_insight/source/metadata.py +11 -4
- metadata/data_quality/interface/sqlalchemy/databricks/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/snowflake/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +6 -6
- metadata/data_quality/interface/sqlalchemy/unity_catalog/test_suite_interface.py +35 -0
- metadata/data_quality/interface/test_suite_interface_factory.py +40 -0
- metadata/data_quality/processor/test_case_runner.py +17 -8
- metadata/data_quality/source/test_suite.py +8 -2
- metadata/data_quality/validations/base_test_handler.py +21 -17
- metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +38 -1
- metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +36 -1
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotNull.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeUnique.py +15 -0
- metadata/data_quality/validations/column/base/columnValuesToMatchRegex.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToNotMatchRegex.py +27 -0
- metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +27 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/mixins/pandas_validator_mixin.py +13 -2
- metadata/data_quality/validations/mixins/sqa_validator_mixin.py +40 -0
- metadata/examples/workflows/databricks.yaml +0 -1
- metadata/examples/workflows/mongodb.yaml +4 -2
- metadata/examples/workflows/mstr.yaml +24 -0
- metadata/examples/workflows/sas.yaml +28 -0
- metadata/examples/workflows/unity_catalog.yaml +27 -0
- metadata/examples/workflows/unity_catalog_lineage.yaml +18 -0
- metadata/examples/workflows/unity_catalog_usage.yaml +35 -0
- metadata/generated/antlr/EntityLinkLexer.py +391 -292
- metadata/generated/antlr/EntityLinkListener.py +12 -12
- metadata/generated/antlr/EntityLinkParser.py +228 -103
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +2 -3
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +2 -2
- metadata/generated/schema/api/data/createCustomProperty.py +2 -3
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +2 -3
- metadata/generated/schema/api/data/createDatabaseSchema.py +2 -3
- metadata/generated/schema/api/data/createGlossary.py +2 -3
- metadata/generated/schema/api/data/createGlossaryTerm.py +2 -3
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +2 -2
- metadata/generated/schema/api/data/createQuery.py +2 -2
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +2 -4
- metadata/generated/schema/api/data/createTable.py +2 -2
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +8 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +30 -0
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +12 -1
- metadata/generated/schema/api/feed/threadCount.py +18 -14
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +2 -3
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +2 -2
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +4 -2
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +4 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +31 -0
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +3 -3
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +2 -2
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +28 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +7 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +28 -2
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +18 -4
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +30 -0
- metadata/generated/schema/entity/{services/connections/database/mongoDB → applications/configuration/external}/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +28 -0
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +46 -0
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +14 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +27 -0
- metadata/generated/schema/entity/applications/configuration/{searchIndexingApp.py → internal/searchIndexingAppConfig.py} +13 -3
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +3 -3
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +12 -3
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +12 -3
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +2 -2
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +2 -3
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +2 -2
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +4 -9
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +4 -8
- metadata/generated/schema/entity/data/databaseSchema.py +2 -8
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +6 -9
- metadata/generated/schema/entity/data/query.py +2 -2
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +3 -9
- metadata/generated/schema/entity/data/table.py +18 -12
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +1 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +1 -1
- metadata/generated/schema/entity/domains/domain.py +1 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +6 -3
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +61 -0
- metadata/generated/schema/entity/feed/thread.py +6 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +2 -5
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +46 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +6 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +2 -7
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +3 -2
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +86 -0
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +17 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +16 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +43 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +20 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +69 -0
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +35 -0
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +24 -14
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -2
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +48 -0
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +90 -0
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +5 -20
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +2 -8
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/{adlsConection.py → adlsConnection.py} +2 -2
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +4 -1
- metadata/generated/schema/entity/services/databaseService.py +13 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +27 -22
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +56 -0
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +4 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +10 -3
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +2 -6
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +3 -10
- metadata/generated/schema/entity/type.py +2 -2
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +27 -0
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +14 -12
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +13 -2
- metadata/generated/schema/events/eventSubscription.py +89 -49
- metadata/generated/schema/events/eventSubscriptionOffset.py +21 -0
- metadata/generated/schema/events/failedEvent.py +26 -0
- metadata/generated/schema/events/filterResourceDescriptor.py +27 -0
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +11 -10
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +40 -0
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +15 -6
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +2 -2
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +24 -0
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +8 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +14 -4
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +2 -2
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +4 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +17 -0
- metadata/generated/schema/system/eventPublisherJob.py +5 -19
- metadata/generated/schema/system/indexingError.py +34 -0
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +18 -0
- metadata/generated/schema/tests/basic.py +17 -39
- metadata/generated/schema/tests/customMetric.py +4 -2
- metadata/generated/schema/tests/resolved.py +35 -0
- metadata/generated/schema/tests/testCase.py +11 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +63 -0
- metadata/generated/schema/tests/testDefinition.py +5 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +5 -5
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -75
- metadata/generated/schema/type/changeEventType.py +29 -0
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +2 -1
- metadata/generated/schema/type/entityReference.py +5 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +7 -6
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +2 -2
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +2 -2
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/great_expectations/action.py +3 -2
- metadata/ingestion/api/delete.py +5 -2
- metadata/ingestion/api/models.py +4 -10
- metadata/ingestion/api/parser.py +3 -37
- metadata/ingestion/api/status.py +15 -4
- metadata/ingestion/api/step.py +39 -6
- metadata/ingestion/api/steps.py +20 -0
- metadata/ingestion/api/topology_runner.py +114 -168
- metadata/ingestion/bulksink/metadata_usage.py +11 -5
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/lineage/parser.py +4 -5
- metadata/ingestion/lineage/sql_lineage.py +9 -17
- metadata/ingestion/models/custom_pydantic.py +4 -2
- metadata/ingestion/models/lf_tags_model.py +33 -0
- metadata/ingestion/models/patch_request.py +108 -2
- metadata/ingestion/models/tests_data.py +9 -0
- metadata/ingestion/models/topology.py +177 -60
- metadata/ingestion/ometa/auth_provider.py +0 -349
- metadata/ingestion/ometa/mixins/es_mixin.py +17 -0
- metadata/ingestion/ometa/mixins/patch_mixin.py +17 -68
- metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
- metadata/ingestion/ometa/mixins/table_mixin.py +18 -0
- metadata/ingestion/ometa/mixins/tests_mixin.py +24 -3
- metadata/ingestion/ometa/mixins/user_mixin.py +117 -22
- metadata/ingestion/ometa/ometa_api.py +18 -25
- metadata/ingestion/ometa/routes.py +7 -0
- metadata/ingestion/processor/query_parser.py +9 -2
- metadata/ingestion/sink/metadata_rest.py +25 -6
- metadata/ingestion/source/dashboard/dashboard_service.py +38 -61
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +13 -14
- metadata/ingestion/source/dashboard/lightdash/metadata.py +2 -1
- metadata/ingestion/source/dashboard/looker/metadata.py +38 -25
- metadata/ingestion/source/dashboard/metabase/metadata.py +23 -6
- metadata/ingestion/source/dashboard/mode/client.py +10 -23
- metadata/ingestion/source/dashboard/mode/connection.py +6 -1
- metadata/ingestion/source/dashboard/mode/metadata.py +8 -4
- metadata/ingestion/source/dashboard/mstr/client.py +208 -0
- metadata/ingestion/source/dashboard/mstr/connection.py +53 -0
- metadata/ingestion/source/dashboard/mstr/metadata.py +182 -0
- metadata/ingestion/source/dashboard/mstr/models.py +144 -0
- metadata/ingestion/source/dashboard/powerbi/metadata.py +15 -10
- metadata/ingestion/source/dashboard/qliksense/metadata.py +11 -7
- metadata/ingestion/source/dashboard/quicksight/metadata.py +9 -5
- metadata/ingestion/source/dashboard/redash/metadata.py +23 -14
- metadata/ingestion/source/dashboard/superset/api_source.py +11 -8
- metadata/ingestion/source/dashboard/superset/client.py +16 -9
- metadata/ingestion/source/dashboard/superset/connection.py +3 -3
- metadata/ingestion/source/dashboard/superset/db_source.py +14 -10
- metadata/ingestion/source/dashboard/superset/mixin.py +22 -18
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/client.py +91 -11
- metadata/ingestion/source/dashboard/tableau/connection.py +10 -1
- metadata/ingestion/source/dashboard/tableau/metadata.py +58 -70
- metadata/ingestion/source/dashboard/tableau/models.py +0 -8
- metadata/ingestion/source/dashboard/tableau/queries.py +5 -5
- metadata/ingestion/source/database/athena/client.py +80 -0
- metadata/ingestion/source/database/athena/connection.py +7 -0
- metadata/ingestion/source/database/athena/metadata.py +161 -19
- metadata/ingestion/source/database/azuresql/metadata.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +24 -3
- metadata/ingestion/source/database/bigquery/metadata.py +39 -27
- metadata/ingestion/source/database/bigquery/queries.py +11 -4
- metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
- metadata/ingestion/source/database/bigquery/usage.py +1 -3
- metadata/ingestion/source/database/column_helpers.py +0 -10
- metadata/ingestion/source/database/column_type_parser.py +11 -5
- metadata/ingestion/source/database/common_db_source.py +8 -2
- metadata/ingestion/source/database/common_nosql_source.py +8 -4
- metadata/ingestion/source/database/database_service.py +89 -7
- metadata/ingestion/source/database/databricks/client.py +5 -10
- metadata/ingestion/source/database/databricks/connection.py +16 -55
- metadata/ingestion/source/database/databricks/lineage.py +29 -26
- metadata/ingestion/source/database/databricks/metadata.py +448 -11
- metadata/ingestion/source/database/databricks/queries.py +28 -0
- metadata/ingestion/source/database/databricks/query_parser.py +5 -1
- metadata/ingestion/source/database/databricks/usage.py +2 -2
- metadata/ingestion/source/database/datalake/connection.py +31 -4
- metadata/ingestion/source/database/datalake/metadata.py +113 -27
- metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
- metadata/ingestion/source/database/dbt/dbt_service.py +10 -14
- metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
- metadata/ingestion/source/database/dbt/metadata.py +11 -25
- metadata/ingestion/source/database/deltalake/metadata.py +6 -3
- metadata/ingestion/source/database/domodatabase/metadata.py +7 -6
- metadata/ingestion/source/database/doris/connection.py +72 -0
- metadata/ingestion/source/database/doris/metadata.py +315 -0
- metadata/ingestion/source/database/doris/queries.py +54 -0
- metadata/ingestion/source/database/doris/utils.py +64 -0
- metadata/ingestion/source/database/extended_sample_data.py +532 -0
- metadata/ingestion/source/database/glue/metadata.py +8 -5
- metadata/ingestion/source/database/hive/connection.py +0 -2
- metadata/ingestion/source/database/hive/utils.py +3 -0
- metadata/ingestion/source/database/iceberg/catalog/__init__.py +65 -0
- metadata/ingestion/source/database/iceberg/catalog/base.py +40 -0
- metadata/ingestion/source/database/iceberg/catalog/dynamodb.py +102 -0
- metadata/ingestion/source/database/iceberg/catalog/glue.py +88 -0
- metadata/ingestion/source/database/iceberg/catalog/hive.py +51 -0
- metadata/ingestion/source/database/iceberg/catalog/rest.py +84 -0
- metadata/ingestion/source/database/iceberg/connection.py +68 -0
- metadata/ingestion/source/database/iceberg/fs/__init__.py +52 -0
- metadata/ingestion/source/database/iceberg/fs/azure.py +44 -0
- metadata/ingestion/source/database/iceberg/fs/base.py +30 -0
- metadata/ingestion/source/database/iceberg/fs/s3.py +77 -0
- metadata/ingestion/source/database/iceberg/helper.py +124 -0
- metadata/ingestion/source/database/iceberg/metadata.py +311 -0
- metadata/ingestion/source/database/iceberg/models.py +66 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +72 -3
- metadata/ingestion/source/database/mongodb/connection.py +1 -5
- metadata/ingestion/source/database/mssql/lineage.py +2 -0
- metadata/ingestion/source/database/mssql/metadata.py +108 -4
- metadata/ingestion/source/database/mssql/models.py +30 -0
- metadata/ingestion/source/database/mssql/queries.py +179 -1
- metadata/ingestion/source/database/mssql/utils.py +207 -4
- metadata/ingestion/source/database/mysql/metadata.py +0 -2
- metadata/ingestion/source/database/oracle/metadata.py +108 -2
- metadata/ingestion/source/database/oracle/models.py +30 -0
- metadata/ingestion/source/database/oracle/queries.py +98 -17
- metadata/ingestion/source/database/oracle/utils.py +0 -1
- metadata/ingestion/source/database/postgres/lineage.py +32 -14
- metadata/ingestion/source/database/postgres/metadata.py +15 -7
- metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
- metadata/ingestion/source/database/postgres/queries.py +4 -2
- metadata/ingestion/source/database/postgres/query_parser.py +4 -72
- metadata/ingestion/source/database/postgres/usage.py +41 -0
- metadata/ingestion/source/database/postgres/utils.py +34 -0
- metadata/ingestion/source/database/query_parser_source.py +8 -2
- metadata/ingestion/source/database/redshift/metadata.py +14 -4
- metadata/ingestion/source/database/redshift/queries.py +10 -4
- metadata/ingestion/source/database/redshift/query_parser.py +16 -0
- metadata/ingestion/source/database/redshift/usage.py +0 -2
- metadata/ingestion/source/database/salesforce/metadata.py +32 -3
- metadata/ingestion/source/database/sample_data.py +120 -6
- metadata/ingestion/source/database/sas/client.py +184 -0
- metadata/ingestion/source/database/sas/connection.py +47 -0
- metadata/ingestion/source/database/sas/extension_attr.py +103 -0
- metadata/ingestion/source/database/sas/metadata.py +914 -0
- metadata/ingestion/source/database/snowflake/metadata.py +8 -51
- metadata/ingestion/source/database/snowflake/models.py +6 -1
- metadata/ingestion/source/database/snowflake/queries.py +0 -4
- metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
- metadata/ingestion/source/database/snowflake/utils.py +2 -6
- metadata/ingestion/source/database/stored_procedures_mixin.py +12 -8
- metadata/ingestion/source/database/unitycatalog/__init__.py +0 -0
- metadata/ingestion/source/database/unitycatalog/client.py +87 -0
- metadata/ingestion/source/database/unitycatalog/connection.py +97 -0
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/lineage.py +11 -11
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/metadata.py +42 -49
- metadata/ingestion/source/database/unitycatalog/query_parser.py +60 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +31 -0
- metadata/ingestion/source/database/usage_source.py +3 -2
- metadata/ingestion/source/messaging/common_broker_source.py +6 -4
- metadata/ingestion/source/messaging/kinesis/metadata.py +6 -3
- metadata/ingestion/source/messaging/messaging_service.py +6 -2
- metadata/ingestion/source/metadata/amundsen/metadata.py +10 -7
- metadata/ingestion/source/metadata/atlas/metadata.py +5 -5
- metadata/ingestion/source/mlmodel/mlflow/metadata.py +5 -2
- metadata/ingestion/source/mlmodel/mlmodel_service.py +6 -2
- metadata/ingestion/source/pipeline/airflow/connection.py +0 -12
- metadata/ingestion/source/pipeline/airflow/lineage_parser.py +12 -6
- metadata/ingestion/source/pipeline/airflow/metadata.py +63 -34
- metadata/ingestion/source/pipeline/airflow/models.py +5 -4
- metadata/ingestion/source/pipeline/dagster/metadata.py +7 -4
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +12 -9
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +7 -4
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +5 -2
- metadata/ingestion/source/pipeline/pipeline_service.py +6 -2
- metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
- metadata/ingestion/source/search/elasticsearch/connection.py +4 -1
- metadata/ingestion/source/search/elasticsearch/metadata.py +1 -2
- metadata/ingestion/source/search/search_service.py +6 -2
- metadata/ingestion/source/storage/s3/metadata.py +22 -17
- metadata/ingestion/source/storage/storage_service.py +53 -11
- metadata/ingestion/stage/table_usage.py +9 -2
- metadata/mixins/sqalchemy/sqa_mixin.py +14 -7
- metadata/parsers/protobuf_parser.py +29 -11
- metadata/pii/processor.py +9 -2
- metadata/profiler/api/models.py +19 -1
- metadata/profiler/interface/pandas/profiler_interface.py +59 -18
- metadata/profiler/interface/profiler_interface.py +13 -2
- metadata/profiler/interface/profiler_interface_factory.py +49 -14
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -0
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +26 -0
- metadata/profiler/interface/sqlalchemy/db2/__init__.py +0 -0
- metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +85 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +77 -34
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +7 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +33 -0
- metadata/profiler/metrics/composed/null_ratio.py +1 -1
- metadata/profiler/metrics/hybrid/histogram.py +1 -0
- metadata/profiler/metrics/static/max.py +4 -1
- metadata/profiler/metrics/static/min.py +4 -1
- metadata/profiler/metrics/system/queries/snowflake.py +89 -17
- metadata/profiler/metrics/system/system.py +62 -20
- metadata/profiler/orm/functions/length.py +1 -0
- metadata/profiler/orm/functions/median.py +7 -0
- metadata/profiler/orm/functions/table_metric_computer.py +462 -0
- metadata/profiler/orm/registry.py +1 -0
- metadata/profiler/processor/core.py +116 -52
- metadata/profiler/processor/default.py +14 -3
- metadata/profiler/processor/handle_partition.py +2 -2
- metadata/profiler/processor/processor.py +9 -4
- metadata/profiler/processor/sampler/sqlalchemy/bigquery/sampler.py +31 -3
- metadata/profiler/processor/sampler/sqlalchemy/sampler.py +29 -6
- metadata/profiler/processor/sampler/sqlalchemy/trino/sampler.py +10 -4
- metadata/profiler/source/base/profiler_source.py +5 -2
- metadata/profiler/source/bigquery/type_mapper.py +0 -1
- metadata/profiler/source/mariadb/functions/median.py +20 -0
- metadata/profiler/source/mariadb/metrics/window/first_quartile.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/median.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/third_quartile.py +10 -0
- metadata/profiler/source/metadata.py +43 -10
- metadata/profiler/source/metadata_ext.py +16 -50
- metadata/py.typed +0 -0
- metadata/readers/dataframe/json.py +5 -4
- metadata/readers/file/api_reader.py +0 -1
- metadata/utils/constants.py +5 -0
- metadata/utils/datalake/datalake_utils.py +363 -129
- metadata/utils/entity_link.py +26 -6
- metadata/utils/fqn.py +20 -0
- metadata/utils/helpers.py +55 -9
- metadata/utils/importer.py +2 -3
- metadata/utils/life_cycle_utils.py +4 -4
- metadata/utils/logger.py +13 -2
- metadata/utils/partition.py +10 -5
- metadata/utils/secrets/client/loader.py +0 -1
- metadata/utils/secrets/noop_secrets_manager.py +4 -3
- metadata/utils/secrets/secrets_manager_factory.py +3 -4
- metadata/utils/{source_hash_utils.py → source_hash.py} +10 -1
- metadata/utils/sqlalchemy_utils.py +21 -0
- metadata/utils/storage_metadata_config.py +42 -1
- metadata/utils/tag_utils.py +5 -2
- metadata/workflow/application.py +154 -0
- metadata/workflow/application_output_handler.py +34 -0
- metadata/workflow/base.py +84 -153
- metadata/workflow/data_insight.py +8 -7
- metadata/workflow/data_quality.py +3 -2
- metadata/workflow/ingestion.py +203 -0
- metadata/workflow/metadata.py +2 -3
- metadata/workflow/output_handler.py +204 -0
- metadata/workflow/profiler.py +2 -2
- metadata/workflow/usage.py +3 -4
- metadata/workflow/workflow_output_handler.py +15 -255
- metadata/workflow/workflow_status_mixin.py +44 -52
- openmetadata_ingestion-1.3.0.0.dist-info/METADATA +749 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/RECORD +812 -725
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/WHEEL +1 -1
- metadata/generated/schema/entity/applications/appConfig.py +0 -21
- metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +0 -17
- metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +0 -38
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +0 -44
- metadata/generated/schema/events/dataInsightAlertConfig.py +0 -17
- metadata/generated/schema/events/entitySpelFilters.py +0 -19
- metadata/ingestion/models/es_documents.py +0 -339
- metadata/ingestion/ometa/mixins/glossary_mixin.py +0 -501
- metadata/ingestion/ometa/provider_registry.py +0 -144
- metadata/ingestion/source/database/databricks/legacy/lineage.py +0 -51
- metadata/ingestion/source/database/databricks/legacy/metadata.py +0 -339
- metadata/ingestion/source/metadata/metadata_elasticsearch/metadata.py +0 -144
- metadata/profiler/orm/functions/table_metric_construct.py +0 -365
- openmetadata_ingestion-1.2.5.2.dist-info/METADATA +0 -426
- /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks/unity_catalog → doris}/__init__.py +0 -0
- /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/sas}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.5.2.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -13,7 +13,6 @@ Snowflake source module
|
|
|
13
13
|
"""
|
|
14
14
|
import json
|
|
15
15
|
import traceback
|
|
16
|
-
import urllib
|
|
17
16
|
from typing import Dict, Iterable, List, Optional, Tuple
|
|
18
17
|
|
|
19
18
|
import sqlparse
|
|
@@ -30,21 +29,21 @@ from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
|
30
29
|
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedureCode
|
|
31
30
|
from metadata.generated.schema.entity.data.table import (
|
|
32
31
|
IntervalType,
|
|
33
|
-
Table,
|
|
34
32
|
TablePartition,
|
|
35
33
|
TableType,
|
|
36
34
|
)
|
|
37
35
|
from metadata.generated.schema.entity.services.connections.database.snowflakeConnection import (
|
|
38
36
|
SnowflakeConnection,
|
|
39
37
|
)
|
|
38
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
39
|
+
StackTraceError,
|
|
40
|
+
)
|
|
40
41
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
41
42
|
Source as WorkflowSource,
|
|
42
43
|
)
|
|
43
44
|
from metadata.generated.schema.type.basic import EntityName, SourceUrl
|
|
44
|
-
from metadata.
|
|
45
|
-
from metadata.ingestion.api.models import Either, StackTraceError
|
|
45
|
+
from metadata.ingestion.api.models import Either
|
|
46
46
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
47
|
-
from metadata.ingestion.models.life_cycle import OMetaLifeCycleData
|
|
48
47
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
49
48
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
50
49
|
from metadata.ingestion.source.database.column_type_parser import create_sqlalchemy_type
|
|
@@ -99,7 +98,6 @@ from metadata.utils.helpers import get_start_and_end
|
|
|
99
98
|
from metadata.utils.logger import ingestion_logger
|
|
100
99
|
from metadata.utils.sqlalchemy_utils import get_all_table_comments
|
|
101
100
|
from metadata.utils.tag_utils import get_ometa_tag_and_classification
|
|
102
|
-
from metadata.utils.time_utils import convert_timestamp_to_milliseconds
|
|
103
101
|
|
|
104
102
|
ischema_names["VARIANT"] = VARIANT
|
|
105
103
|
ischema_names["GEOGRAPHY"] = create_sqlalchemy_type("GEOGRAPHY")
|
|
@@ -145,6 +143,7 @@ class SnowflakeSource(
|
|
|
145
143
|
|
|
146
144
|
self._account: Optional[str] = None
|
|
147
145
|
self._org_name: Optional[str] = None
|
|
146
|
+
self.life_cycle_query = SNOWFLAKE_LIFE_CYCLE_QUERY
|
|
148
147
|
|
|
149
148
|
@classmethod
|
|
150
149
|
def create(cls, config_dict, metadata: OpenMetadata):
|
|
@@ -363,7 +362,7 @@ class SnowflakeSource(
|
|
|
363
362
|
left=StackTraceError(
|
|
364
363
|
name="Tags and Classifications",
|
|
365
364
|
error=f"Failed to fetch tags due to [{inner_exc}]",
|
|
366
|
-
|
|
365
|
+
stackTrace=traceback.format_exc(),
|
|
367
366
|
)
|
|
368
367
|
)
|
|
369
368
|
|
|
@@ -476,48 +475,6 @@ class SnowflakeSource(
|
|
|
476
475
|
logger.error(f"Unable to get source url: {exc}")
|
|
477
476
|
return None
|
|
478
477
|
|
|
479
|
-
def yield_life_cycle_data(self, _) -> Iterable[Either[OMetaLifeCycleData]]:
|
|
480
|
-
"""
|
|
481
|
-
Get the life cycle data of the table
|
|
482
|
-
"""
|
|
483
|
-
table_fqn = fqn.build(
|
|
484
|
-
self.metadata,
|
|
485
|
-
entity_type=Table,
|
|
486
|
-
service_name=self.context.database_service,
|
|
487
|
-
database_name=self.context.database,
|
|
488
|
-
schema_name=self.context.database_schema,
|
|
489
|
-
table_name=self.context.table,
|
|
490
|
-
skip_es_search=True,
|
|
491
|
-
)
|
|
492
|
-
table = self.metadata.get_by_name(entity=Table, fqn=table_fqn)
|
|
493
|
-
if table:
|
|
494
|
-
try:
|
|
495
|
-
life_cycle_data = self.life_cycle_query_dict(
|
|
496
|
-
query=SNOWFLAKE_LIFE_CYCLE_QUERY.format(
|
|
497
|
-
database_name=table.database.name,
|
|
498
|
-
schema_name=table.databaseSchema.name,
|
|
499
|
-
)
|
|
500
|
-
).get(table.name.__root__)
|
|
501
|
-
if life_cycle_data:
|
|
502
|
-
life_cycle = LifeCycle(
|
|
503
|
-
created=AccessDetails(
|
|
504
|
-
timestamp=convert_timestamp_to_milliseconds(
|
|
505
|
-
life_cycle_data.created_at.timestamp()
|
|
506
|
-
)
|
|
507
|
-
)
|
|
508
|
-
)
|
|
509
|
-
yield Either(
|
|
510
|
-
right=OMetaLifeCycleData(entity=table, life_cycle=life_cycle)
|
|
511
|
-
)
|
|
512
|
-
except Exception as exc:
|
|
513
|
-
yield Either(
|
|
514
|
-
left=StackTraceError(
|
|
515
|
-
name=table.name.__root__,
|
|
516
|
-
error=f"Unable to get the table life cycle data for table {table.name.__root__}: {exc}",
|
|
517
|
-
stack_trace=traceback.format_exc(),
|
|
518
|
-
)
|
|
519
|
-
)
|
|
520
|
-
|
|
521
478
|
def query_view_names_and_types(
|
|
522
479
|
self, schema_name: str
|
|
523
480
|
) -> Iterable[TableNameAndType]:
|
|
@@ -581,7 +538,7 @@ class SnowflakeSource(
|
|
|
581
538
|
database_name=self.context.database,
|
|
582
539
|
schema_name=self.context.database_schema,
|
|
583
540
|
procedure_name=stored_procedure.name,
|
|
584
|
-
procedure_signature=
|
|
541
|
+
procedure_signature=stored_procedure.unquote_signature(),
|
|
585
542
|
)
|
|
586
543
|
)
|
|
587
544
|
return dict(res.all()).get("body", "")
|
|
@@ -623,7 +580,7 @@ class SnowflakeSource(
|
|
|
623
580
|
left=StackTraceError(
|
|
624
581
|
name=stored_procedure.name,
|
|
625
582
|
error=f"Error yielding Stored Procedure [{stored_procedure.name}] due to [{exc}]",
|
|
626
|
-
|
|
583
|
+
stackTrace=traceback.format_exc(),
|
|
627
584
|
)
|
|
628
585
|
)
|
|
629
586
|
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"""
|
|
12
12
|
Snowflake models
|
|
13
13
|
"""
|
|
14
|
+
import urllib
|
|
14
15
|
from typing import Optional
|
|
15
16
|
|
|
16
17
|
from pydantic import BaseModel, Field, validator
|
|
@@ -58,7 +59,8 @@ class SnowflakeStoredProcedure(BaseModel):
|
|
|
58
59
|
try:
|
|
59
60
|
clean_signature = signature.replace("(", "").replace(")", "")
|
|
60
61
|
if not clean_signature:
|
|
61
|
-
return
|
|
62
|
+
# If removing the () leaves us with nothing, then just return the parenthesis
|
|
63
|
+
return "()"
|
|
62
64
|
|
|
63
65
|
signature_list = clean_signature.split(",")
|
|
64
66
|
clean_signature_list = [elem.split(" ")[-1] for elem in signature_list]
|
|
@@ -67,3 +69,6 @@ class SnowflakeStoredProcedure(BaseModel):
|
|
|
67
69
|
except Exception as exc:
|
|
68
70
|
logger.warning(f"Error cleaning up Stored Procedure signature - [{exc}]")
|
|
69
71
|
return signature
|
|
72
|
+
|
|
73
|
+
def unquote_signature(self) -> Optional[str]:
|
|
74
|
+
return urllib.parse.unquote(self.signature) if self.signature else "()"
|
|
@@ -187,7 +187,6 @@ SNOWFLAKE_GET_STORED_PROCEDURE_QUERIES = textwrap.dedent(
|
|
|
187
187
|
"""
|
|
188
188
|
WITH SP_HISTORY AS (
|
|
189
189
|
SELECT
|
|
190
|
-
QUERY_ID,
|
|
191
190
|
QUERY_TEXT,
|
|
192
191
|
SESSION_ID,
|
|
193
192
|
START_TIME,
|
|
@@ -198,7 +197,6 @@ WITH SP_HISTORY AS (
|
|
|
198
197
|
),
|
|
199
198
|
Q_HISTORY AS (
|
|
200
199
|
SELECT
|
|
201
|
-
QUERY_ID,
|
|
202
200
|
QUERY_TYPE,
|
|
203
201
|
QUERY_TEXT,
|
|
204
202
|
SESSION_ID,
|
|
@@ -215,8 +213,6 @@ Q_HISTORY AS (
|
|
|
215
213
|
AND START_TIME >= '{start_date}'
|
|
216
214
|
)
|
|
217
215
|
SELECT
|
|
218
|
-
SP.QUERY_ID AS PROCEDURE_ID,
|
|
219
|
-
Q.QUERY_ID AS QUERY_ID,
|
|
220
216
|
Q.QUERY_TYPE AS QUERY_TYPE,
|
|
221
217
|
Q.DATABASE_NAME AS QUERY_DATABASE_NAME,
|
|
222
218
|
Q.SCHEMA_NAME AS QUERY_SCHEMA_NAME,
|
|
@@ -24,7 +24,6 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
24
24
|
from metadata.generated.schema.type.tableQuery import TableQuery
|
|
25
25
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
26
26
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
27
|
-
from metadata.ingestion.source.connections import get_connection
|
|
28
27
|
from metadata.ingestion.source.database.query_parser_source import QueryParserSource
|
|
29
28
|
from metadata.ingestion.source.database.snowflake.queries import (
|
|
30
29
|
SNOWFLAKE_SESSION_TAG_QUERY,
|
|
@@ -61,7 +60,9 @@ class SnowflakeQueryParserSource(QueryParserSource, ABC):
|
|
|
61
60
|
filters=self.get_filters(),
|
|
62
61
|
)
|
|
63
62
|
|
|
64
|
-
def check_life_cycle_query(
|
|
63
|
+
def check_life_cycle_query(
|
|
64
|
+
self, query_type: Optional[str], query_text: Optional[str]
|
|
65
|
+
) -> bool:
|
|
65
66
|
"""
|
|
66
67
|
returns true if query is to be used for life cycle processing.
|
|
67
68
|
|
|
@@ -87,24 +88,8 @@ class SnowflakeQueryParserSource(QueryParserSource, ABC):
|
|
|
87
88
|
)
|
|
88
89
|
|
|
89
90
|
def get_table_query(self) -> Iterable[TableQuery]:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
use_db_query = f"USE DATABASE {database}"
|
|
93
|
-
self.engine.execute(use_db_query)
|
|
94
|
-
self.set_session_query_tag()
|
|
95
|
-
yield from super().get_table_query()
|
|
96
|
-
else:
|
|
97
|
-
query = "SHOW DATABASES"
|
|
98
|
-
results = self.engine.execute(query)
|
|
99
|
-
for res in results:
|
|
100
|
-
row = list(res)
|
|
101
|
-
use_db_query = f"USE DATABASE {row[1]}"
|
|
102
|
-
self.engine.execute(use_db_query)
|
|
103
|
-
logger.info(f"Ingesting from database: {row[1]}")
|
|
104
|
-
self.config.serviceConnection.__root__.config.database = row[1]
|
|
105
|
-
self.engine = get_connection(self.service_connection)
|
|
106
|
-
self.set_session_query_tag()
|
|
107
|
-
yield from super().get_table_query()
|
|
91
|
+
self.set_session_query_tag()
|
|
92
|
+
yield from super().get_table_query()
|
|
108
93
|
|
|
109
94
|
def get_database_name(self, data: dict) -> str: # pylint: disable=arguments-differ
|
|
110
95
|
"""
|
|
@@ -39,7 +39,6 @@ from metadata.utils.sqlalchemy_utils import (
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def _quoted_name(entity_name: Optional[str]) -> Optional[str]:
|
|
42
|
-
|
|
43
42
|
if entity_name:
|
|
44
43
|
return fqn.quote_name(entity_name)
|
|
45
44
|
|
|
@@ -121,13 +120,10 @@ def get_view_definition( # pylint: disable=unused-argument
|
|
|
121
120
|
schema = schema or self.default_schema_name
|
|
122
121
|
if schema:
|
|
123
122
|
cursor = connection.execute(
|
|
124
|
-
"
|
|
125
|
-
f"LIKE '{view_name}' IN {schema}"
|
|
123
|
+
f"SELECT GET_DDL('VIEW','{schema}.{view_name}') AS \"text\""
|
|
126
124
|
)
|
|
127
125
|
else:
|
|
128
|
-
cursor = connection.execute(
|
|
129
|
-
"SHOW /* sqlalchemy:get_view_definition */ VIEWS " f"LIKE '{view_name}'"
|
|
130
|
-
)
|
|
126
|
+
cursor = connection.execute(f"SELECT GET_DDL('VIEW','{view_name}') AS \"text\"")
|
|
131
127
|
n2i = self.__class__._map_name_to_idx(cursor) # pylint: disable=protected-access
|
|
132
128
|
try:
|
|
133
129
|
ret = cursor.fetchone()
|
|
@@ -24,13 +24,16 @@ from sqlalchemy.engine import Engine
|
|
|
24
24
|
from metadata.generated.schema.api.data.createQuery import CreateQueryRequest
|
|
25
25
|
from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
|
|
26
26
|
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedure
|
|
27
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
28
|
+
StackTraceError,
|
|
29
|
+
)
|
|
27
30
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
28
31
|
DatabaseServiceMetadataPipeline,
|
|
29
32
|
)
|
|
30
33
|
from metadata.generated.schema.type.basic import SqlQuery, Timestamp
|
|
31
34
|
from metadata.generated.schema.type.entityLineage import Source as LineageSource
|
|
32
35
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
33
|
-
from metadata.ingestion.api.models import Either
|
|
36
|
+
from metadata.ingestion.api.models import Either
|
|
34
37
|
from metadata.ingestion.api.status import Status
|
|
35
38
|
from metadata.ingestion.lineage.models import ConnectionTypeDialectMapper
|
|
36
39
|
from metadata.ingestion.lineage.sql_lineage import get_lineage_by_query
|
|
@@ -48,15 +51,14 @@ class QueryByProcedure(BaseModel):
|
|
|
48
51
|
Query(ies) executed by each stored procedure
|
|
49
52
|
"""
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
query_id: str = Field(..., alias="QUERY_ID")
|
|
54
|
+
procedure_name: str = Field(None, alias="PROCEDURE_NAME")
|
|
53
55
|
query_type: str = Field(..., alias="QUERY_TYPE")
|
|
54
56
|
query_database_name: str = Field(None, alias="QUERY_DATABASE_NAME")
|
|
55
57
|
query_schema_name: str = Field(None, alias="QUERY_SCHEMA_NAME")
|
|
56
58
|
procedure_text: str = Field(..., alias="PROCEDURE_TEXT")
|
|
57
59
|
procedure_start_time: datetime = Field(..., alias="PROCEDURE_START_TIME")
|
|
58
60
|
procedure_end_time: datetime = Field(..., alias="PROCEDURE_END_TIME")
|
|
59
|
-
query_start_time: datetime = Field(..., alias="QUERY_START_TIME")
|
|
61
|
+
query_start_time: Optional[datetime] = Field(..., alias="QUERY_START_TIME")
|
|
60
62
|
query_duration: Optional[float] = Field(None, alias="QUERY_DURATION")
|
|
61
63
|
query_text: str = Field(..., alias="QUERY_TEXT")
|
|
62
64
|
query_user_name: Optional[str] = Field(None, alias="QUERY_USER_NAME")
|
|
@@ -106,8 +108,11 @@ class StoredProcedureMixin(ABC):
|
|
|
106
108
|
for row in results:
|
|
107
109
|
try:
|
|
108
110
|
query_by_procedure = QueryByProcedure.parse_obj(dict(row))
|
|
109
|
-
procedure_name =
|
|
110
|
-
|
|
111
|
+
procedure_name = (
|
|
112
|
+
query_by_procedure.procedure_name
|
|
113
|
+
or get_procedure_name_from_call(
|
|
114
|
+
query_text=query_by_procedure.procedure_text,
|
|
115
|
+
)
|
|
111
116
|
)
|
|
112
117
|
queries_dict[procedure_name].append(query_by_procedure)
|
|
113
118
|
except Exception as exc:
|
|
@@ -115,7 +120,7 @@ class StoredProcedureMixin(ABC):
|
|
|
115
120
|
StackTraceError(
|
|
116
121
|
name="Stored Procedure",
|
|
117
122
|
error=f"Error trying to get procedure name due to [{exc}]",
|
|
118
|
-
|
|
123
|
+
stackTrace=traceback.format_exc(),
|
|
119
124
|
)
|
|
120
125
|
)
|
|
121
126
|
|
|
@@ -148,7 +153,6 @@ class StoredProcedureMixin(ABC):
|
|
|
148
153
|
query_type=query_by_procedure.query_type,
|
|
149
154
|
query_text=query_by_procedure.query_text,
|
|
150
155
|
):
|
|
151
|
-
|
|
152
156
|
self.context.stored_procedure_query_lineage = True
|
|
153
157
|
for either_lineage in get_lineage_by_query(
|
|
154
158
|
self.metadata,
|
|
File without changes
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
Client to interact with databricks apis
|
|
13
|
+
"""
|
|
14
|
+
import json
|
|
15
|
+
import traceback
|
|
16
|
+
|
|
17
|
+
from metadata.ingestion.source.database.databricks.client import (
|
|
18
|
+
API_TIMEOUT,
|
|
19
|
+
DatabricksClient,
|
|
20
|
+
)
|
|
21
|
+
from metadata.ingestion.source.database.unitycatalog.models import (
|
|
22
|
+
LineageColumnStreams,
|
|
23
|
+
LineageTableStreams,
|
|
24
|
+
)
|
|
25
|
+
from metadata.utils.logger import ingestion_logger
|
|
26
|
+
|
|
27
|
+
logger = ingestion_logger()
|
|
28
|
+
TABLE_LINEAGE_PATH = "/lineage-tracking/table-lineage/get"
|
|
29
|
+
COLUMN_LINEAGE_PATH = "/lineage-tracking/column-lineage/get"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class UnityCatalogClient(DatabricksClient):
|
|
33
|
+
"""
|
|
34
|
+
UnityCatalogClient creates a Databricks connection based on DatabricksCredentials.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def get_table_lineage(self, table_name: str) -> LineageTableStreams:
|
|
38
|
+
"""
|
|
39
|
+
Method returns table lineage details
|
|
40
|
+
"""
|
|
41
|
+
try:
|
|
42
|
+
data = {
|
|
43
|
+
"table_name": table_name,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
response = self.client.get(
|
|
47
|
+
f"{self.base_url}{TABLE_LINEAGE_PATH}",
|
|
48
|
+
headers=self.headers,
|
|
49
|
+
data=json.dumps(data),
|
|
50
|
+
timeout=API_TIMEOUT,
|
|
51
|
+
).json()
|
|
52
|
+
if response:
|
|
53
|
+
return LineageTableStreams(**response)
|
|
54
|
+
|
|
55
|
+
except Exception as exc:
|
|
56
|
+
logger.debug(traceback.format_exc())
|
|
57
|
+
logger.error(exc)
|
|
58
|
+
|
|
59
|
+
return LineageTableStreams()
|
|
60
|
+
|
|
61
|
+
def get_column_lineage(
|
|
62
|
+
self, table_name: str, column_name: str
|
|
63
|
+
) -> LineageColumnStreams:
|
|
64
|
+
"""
|
|
65
|
+
Method returns table lineage details
|
|
66
|
+
"""
|
|
67
|
+
try:
|
|
68
|
+
data = {
|
|
69
|
+
"table_name": table_name,
|
|
70
|
+
"column_name": column_name,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
response = self.client.get(
|
|
74
|
+
f"{self.base_url}{COLUMN_LINEAGE_PATH}",
|
|
75
|
+
headers=self.headers,
|
|
76
|
+
data=json.dumps(data),
|
|
77
|
+
timeout=API_TIMEOUT,
|
|
78
|
+
).json()
|
|
79
|
+
|
|
80
|
+
if response:
|
|
81
|
+
return LineageColumnStreams(**response)
|
|
82
|
+
|
|
83
|
+
except Exception as exc:
|
|
84
|
+
logger.debug(traceback.format_exc())
|
|
85
|
+
logger.error(exc)
|
|
86
|
+
|
|
87
|
+
return LineageColumnStreams()
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Source connection handler
|
|
14
|
+
"""
|
|
15
|
+
from functools import partial
|
|
16
|
+
from typing import Optional
|
|
17
|
+
|
|
18
|
+
from databricks.sdk import WorkspaceClient
|
|
19
|
+
|
|
20
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
21
|
+
Workflow as AutomationWorkflow,
|
|
22
|
+
)
|
|
23
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
24
|
+
UnityCatalogConnection,
|
|
25
|
+
)
|
|
26
|
+
from metadata.ingestion.connections.test_connections import test_connection_steps
|
|
27
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
28
|
+
from metadata.ingestion.source.database.unitycatalog.client import UnityCatalogClient
|
|
29
|
+
from metadata.ingestion.source.database.unitycatalog.models import DatabricksTable
|
|
30
|
+
from metadata.utils.db_utils import get_host_from_host_port
|
|
31
|
+
from metadata.utils.logger import ingestion_logger
|
|
32
|
+
|
|
33
|
+
logger = ingestion_logger()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_connection_url(connection: UnityCatalogConnection) -> str:
|
|
37
|
+
url = f"{connection.scheme.value}://token:{connection.token.get_secret_value()}@{connection.hostPort}"
|
|
38
|
+
return url
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def get_connection(connection: UnityCatalogConnection) -> WorkspaceClient:
|
|
42
|
+
"""
|
|
43
|
+
Create connection
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
return WorkspaceClient(
|
|
47
|
+
host=get_host_from_host_port(connection.hostPort),
|
|
48
|
+
token=connection.token.get_secret_value(),
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def test_connection(
|
|
53
|
+
metadata: OpenMetadata,
|
|
54
|
+
connection: WorkspaceClient,
|
|
55
|
+
service_connection: UnityCatalogConnection,
|
|
56
|
+
automation_workflow: Optional[AutomationWorkflow] = None,
|
|
57
|
+
) -> None:
|
|
58
|
+
"""
|
|
59
|
+
Test connection. This can be executed either as part
|
|
60
|
+
of a metadata workflow or during an Automation Workflow
|
|
61
|
+
"""
|
|
62
|
+
client = UnityCatalogClient(service_connection)
|
|
63
|
+
table_obj = DatabricksTable()
|
|
64
|
+
|
|
65
|
+
def get_catalogs(connection: WorkspaceClient, table_obj: DatabricksTable):
|
|
66
|
+
for catalog in connection.catalogs.list():
|
|
67
|
+
table_obj.catalog_name = catalog.name
|
|
68
|
+
break
|
|
69
|
+
|
|
70
|
+
def get_schemas(connection: WorkspaceClient, table_obj: DatabricksTable):
|
|
71
|
+
for schema in connection.schemas.list(catalog_name=table_obj.catalog_name):
|
|
72
|
+
table_obj.schema_name = schema.name
|
|
73
|
+
break
|
|
74
|
+
|
|
75
|
+
def get_tables(connection: WorkspaceClient, table_obj: DatabricksTable):
|
|
76
|
+
for table in connection.tables.list(
|
|
77
|
+
catalog_name=table_obj.catalog_name, schema_name=table_obj.schema_name
|
|
78
|
+
):
|
|
79
|
+
table_obj.name = table.name
|
|
80
|
+
break
|
|
81
|
+
|
|
82
|
+
test_fn = {
|
|
83
|
+
"CheckAccess": connection.catalogs.list,
|
|
84
|
+
"GetDatabases": partial(get_catalogs, connection, table_obj),
|
|
85
|
+
"GetSchemas": partial(get_schemas, connection, table_obj),
|
|
86
|
+
"GetTables": partial(get_tables, connection, table_obj),
|
|
87
|
+
"GetViews": partial(get_tables, connection, table_obj),
|
|
88
|
+
"GetQueries": client.test_query_api_access,
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
test_connection_steps(
|
|
92
|
+
metadata=metadata,
|
|
93
|
+
test_fn=test_fn,
|
|
94
|
+
service_type=service_connection.type.value,
|
|
95
|
+
automation_workflow=automation_workflow,
|
|
96
|
+
timeout_seconds=service_connection.connectionTimeout,
|
|
97
|
+
)
|
|
@@ -16,8 +16,8 @@ from typing import Iterable, Optional
|
|
|
16
16
|
from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
|
|
17
17
|
from metadata.generated.schema.entity.data.database import Database
|
|
18
18
|
from metadata.generated.schema.entity.data.table import Table
|
|
19
|
-
from metadata.generated.schema.entity.services.connections.database.
|
|
20
|
-
|
|
19
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
20
|
+
UnityCatalogConnection,
|
|
21
21
|
)
|
|
22
22
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
23
23
|
Source as WorkflowSource,
|
|
@@ -33,18 +33,18 @@ from metadata.ingestion.api.steps import InvalidSourceException, Source
|
|
|
33
33
|
from metadata.ingestion.lineage.sql_lineage import get_column_fqn
|
|
34
34
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
35
35
|
from metadata.ingestion.source.connections import get_test_connection_fn
|
|
36
|
-
from metadata.ingestion.source.database.
|
|
37
|
-
from metadata.ingestion.source.database.
|
|
38
|
-
from metadata.ingestion.source.database.
|
|
36
|
+
from metadata.ingestion.source.database.unitycatalog.client import UnityCatalogClient
|
|
37
|
+
from metadata.ingestion.source.database.unitycatalog.connection import get_connection
|
|
38
|
+
from metadata.ingestion.source.database.unitycatalog.models import LineageTableStreams
|
|
39
39
|
from metadata.utils import fqn
|
|
40
40
|
from metadata.utils.logger import ingestion_logger
|
|
41
41
|
|
|
42
42
|
logger = ingestion_logger()
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
class
|
|
45
|
+
class UnitycatalogLineageSource(Source):
|
|
46
46
|
"""
|
|
47
|
-
|
|
47
|
+
Lineage Unity Catalog Source
|
|
48
48
|
"""
|
|
49
49
|
|
|
50
50
|
def __init__(
|
|
@@ -57,7 +57,7 @@ class DatabricksUnityCatalogLineageSource(Source):
|
|
|
57
57
|
self.metadata = metadata
|
|
58
58
|
self.service_connection = self.config.serviceConnection.__root__.config
|
|
59
59
|
self.source_config = self.config.sourceConfig.config
|
|
60
|
-
self.client =
|
|
60
|
+
self.client = UnityCatalogClient(self.service_connection)
|
|
61
61
|
self.connection_obj = get_connection(self.service_connection)
|
|
62
62
|
self.test_connection()
|
|
63
63
|
|
|
@@ -75,10 +75,10 @@ class DatabricksUnityCatalogLineageSource(Source):
|
|
|
75
75
|
def create(cls, config_dict, metadata: OpenMetadata):
|
|
76
76
|
"""Create class instance"""
|
|
77
77
|
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
78
|
-
connection:
|
|
79
|
-
if not isinstance(connection,
|
|
78
|
+
connection: UnityCatalogConnection = config.serviceConnection.__root__.config
|
|
79
|
+
if not isinstance(connection, UnityCatalogConnection):
|
|
80
80
|
raise InvalidSourceException(
|
|
81
|
-
f"Expected
|
|
81
|
+
f"Expected UnityCatalogConnection, but got {connection}"
|
|
82
82
|
)
|
|
83
83
|
return cls(config, metadata)
|
|
84
84
|
|