openmetadata-ingestion 1.2.5.1__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.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/RECORD +812 -725
- {openmetadata_ingestion-1.2.5.1.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.1.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.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.5.1.dist-info → openmetadata_ingestion-1.3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -13,11 +13,10 @@ Databricks Unity Catalog Source source methods.
|
|
|
13
13
|
"""
|
|
14
14
|
import json
|
|
15
15
|
import traceback
|
|
16
|
-
from typing import Any,
|
|
16
|
+
from typing import Any, Iterable, List, Optional, Tuple, Union
|
|
17
17
|
|
|
18
18
|
from databricks.sdk.service.catalog import ColumnInfo
|
|
19
19
|
from databricks.sdk.service.catalog import TableConstraint as DBTableConstraint
|
|
20
|
-
from databricks.sdk.service.catalog import TableConstraintList
|
|
21
20
|
|
|
22
21
|
from metadata.generated.schema.api.data.createDatabase import CreateDatabaseRequest
|
|
23
22
|
from metadata.generated.schema.api.data.createDatabaseSchema import (
|
|
@@ -38,8 +37,11 @@ from metadata.generated.schema.entity.data.table import (
|
|
|
38
37
|
TableConstraint,
|
|
39
38
|
TableType,
|
|
40
39
|
)
|
|
41
|
-
from metadata.generated.schema.entity.services.connections.database.
|
|
42
|
-
|
|
40
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
41
|
+
UnityCatalogConnection,
|
|
42
|
+
)
|
|
43
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
44
|
+
StackTraceError,
|
|
43
45
|
)
|
|
44
46
|
from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline import (
|
|
45
47
|
DatabaseServiceMetadataPipeline,
|
|
@@ -47,22 +49,22 @@ from metadata.generated.schema.metadataIngestion.databaseServiceMetadataPipeline
|
|
|
47
49
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
48
50
|
Source as WorkflowSource,
|
|
49
51
|
)
|
|
50
|
-
from metadata.ingestion.api.models import Either
|
|
52
|
+
from metadata.ingestion.api.models import Either
|
|
51
53
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
52
54
|
from metadata.ingestion.lineage.sql_lineage import get_column_fqn
|
|
53
55
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
54
56
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
55
57
|
from metadata.ingestion.source.database.column_type_parser import ColumnTypeParser
|
|
56
58
|
from metadata.ingestion.source.database.database_service import DatabaseServiceSource
|
|
57
|
-
from metadata.ingestion.source.database.
|
|
58
|
-
from metadata.ingestion.source.database.
|
|
59
|
+
from metadata.ingestion.source.database.multi_db_source import MultiDBSource
|
|
60
|
+
from metadata.ingestion.source.database.stored_procedures_mixin import QueryByProcedure
|
|
61
|
+
from metadata.ingestion.source.database.unitycatalog.connection import get_connection
|
|
62
|
+
from metadata.ingestion.source.database.unitycatalog.models import (
|
|
59
63
|
ColumnJson,
|
|
60
64
|
ElementType,
|
|
61
65
|
ForeignConstrains,
|
|
62
66
|
Type,
|
|
63
67
|
)
|
|
64
|
-
from metadata.ingestion.source.database.multi_db_source import MultiDBSource
|
|
65
|
-
from metadata.ingestion.source.database.stored_procedures_mixin import QueryByProcedure
|
|
66
68
|
from metadata.ingestion.source.models import TableView
|
|
67
69
|
from metadata.utils import fqn
|
|
68
70
|
from metadata.utils.db_utils import get_view_lineage
|
|
@@ -72,20 +74,7 @@ from metadata.utils.logger import ingestion_logger
|
|
|
72
74
|
logger = ingestion_logger()
|
|
73
75
|
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
@classmethod
|
|
77
|
-
def from_dict(cls, dct: Dict[str, Any]) -> "TableConstraintList":
|
|
78
|
-
return cls(
|
|
79
|
-
table_constraints=[
|
|
80
|
-
DBTableConstraint.from_dict(constraint) for constraint in dct
|
|
81
|
-
]
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
TableConstraintList.from_dict = from_dict
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
77
|
+
class UnitycatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
89
78
|
"""
|
|
90
79
|
Implements the necessary methods to extract
|
|
91
80
|
Database metadata from Databricks Source using
|
|
@@ -100,7 +89,7 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
100
89
|
)
|
|
101
90
|
self.context.table_views = []
|
|
102
91
|
self.metadata = metadata
|
|
103
|
-
self.service_connection:
|
|
92
|
+
self.service_connection: UnityCatalogConnection = (
|
|
104
93
|
self.config.serviceConnection.__root__.config
|
|
105
94
|
)
|
|
106
95
|
self.client = get_connection(self.service_connection)
|
|
@@ -118,10 +107,10 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
118
107
|
@classmethod
|
|
119
108
|
def create(cls, config_dict, metadata: OpenMetadata):
|
|
120
109
|
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
121
|
-
connection:
|
|
122
|
-
if not isinstance(connection,
|
|
110
|
+
connection: UnityCatalogConnection = config.serviceConnection.__root__.config
|
|
111
|
+
if not isinstance(connection, UnityCatalogConnection):
|
|
123
112
|
raise InvalidSourceException(
|
|
124
|
-
f"Expected
|
|
113
|
+
f"Expected UnityCatalogConnection, but got {connection}"
|
|
125
114
|
)
|
|
126
115
|
return cls(config, metadata)
|
|
127
116
|
|
|
@@ -164,7 +153,7 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
164
153
|
StackTraceError(
|
|
165
154
|
name=catalog_name,
|
|
166
155
|
error=f"Unexpected exception to get database name [{catalog_name}]: {exc}",
|
|
167
|
-
|
|
156
|
+
stackTrace=traceback.format_exc(),
|
|
168
157
|
)
|
|
169
158
|
)
|
|
170
159
|
|
|
@@ -210,7 +199,7 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
210
199
|
StackTraceError(
|
|
211
200
|
name=schema.name,
|
|
212
201
|
error=f"Unexpected exception to get database schema [{schema.name}]: {exc}",
|
|
213
|
-
|
|
202
|
+
stackTrace=traceback.format_exc(),
|
|
214
203
|
)
|
|
215
204
|
)
|
|
216
205
|
|
|
@@ -233,7 +222,7 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
233
222
|
)
|
|
234
223
|
)
|
|
235
224
|
|
|
236
|
-
def get_tables_name_and_type(self) ->
|
|
225
|
+
def get_tables_name_and_type(self) -> Iterable[Tuple[str, str]]:
|
|
237
226
|
"""
|
|
238
227
|
Handle table and views.
|
|
239
228
|
|
|
@@ -281,7 +270,7 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
281
270
|
StackTraceError(
|
|
282
271
|
name=table.Name,
|
|
283
272
|
error=f"Unexpected exception to get table [{table.Name}]: {exc}",
|
|
284
|
-
|
|
273
|
+
stackTrace=traceback.format_exc(),
|
|
285
274
|
)
|
|
286
275
|
)
|
|
287
276
|
|
|
@@ -343,12 +332,12 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
343
332
|
left=StackTraceError(
|
|
344
333
|
name=table_name,
|
|
345
334
|
error=f"Unexpected exception to yield table [{table_name}]: {exc}",
|
|
346
|
-
|
|
335
|
+
stackTrace=traceback.format_exc(),
|
|
347
336
|
)
|
|
348
337
|
)
|
|
349
338
|
|
|
350
339
|
def get_table_constraints(
|
|
351
|
-
self, constraints:
|
|
340
|
+
self, constraints: List[DBTableConstraint]
|
|
352
341
|
) -> Tuple[List[TableConstraint], List[ForeignConstrains]]:
|
|
353
342
|
"""
|
|
354
343
|
Function to handle table constraint for the current table and add it to context
|
|
@@ -356,23 +345,22 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
356
345
|
|
|
357
346
|
primary_constraints = []
|
|
358
347
|
foreign_constraints = []
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
columns=constraint.primary_key_constraint.child_columns,
|
|
366
|
-
)
|
|
348
|
+
for constraint in constraints:
|
|
349
|
+
if constraint.primary_key_constraint:
|
|
350
|
+
primary_constraints.append(
|
|
351
|
+
TableConstraint(
|
|
352
|
+
constraintType=ConstraintType.PRIMARY_KEY,
|
|
353
|
+
columns=constraint.primary_key_constraint.child_columns,
|
|
367
354
|
)
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
355
|
+
)
|
|
356
|
+
if constraint.foreign_key_constraint:
|
|
357
|
+
foreign_constraints.append(
|
|
358
|
+
ForeignConstrains(
|
|
359
|
+
child_columns=constraint.foreign_key_constraint.child_columns,
|
|
360
|
+
parent_columns=constraint.foreign_key_constraint.parent_columns,
|
|
361
|
+
parent_table=constraint.foreign_key_constraint.parent_table,
|
|
375
362
|
)
|
|
363
|
+
)
|
|
376
364
|
return primary_constraints, foreign_constraints
|
|
377
365
|
|
|
378
366
|
def _get_foreign_constraints(self, foreign_columns) -> List[TableConstraint]:
|
|
@@ -471,11 +459,16 @@ class DatabricksUnityCatalogSource(DatabaseServiceSource, MultiDBSource):
|
|
|
471
459
|
)
|
|
472
460
|
|
|
473
461
|
def get_columns(self, column_data: List[ColumnInfo]) -> Iterable[Column]:
|
|
474
|
-
|
|
462
|
+
"""
|
|
463
|
+
process table regular columns info
|
|
464
|
+
"""
|
|
475
465
|
|
|
476
466
|
for column in column_data:
|
|
477
467
|
if column.type_text.lower().startswith("union"):
|
|
478
468
|
column.type_text = column.Type.replace(" ", "")
|
|
469
|
+
if column.type_text.lower() == "struct":
|
|
470
|
+
column.type_text = "struct<>"
|
|
471
|
+
|
|
479
472
|
parsed_string = ColumnTypeParser._parse_datatype_string( # pylint: disable=protected-access
|
|
480
473
|
column.type_text.lower()
|
|
481
474
|
)
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
UnityCatalog Query parser module
|
|
13
|
+
"""
|
|
14
|
+
from abc import ABC
|
|
15
|
+
|
|
16
|
+
from metadata.generated.schema.entity.services.connections.database.unityCatalogConnection import (
|
|
17
|
+
UnityCatalogConnection,
|
|
18
|
+
)
|
|
19
|
+
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
20
|
+
Source as WorkflowSource,
|
|
21
|
+
)
|
|
22
|
+
from metadata.ingestion.api.steps import InvalidSourceException
|
|
23
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
24
|
+
from metadata.ingestion.source.database.databricks.query_parser import (
|
|
25
|
+
DatabricksQueryParserSource,
|
|
26
|
+
)
|
|
27
|
+
from metadata.ingestion.source.database.query_parser_source import QueryParserSource
|
|
28
|
+
from metadata.ingestion.source.database.unitycatalog.client import UnityCatalogClient
|
|
29
|
+
from metadata.utils.logger import ingestion_logger
|
|
30
|
+
|
|
31
|
+
logger = ingestion_logger()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class UnityCatalogQueryParserSource(
|
|
35
|
+
DatabricksQueryParserSource, QueryParserSource, ABC
|
|
36
|
+
):
|
|
37
|
+
"""
|
|
38
|
+
UnityCatalog Query Parser Source
|
|
39
|
+
|
|
40
|
+
This class would be inheriting all the methods
|
|
41
|
+
from DatabricksQueryParserSource
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
filters: str
|
|
45
|
+
|
|
46
|
+
# pylint: disable=super-init-not-called
|
|
47
|
+
def __init__(self, config: WorkflowSource, metadata: OpenMetadata):
|
|
48
|
+
self._init_super(config=config, metadata=metadata)
|
|
49
|
+
self.client = UnityCatalogClient(self.service_connection)
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def create(cls, config_dict, metadata: OpenMetadata):
|
|
53
|
+
"""Create class instance"""
|
|
54
|
+
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
55
|
+
connection: UnityCatalogConnection = config.serviceConnection.__root__.config
|
|
56
|
+
if not isinstance(connection, UnityCatalogConnection):
|
|
57
|
+
raise InvalidSourceException(
|
|
58
|
+
f"Expected UnityCatalogConnection, but got {connection}"
|
|
59
|
+
)
|
|
60
|
+
return cls(config, metadata)
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
unity catalog usage module
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from metadata.ingestion.source.database.databricks.usage import DatabricksUsageSource
|
|
16
|
+
from metadata.ingestion.source.database.unitycatalog.query_parser import (
|
|
17
|
+
UnityCatalogQueryParserSource,
|
|
18
|
+
)
|
|
19
|
+
from metadata.utils.logger import ingestion_logger
|
|
20
|
+
|
|
21
|
+
logger = ingestion_logger()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class UnitycatalogUsageSource(UnityCatalogQueryParserSource, DatabricksUsageSource):
|
|
25
|
+
"""
|
|
26
|
+
UnityCatalog Usage Source
|
|
27
|
+
|
|
28
|
+
This class would be inheriting all the methods from
|
|
29
|
+
DatabricksUsageSource as both the sources would call
|
|
30
|
+
the same API for fetching Usage Queries
|
|
31
|
+
"""
|
|
@@ -107,12 +107,13 @@ class UsageSource(QueryParserSource, ABC):
|
|
|
107
107
|
row = dict(row)
|
|
108
108
|
try:
|
|
109
109
|
query_type = row.get("query_type")
|
|
110
|
+
query = self.format_query(row["query_text"])
|
|
110
111
|
queries.append(
|
|
111
112
|
TableQuery(
|
|
112
|
-
query=
|
|
113
|
+
query=query,
|
|
113
114
|
query_type=query_type,
|
|
114
115
|
exclude_usage=self.check_life_cycle_query(
|
|
115
|
-
query_type=query_type
|
|
116
|
+
query_type=query_type, query_text=query
|
|
116
117
|
),
|
|
117
118
|
userName=row["user_name"],
|
|
118
119
|
startTime=str(row["start_time"]),
|
|
@@ -27,11 +27,14 @@ from confluent_kafka.schema_registry.schema_registry_client import Schema
|
|
|
27
27
|
from metadata.generated.schema.api.data.createTopic import CreateTopicRequest
|
|
28
28
|
from metadata.generated.schema.entity.data.topic import Topic as TopicEntity
|
|
29
29
|
from metadata.generated.schema.entity.data.topic import TopicSampleData
|
|
30
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
31
|
+
StackTraceError,
|
|
32
|
+
)
|
|
30
33
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
31
34
|
Source as WorkflowSource,
|
|
32
35
|
)
|
|
33
36
|
from metadata.generated.schema.type.schema import SchemaType, Topic
|
|
34
|
-
from metadata.ingestion.api.models import Either
|
|
37
|
+
from metadata.ingestion.api.models import Either
|
|
35
38
|
from metadata.ingestion.models.ometa_topic_data import OMetaTopicSampleData
|
|
36
39
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
37
40
|
from metadata.ingestion.source.messaging.messaging_service import (
|
|
@@ -145,7 +148,7 @@ class CommonBrokerSource(MessagingServiceSource, ABC):
|
|
|
145
148
|
left=StackTraceError(
|
|
146
149
|
name=topic_details.topic_name,
|
|
147
150
|
error=f"Unexpected exception to yield topic [{topic_details}]: {exc}",
|
|
148
|
-
|
|
151
|
+
stackTrace=traceback.format_exc(),
|
|
149
152
|
)
|
|
150
153
|
)
|
|
151
154
|
|
|
@@ -236,14 +239,13 @@ class CommonBrokerSource(MessagingServiceSource, ABC):
|
|
|
236
239
|
left=StackTraceError(
|
|
237
240
|
name=topic_details.topic_name,
|
|
238
241
|
error=f"Failed to fetch sample data from topic {topic_name}: {exc}",
|
|
239
|
-
|
|
242
|
+
stackTrace=traceback.format_exc(),
|
|
240
243
|
)
|
|
241
244
|
)
|
|
242
245
|
else:
|
|
243
246
|
if messages:
|
|
244
247
|
for message in messages:
|
|
245
248
|
try:
|
|
246
|
-
|
|
247
249
|
value = message.value()
|
|
248
250
|
sample_data.append(
|
|
249
251
|
self.decode_message(
|
|
@@ -21,11 +21,14 @@ from metadata.generated.schema.entity.data.topic import TopicSampleData
|
|
|
21
21
|
from metadata.generated.schema.entity.services.connections.messaging.kinesisConnection import (
|
|
22
22
|
KinesisConnection,
|
|
23
23
|
)
|
|
24
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
25
|
+
StackTraceError,
|
|
26
|
+
)
|
|
24
27
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
25
28
|
Source as WorkflowSource,
|
|
26
29
|
)
|
|
27
30
|
from metadata.generated.schema.type.schema import Topic
|
|
28
|
-
from metadata.ingestion.api.models import Either
|
|
31
|
+
from metadata.ingestion.api.models import Either
|
|
29
32
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
30
33
|
from metadata.ingestion.models.ometa_topic_data import OMetaTopicSampleData
|
|
31
34
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -137,7 +140,7 @@ class KinesisSource(MessagingServiceSource):
|
|
|
137
140
|
left=StackTraceError(
|
|
138
141
|
name=topic_details.topic_name,
|
|
139
142
|
error=f"Unexpected exception to yield topic [{topic_details}]: {exc}",
|
|
140
|
-
|
|
143
|
+
stackTrace=traceback.format_exc(),
|
|
141
144
|
)
|
|
142
145
|
)
|
|
143
146
|
|
|
@@ -215,7 +218,7 @@ class KinesisSource(MessagingServiceSource):
|
|
|
215
218
|
left=StackTraceError(
|
|
216
219
|
name=topic_details.topic_name,
|
|
217
220
|
error=f"Error while yielding topic sample data for topic: {topic_details.topic_name} - {err}",
|
|
218
|
-
|
|
221
|
+
stackTrace=traceback.format_exc(),
|
|
219
222
|
)
|
|
220
223
|
)
|
|
221
224
|
|
|
@@ -37,8 +37,8 @@ from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
|
37
37
|
from metadata.ingestion.models.topology import (
|
|
38
38
|
NodeStage,
|
|
39
39
|
ServiceTopology,
|
|
40
|
+
TopologyContext,
|
|
40
41
|
TopologyNode,
|
|
41
|
-
create_source_context,
|
|
42
42
|
)
|
|
43
43
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
44
44
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -114,7 +114,7 @@ class MessagingServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
114
114
|
service_connection: MessagingConnection.__fields__["config"].type_
|
|
115
115
|
|
|
116
116
|
topology = MessagingServiceTopology()
|
|
117
|
-
context =
|
|
117
|
+
context = TopologyContext.create(topology)
|
|
118
118
|
topic_source_state: Set = set()
|
|
119
119
|
|
|
120
120
|
def __init__(
|
|
@@ -135,6 +135,10 @@ class MessagingServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
135
135
|
self.connection_obj = self.connection
|
|
136
136
|
self.test_connection()
|
|
137
137
|
|
|
138
|
+
@property
|
|
139
|
+
def name(self) -> str:
|
|
140
|
+
return self.service_connection.type.name
|
|
141
|
+
|
|
138
142
|
@abstractmethod
|
|
139
143
|
def yield_topic(self, topic_details: Any) -> Iterable[Either[CreateTopicRequest]]:
|
|
140
144
|
"""
|
|
@@ -43,13 +43,16 @@ from metadata.generated.schema.entity.services.databaseService import (
|
|
|
43
43
|
DatabaseService,
|
|
44
44
|
DatabaseServiceType,
|
|
45
45
|
)
|
|
46
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
47
|
+
StackTraceError,
|
|
48
|
+
)
|
|
46
49
|
from metadata.generated.schema.entity.teams import team
|
|
47
50
|
from metadata.generated.schema.entity.teams.user import User
|
|
48
51
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
49
52
|
Source as WorkflowSource,
|
|
50
53
|
)
|
|
51
54
|
from metadata.ingestion.api.common import Entity
|
|
52
|
-
from metadata.ingestion.api.models import Either
|
|
55
|
+
from metadata.ingestion.api.models import Either
|
|
53
56
|
from metadata.ingestion.api.steps import InvalidSourceException, Source
|
|
54
57
|
from metadata.ingestion.models.user import OMetaUserProfile
|
|
55
58
|
from metadata.ingestion.ometa.client_utils import get_chart_entities_from_id
|
|
@@ -174,7 +177,7 @@ class AmundsenSource(Source):
|
|
|
174
177
|
left=StackTraceError(
|
|
175
178
|
name=user.name,
|
|
176
179
|
error=f"Failed to create user entity [{user}]: {exc}",
|
|
177
|
-
|
|
180
|
+
stackTrace=traceback.format_exc(),
|
|
178
181
|
)
|
|
179
182
|
)
|
|
180
183
|
|
|
@@ -222,7 +225,7 @@ class AmundsenSource(Source):
|
|
|
222
225
|
left=StackTraceError(
|
|
223
226
|
name=user.get("full_name") or "User",
|
|
224
227
|
error=f"Failed to add table from user [{user}]: {exc}",
|
|
225
|
-
|
|
228
|
+
stackTrace=traceback.format_exc(),
|
|
226
229
|
)
|
|
227
230
|
)
|
|
228
231
|
|
|
@@ -257,7 +260,7 @@ class AmundsenSource(Source):
|
|
|
257
260
|
left=StackTraceError(
|
|
258
261
|
name="Database",
|
|
259
262
|
error=f"Failed to Ingest database due to - {err}",
|
|
260
|
-
|
|
263
|
+
stackTrace=traceback.format_exc(),
|
|
261
264
|
)
|
|
262
265
|
)
|
|
263
266
|
|
|
@@ -284,7 +287,7 @@ class AmundsenSource(Source):
|
|
|
284
287
|
left=StackTraceError(
|
|
285
288
|
name="Database Schema",
|
|
286
289
|
error=f"Failed to Ingest database schema due to - {err}",
|
|
287
|
-
|
|
290
|
+
stackTrace=traceback.format_exc(),
|
|
288
291
|
)
|
|
289
292
|
)
|
|
290
293
|
|
|
@@ -354,7 +357,7 @@ class AmundsenSource(Source):
|
|
|
354
357
|
left=StackTraceError(
|
|
355
358
|
name=table.get("name") or "Table",
|
|
356
359
|
error=f"Failed to create table entity [{table}]: {exc}",
|
|
357
|
-
|
|
360
|
+
stackTrace=traceback.format_exc(),
|
|
358
361
|
)
|
|
359
362
|
)
|
|
360
363
|
|
|
@@ -397,7 +400,7 @@ class AmundsenSource(Source):
|
|
|
397
400
|
left=StackTraceError(
|
|
398
401
|
name=dashboard.get("name") or "Dashboard",
|
|
399
402
|
error=f"Failed to create dashboard entity [{dashboard}]: {exc}",
|
|
400
|
-
|
|
403
|
+
stackTrace=traceback.format_exc(),
|
|
401
404
|
)
|
|
402
405
|
)
|
|
403
406
|
|
|
@@ -122,7 +122,7 @@ class AtlasSource(Source):
|
|
|
122
122
|
left=StackTraceError(
|
|
123
123
|
name=service,
|
|
124
124
|
error=f"Cannot find service for {service} - type DatabaseService",
|
|
125
|
-
|
|
125
|
+
stackTrace=traceback.format_exc(),
|
|
126
126
|
)
|
|
127
127
|
)
|
|
128
128
|
|
|
@@ -142,7 +142,7 @@ class AtlasSource(Source):
|
|
|
142
142
|
left=StackTraceError(
|
|
143
143
|
name=service,
|
|
144
144
|
error=f"Cannot find service for {service} - type MessagingService",
|
|
145
|
-
|
|
145
|
+
stackTrace=traceback.format_exc(),
|
|
146
146
|
)
|
|
147
147
|
)
|
|
148
148
|
|
|
@@ -184,7 +184,7 @@ class AtlasSource(Source):
|
|
|
184
184
|
left=StackTraceError(
|
|
185
185
|
name="Topic",
|
|
186
186
|
error=f"Failed to parse topi entry [{topic_entity}]: {exc}",
|
|
187
|
-
|
|
187
|
+
stackTrace=traceback.format_exc(),
|
|
188
188
|
)
|
|
189
189
|
)
|
|
190
190
|
|
|
@@ -279,7 +279,7 @@ class AtlasSource(Source):
|
|
|
279
279
|
left=StackTraceError(
|
|
280
280
|
name="Database",
|
|
281
281
|
error=f"Failed to parse for database : {db_entity} - table {table}: {exc}",
|
|
282
|
-
|
|
282
|
+
stackTrace=traceback.format_exc(),
|
|
283
283
|
)
|
|
284
284
|
)
|
|
285
285
|
|
|
@@ -420,7 +420,7 @@ class AtlasSource(Source):
|
|
|
420
420
|
left=StackTraceError(
|
|
421
421
|
name="Lineage",
|
|
422
422
|
error=f"failed to parse lineage due to {exc}",
|
|
423
|
-
|
|
423
|
+
stackTrace=traceback.format_exc(),
|
|
424
424
|
)
|
|
425
425
|
)
|
|
426
426
|
|
|
@@ -29,10 +29,13 @@ from metadata.generated.schema.entity.data.mlmodel import (
|
|
|
29
29
|
from metadata.generated.schema.entity.services.connections.mlmodel.mlflowConnection import (
|
|
30
30
|
MlflowConnection,
|
|
31
31
|
)
|
|
32
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
33
|
+
StackTraceError,
|
|
34
|
+
)
|
|
32
35
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
33
36
|
Source as WorkflowSource,
|
|
34
37
|
)
|
|
35
|
-
from metadata.ingestion.api.models import Either
|
|
38
|
+
from metadata.ingestion.api.models import Either
|
|
36
39
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
37
40
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
38
41
|
from metadata.ingestion.source.mlmodel.mlmodel_service import MlModelServiceSource
|
|
@@ -91,7 +94,7 @@ class MlflowSource(MlModelServiceSource):
|
|
|
91
94
|
StackTraceError(
|
|
92
95
|
name=model.name,
|
|
93
96
|
error="Version not found",
|
|
94
|
-
|
|
97
|
+
stackTrace=f"Unable to ingest model {model.name} due to missing version from version list {model.latest_versions}", # pylint: disable=line-too-long
|
|
95
98
|
)
|
|
96
99
|
)
|
|
97
100
|
continue
|
|
@@ -39,8 +39,8 @@ from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
|
39
39
|
from metadata.ingestion.models.topology import (
|
|
40
40
|
NodeStage,
|
|
41
41
|
ServiceTopology,
|
|
42
|
+
TopologyContext,
|
|
42
43
|
TopologyNode,
|
|
43
|
-
create_source_context,
|
|
44
44
|
)
|
|
45
45
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
46
46
|
from metadata.ingestion.source.connections import get_connection, get_test_connection_fn
|
|
@@ -100,7 +100,7 @@ class MlModelServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
100
100
|
service_connection: MlModelConnection.__fields__["config"].type_
|
|
101
101
|
|
|
102
102
|
topology = MlModelServiceTopology()
|
|
103
|
-
context =
|
|
103
|
+
context = TopologyContext.create(topology)
|
|
104
104
|
mlmodel_source_state: Set = set()
|
|
105
105
|
|
|
106
106
|
def __init__(
|
|
@@ -123,6 +123,10 @@ class MlModelServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
123
123
|
|
|
124
124
|
self.client = self.connection
|
|
125
125
|
|
|
126
|
+
@property
|
|
127
|
+
def name(self) -> str:
|
|
128
|
+
return self.service_connection.type.name
|
|
129
|
+
|
|
126
130
|
def get_services(self) -> Iterable[WorkflowSource]:
|
|
127
131
|
yield self.config
|
|
128
132
|
|
|
@@ -21,9 +21,6 @@ from sqlalchemy.engine import Engine
|
|
|
21
21
|
from metadata.generated.schema.entity.automations.workflow import (
|
|
22
22
|
Workflow as AutomationWorkflow,
|
|
23
23
|
)
|
|
24
|
-
from metadata.generated.schema.entity.services.connections.database.mssqlConnection import (
|
|
25
|
-
MssqlConnection,
|
|
26
|
-
)
|
|
27
24
|
from metadata.generated.schema.entity.services.connections.database.mysqlConnection import (
|
|
28
25
|
MysqlConnection,
|
|
29
26
|
)
|
|
@@ -81,15 +78,6 @@ def _(airflow_connection: PostgresConnection) -> Engine:
|
|
|
81
78
|
return get_postgres_connection(airflow_connection)
|
|
82
79
|
|
|
83
80
|
|
|
84
|
-
@_get_connection.register
|
|
85
|
-
def _(airflow_connection: MssqlConnection) -> Engine:
|
|
86
|
-
from metadata.ingestion.source.database.mssql.connection import (
|
|
87
|
-
get_connection as get_mssql_connection,
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
return get_mssql_connection(airflow_connection)
|
|
91
|
-
|
|
92
|
-
|
|
93
81
|
@_get_connection.register
|
|
94
82
|
def _(airflow_connection: SQLiteConnection) -> Engine:
|
|
95
83
|
from metadata.ingestion.source.database.sqlite.connection import (
|
|
@@ -64,6 +64,7 @@ and we'll treat this as independent sets of lineage
|
|
|
64
64
|
"""
|
|
65
65
|
import json
|
|
66
66
|
import logging
|
|
67
|
+
import textwrap
|
|
67
68
|
import traceback
|
|
68
69
|
from collections import defaultdict
|
|
69
70
|
from copy import deepcopy
|
|
@@ -134,16 +135,16 @@ class XLets(BaseModel):
|
|
|
134
135
|
|
|
135
136
|
|
|
136
137
|
def concat_dict_values(
|
|
137
|
-
|
|
138
|
+
dict_1: DefaultDict[str, List[Any]], dict_2: Optional[Dict[str, List[Any]]]
|
|
138
139
|
) -> DefaultDict[str, List[Any]]:
|
|
139
140
|
"""
|
|
140
141
|
Update d1 based on d2 values concatenating their results.
|
|
141
142
|
"""
|
|
142
|
-
if
|
|
143
|
-
for key, value in
|
|
144
|
-
|
|
143
|
+
if dict_2:
|
|
144
|
+
for key, value in dict_2.items():
|
|
145
|
+
dict_1[key] = dict_1[key] + value
|
|
145
146
|
|
|
146
|
-
return
|
|
147
|
+
return dict_1
|
|
147
148
|
|
|
148
149
|
|
|
149
150
|
def parse_xlets(xlet: List[Any]) -> Optional[Dict[str, List[OMEntity]]]:
|
|
@@ -200,7 +201,12 @@ def _parse_xlets(xlet: Any) -> None:
|
|
|
200
201
|
|
|
201
202
|
@_parse_xlets.register
|
|
202
203
|
@deprecated(
|
|
203
|
-
message=
|
|
204
|
+
message=textwrap.dedent(
|
|
205
|
+
"""
|
|
206
|
+
Please update your inlets/outlets to follow
|
|
207
|
+
https://docs.open-metadata.org/connectors/pipeline/airflow/configuring-lineage
|
|
208
|
+
"""
|
|
209
|
+
),
|
|
204
210
|
release="1.4.0",
|
|
205
211
|
)
|
|
206
212
|
def dictionary_lineage_annotation(xlet: dict) -> Dict[str, List[OMEntity]]:
|