openmetadata-ingestion 1.2.3.2__py3-none-any.whl → 1.2.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- metadata/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 +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +32 -0
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +1 -1
- metadata/generated/schema/api/data/createQuery.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
- metadata/generated/schema/api/data/createTable.py +1 -1
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +1 -1
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/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 +1 -1
- metadata/generated/schema/entity/applications/appConfig.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +1 -1
- metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/searchIndexingApp.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/data/table.py +1 -1
- 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 +1 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/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/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDB/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +62 -0
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/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 +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +4 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +1 -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 +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +1 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/dataInsightAlertConfig.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/entitySpelFilters.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +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 +18 -0
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/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/basic.py +1 -1
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +1 -1
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +1 -1
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/ingestion/api/parser.py +79 -26
- metadata/ingestion/api/topology_runner.py +14 -0
- metadata/ingestion/lineage/parser.py +20 -14
- metadata/ingestion/models/custom_properties.py +63 -0
- metadata/ingestion/ometa/mixins/custom_property_mixin.py +80 -0
- metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +3 -2
- metadata/ingestion/ometa/mixins/patch_mixin_utils.py +0 -5
- metadata/ingestion/ometa/mixins/server_mixin.py +4 -2
- metadata/ingestion/ometa/ometa_api.py +4 -0
- metadata/ingestion/sink/metadata_rest.py +9 -0
- metadata/ingestion/source/database/dbt/constants.py +2 -0
- metadata/ingestion/source/database/dbt/metadata.py +13 -3
- metadata/ingestion/source/database/salesforce/metadata.py +1 -1
- metadata/ingestion/source/pipeline/airflow/metadata.py +19 -7
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +1 -1
- metadata/utils/logger.py +13 -0
- metadata/utils/tag_utils.py +2 -2
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/METADATA +201 -201
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/RECORD +493 -488
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/top_level.txt +0 -0
metadata/ingestion/api/parser.py
CHANGED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"""
|
|
12
12
|
Helper to parse workflow configurations
|
|
13
13
|
"""
|
|
14
|
-
from typing import
|
|
14
|
+
from typing import Type, TypeVar, Union
|
|
15
15
|
|
|
16
16
|
from pydantic import BaseModel, ValidationError
|
|
17
17
|
|
|
18
|
-
from metadata.generated.schema.entity.automations.
|
|
19
|
-
|
|
18
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
19
|
+
Workflow as AutomationWorkflow,
|
|
20
20
|
)
|
|
21
21
|
from metadata.generated.schema.entity.services.dashboardService import (
|
|
22
22
|
DashboardConnection,
|
|
@@ -26,6 +26,9 @@ from metadata.generated.schema.entity.services.databaseService import (
|
|
|
26
26
|
DatabaseConnection,
|
|
27
27
|
DatabaseServiceType,
|
|
28
28
|
)
|
|
29
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipeline import (
|
|
30
|
+
IngestionPipeline,
|
|
31
|
+
)
|
|
29
32
|
from metadata.generated.schema.entity.services.messagingService import (
|
|
30
33
|
MessagingConnection,
|
|
31
34
|
MessagingServiceType,
|
|
@@ -271,13 +274,11 @@ def _parse_inner_connection(config_dict: dict, source_type: str) -> None:
|
|
|
271
274
|
:param config_dict: JSON configuration
|
|
272
275
|
:param source_type: source type name, e.g., Airflow.
|
|
273
276
|
"""
|
|
274
|
-
inner_source_type = config_dict["
|
|
275
|
-
"connection"
|
|
276
|
-
]["type"]
|
|
277
|
+
inner_source_type = config_dict["type"]
|
|
277
278
|
inner_service_type = get_service_type(inner_source_type)
|
|
278
279
|
inner_connection_class = get_connection_class(inner_source_type, inner_service_type)
|
|
279
280
|
_unsafe_parse_config(
|
|
280
|
-
config=config_dict
|
|
281
|
+
config=config_dict,
|
|
281
282
|
cls=inner_connection_class,
|
|
282
283
|
message=f"Error parsing the inner service connection for {source_type}",
|
|
283
284
|
)
|
|
@@ -304,7 +305,12 @@ def parse_service_connection(config_dict: dict) -> None:
|
|
|
304
305
|
|
|
305
306
|
if source_type in HAS_INNER_CONNECTION:
|
|
306
307
|
# We will first parse the inner `connection` configuration
|
|
307
|
-
_parse_inner_connection(
|
|
308
|
+
_parse_inner_connection(
|
|
309
|
+
config_dict["source"]["serviceConnection"]["config"]["connection"][
|
|
310
|
+
"config"
|
|
311
|
+
]["connection"],
|
|
312
|
+
source_type,
|
|
313
|
+
)
|
|
308
314
|
|
|
309
315
|
# Parse the service connection dictionary with the scoped class
|
|
310
316
|
_unsafe_parse_config(
|
|
@@ -434,37 +440,84 @@ def parse_workflow_config_gracefully(
|
|
|
434
440
|
raise ParsingConfigurationError("Uncaught error when parsing the workflow!")
|
|
435
441
|
|
|
436
442
|
|
|
437
|
-
def
|
|
443
|
+
def parse_ingestion_pipeline_config_gracefully(
|
|
438
444
|
config_dict: dict,
|
|
439
|
-
) ->
|
|
445
|
+
) -> IngestionPipeline:
|
|
440
446
|
"""
|
|
441
|
-
This function either correctly parses the pydantic class,
|
|
442
|
-
|
|
443
|
-
|
|
447
|
+
This function either correctly parses the pydantic class, or
|
|
448
|
+
throws a scoped error while fetching the required source connection
|
|
449
|
+
class.
|
|
444
450
|
|
|
445
|
-
:param config_dict: JSON
|
|
446
|
-
:return:
|
|
451
|
+
:param config_dict: JSON ingestion pipeline config
|
|
452
|
+
:return:Ingestion Pipeline config or scoped error
|
|
447
453
|
"""
|
|
448
454
|
|
|
449
455
|
try:
|
|
450
|
-
|
|
451
|
-
return
|
|
456
|
+
ingestion_pipeline = IngestionPipeline.parse_obj(config_dict)
|
|
457
|
+
return ingestion_pipeline
|
|
452
458
|
|
|
453
|
-
except ValidationError
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
459
|
+
except ValidationError:
|
|
460
|
+
source_config_type = config_dict["sourceConfig"]["config"].get("type")
|
|
461
|
+
|
|
462
|
+
if source_config_type is None:
|
|
463
|
+
raise InvalidWorkflowException("Missing type in the sourceConfig config")
|
|
464
|
+
|
|
465
|
+
source_config_class = get_source_config_class(source_config_type)
|
|
466
|
+
|
|
467
|
+
_unsafe_parse_config(
|
|
468
|
+
config=config_dict["sourceConfig"]["config"],
|
|
469
|
+
cls=source_config_class,
|
|
470
|
+
message="Error parsing the source config",
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
raise ParsingConfigurationError(
|
|
474
|
+
"Uncaught error when parsing the Ingestion Pipeline!"
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
def parse_automation_workflow_gracefully(
|
|
479
|
+
config_dict: dict,
|
|
480
|
+
) -> AutomationWorkflow:
|
|
481
|
+
"""
|
|
482
|
+
This function either correctly parses the pydantic class, or
|
|
483
|
+
throws a scoped error while fetching the required source connection
|
|
484
|
+
class.
|
|
485
|
+
|
|
486
|
+
:param config_dict: JSON AutomationWorkflow config
|
|
487
|
+
:return: AutomationWorkflow config or scoped error
|
|
488
|
+
"""
|
|
489
|
+
|
|
490
|
+
try:
|
|
491
|
+
automation_workflow = AutomationWorkflow.parse_obj(config_dict)
|
|
492
|
+
return automation_workflow
|
|
493
|
+
|
|
494
|
+
except ValidationError:
|
|
495
|
+
source_type = config_dict["request"]["connection"]["config"].get("type")
|
|
496
|
+
|
|
497
|
+
if source_type is None:
|
|
498
|
+
raise InvalidWorkflowException("Missing type in the connection config")
|
|
499
|
+
|
|
500
|
+
logger.debug(
|
|
501
|
+
f"Error parsing the Workflow Configuration for {source_type} ingestion"
|
|
458
502
|
)
|
|
459
503
|
|
|
460
504
|
service_type = get_service_type(source_type)
|
|
461
505
|
connection_class = get_connection_class(source_type, service_type)
|
|
462
506
|
|
|
463
|
-
|
|
507
|
+
if source_type in HAS_INNER_CONNECTION:
|
|
508
|
+
# We will first parse the inner `connection` configuration
|
|
509
|
+
_parse_inner_connection(
|
|
510
|
+
config_dict["request"]["connection"]["config"]["connection"],
|
|
511
|
+
source_type,
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
# Parse the service connection dictionary with the scoped class
|
|
464
515
|
_unsafe_parse_config(
|
|
465
|
-
config=config_dict["connection"]["config"],
|
|
516
|
+
config=config_dict["request"]["connection"]["config"],
|
|
466
517
|
cls=connection_class,
|
|
467
|
-
message="Error parsing the connection
|
|
518
|
+
message="Error parsing the service connection",
|
|
468
519
|
)
|
|
469
520
|
|
|
470
|
-
raise ParsingConfigurationError(
|
|
521
|
+
raise ParsingConfigurationError(
|
|
522
|
+
"Uncaught error when parsing the Ingestion Pipeline!"
|
|
523
|
+
)
|
|
@@ -26,6 +26,7 @@ from metadata.generated.schema.entity.data.database import Database
|
|
|
26
26
|
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
27
27
|
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedure
|
|
28
28
|
from metadata.ingestion.api.models import Either, Entity
|
|
29
|
+
from metadata.ingestion.models.custom_properties import OMetaCustomProperties
|
|
29
30
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
30
31
|
from metadata.ingestion.models.patch_request import PatchRequest
|
|
31
32
|
from metadata.ingestion.models.topology import (
|
|
@@ -387,6 +388,19 @@ class TopologyRunnerMixin(Generic[C]):
|
|
|
387
388
|
# We'll keep the tag fqn in the context and use if required
|
|
388
389
|
self.update_context(stage=stage, context=right)
|
|
389
390
|
|
|
391
|
+
@yield_and_update_context.register
|
|
392
|
+
def _(
|
|
393
|
+
self,
|
|
394
|
+
right: OMetaCustomProperties,
|
|
395
|
+
stage: NodeStage,
|
|
396
|
+
entity_request: Either[C],
|
|
397
|
+
) -> Iterable[Either[Entity]]:
|
|
398
|
+
"""Custom Property implementation for the context information"""
|
|
399
|
+
yield entity_request
|
|
400
|
+
|
|
401
|
+
# We'll keep the tag fqn in the context and use if required
|
|
402
|
+
self.update_context(stage=stage, context=right)
|
|
403
|
+
|
|
390
404
|
@yield_and_update_context.register
|
|
391
405
|
def _(
|
|
392
406
|
self,
|
|
@@ -117,26 +117,32 @@ class LineageParser:
|
|
|
117
117
|
# These are @lazy_property, not properly being picked up by IDEs. Ignore the warning
|
|
118
118
|
return self.retrieve_tables(self.parser.target_tables)
|
|
119
119
|
|
|
120
|
+
# pylint: disable=protected-access
|
|
120
121
|
@cached_property
|
|
121
122
|
def column_lineage(self) -> List[Tuple[Column, Column]]:
|
|
122
123
|
"""
|
|
123
124
|
Get a list of tuples of column lineage
|
|
124
125
|
"""
|
|
125
|
-
if self.parser._dialect == SQLPARSE_DIALECT: # pylint: disable=protected-access
|
|
126
|
-
return self.parser.get_column_lineage()
|
|
127
126
|
column_lineage = []
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
127
|
+
try:
|
|
128
|
+
if self.parser._dialect == SQLPARSE_DIALECT:
|
|
129
|
+
return self.parser.get_column_lineage()
|
|
130
|
+
|
|
131
|
+
for col_lineage in self.parser.get_column_lineage():
|
|
132
|
+
# In case of column level lineage it is possible that we get
|
|
133
|
+
# two or more columns as there might be some intermediate columns
|
|
134
|
+
# but the source columns will be the first value and
|
|
135
|
+
# the target column always will be the last columns
|
|
136
|
+
src_column = col_lineage[0]
|
|
137
|
+
tgt_column = col_lineage[-1]
|
|
138
|
+
src_col = Column(src_column.raw_name)
|
|
139
|
+
src_col._parent = src_column._parent # pylint: disable=protected-access
|
|
140
|
+
tgt_col = Column(tgt_column.raw_name)
|
|
141
|
+
tgt_col._parent = tgt_column._parent # pylint: disable=protected-access
|
|
142
|
+
column_lineage.append((src_col, tgt_col))
|
|
143
|
+
except Exception as err:
|
|
144
|
+
logger.warning(f"Failed to fetch column level lineage due to: {err}")
|
|
145
|
+
logger.debug(traceback.format_exc())
|
|
140
146
|
return column_lineage
|
|
141
147
|
|
|
142
148
|
@cached_property
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
Custom models for custom properties
|
|
13
|
+
"""
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from typing import Optional, Type, TypeVar
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel
|
|
18
|
+
|
|
19
|
+
from metadata.generated.schema.api.data.createCustomProperty import (
|
|
20
|
+
CreateCustomPropertyRequest,
|
|
21
|
+
)
|
|
22
|
+
from metadata.generated.schema.type import basic, entityHistory
|
|
23
|
+
|
|
24
|
+
T = TypeVar("T", bound=BaseModel)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CustomPropertyDataTypes(Enum):
|
|
28
|
+
STRING = "string"
|
|
29
|
+
INTEGER = "integer"
|
|
30
|
+
MARKDOWN = "markdown"
|
|
31
|
+
DATE = "date"
|
|
32
|
+
DATETIME = "dateTime"
|
|
33
|
+
DURATION = "duration"
|
|
34
|
+
EMAIL = "email"
|
|
35
|
+
NUMBER = "number"
|
|
36
|
+
SQLQUERY = "sqlQuery"
|
|
37
|
+
TIME = "time"
|
|
38
|
+
TIMEINTERVAL = "timeInterval"
|
|
39
|
+
TIMESTAMP = "timestamp"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class OMetaCustomProperties(BaseModel):
|
|
43
|
+
entity_type: Type[T]
|
|
44
|
+
custom_property_type: Optional[CustomPropertyDataTypes]
|
|
45
|
+
createCustomPropertyRequest: CreateCustomPropertyRequest
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class CustomPropertyType(BaseModel):
|
|
49
|
+
"""
|
|
50
|
+
Pydantic Model for custom properties
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
id: basic.Uuid
|
|
54
|
+
name: basic.EntityName
|
|
55
|
+
displayName: Optional[str]
|
|
56
|
+
fullyQualifiedName: Optional[basic.FullyQualifiedEntityName]
|
|
57
|
+
description: Optional[basic.Markdown]
|
|
58
|
+
category: Optional[str]
|
|
59
|
+
nameSpace: Optional[str]
|
|
60
|
+
version: Optional[entityHistory.EntityVersion]
|
|
61
|
+
updatedAt: Optional[basic.Timestamp]
|
|
62
|
+
updatedBy: Optional[str]
|
|
63
|
+
href: Optional[basic.Href]
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
Mixin class containing Custom Property specific methods
|
|
13
|
+
|
|
14
|
+
To be used by OpenMetadata class
|
|
15
|
+
"""
|
|
16
|
+
from typing import Dict
|
|
17
|
+
|
|
18
|
+
from metadata.generated.schema.api.data.createCustomProperty import PropertyType
|
|
19
|
+
from metadata.ingestion.models.custom_properties import (
|
|
20
|
+
CustomPropertyDataTypes,
|
|
21
|
+
CustomPropertyType,
|
|
22
|
+
OMetaCustomProperties,
|
|
23
|
+
)
|
|
24
|
+
from metadata.ingestion.ometa.client import REST
|
|
25
|
+
from metadata.utils.constants import ENTITY_REFERENCE_TYPE_MAP
|
|
26
|
+
from metadata.utils.logger import ometa_logger
|
|
27
|
+
|
|
28
|
+
logger = ometa_logger()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class OMetaCustomPropertyMixin:
|
|
32
|
+
"""
|
|
33
|
+
OpenMetadata API methods related to CustomProperty.
|
|
34
|
+
|
|
35
|
+
To be inherited by OpenMetadata
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
client: REST
|
|
39
|
+
|
|
40
|
+
def create_or_update_custom_property(
|
|
41
|
+
self, ometa_custom_property: OMetaCustomProperties
|
|
42
|
+
) -> Dict:
|
|
43
|
+
"""Create or update custom property. If custom property name matches an existing
|
|
44
|
+
one then it will be updated.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
ometa_custom_property (OMetaCustomProperties): custom property to be create or updated
|
|
48
|
+
"""
|
|
49
|
+
# Get the json schema id of the entity to be updated
|
|
50
|
+
entity_type = ENTITY_REFERENCE_TYPE_MAP.get(
|
|
51
|
+
ometa_custom_property.entity_type.__name__
|
|
52
|
+
)
|
|
53
|
+
entity_schema = self.client.get(
|
|
54
|
+
f"/metadata/types/name/{entity_type}?category=field"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Get the data type of the custom property
|
|
58
|
+
if not ometa_custom_property.createCustomPropertyRequest.propertyType:
|
|
59
|
+
custom_property_type = self.get_custom_property_type(
|
|
60
|
+
data_type=ometa_custom_property.custom_property_type
|
|
61
|
+
)
|
|
62
|
+
property_type = PropertyType(id=custom_property_type.id, type="type")
|
|
63
|
+
ometa_custom_property.createCustomPropertyRequest.propertyType = (
|
|
64
|
+
property_type
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
resp = self.client.put(
|
|
68
|
+
f"/metadata/types/{entity_schema.get('id')}",
|
|
69
|
+
data=ometa_custom_property.createCustomPropertyRequest.json(),
|
|
70
|
+
)
|
|
71
|
+
return resp
|
|
72
|
+
|
|
73
|
+
def get_custom_property_type(
|
|
74
|
+
self, data_type: CustomPropertyDataTypes
|
|
75
|
+
) -> CustomPropertyType:
|
|
76
|
+
"""
|
|
77
|
+
Get all the supported datatypes for the custom properties
|
|
78
|
+
"""
|
|
79
|
+
resp = self.client.get(f"/metadata/types/name/{data_type.value}?category=field")
|
|
80
|
+
return CustomPropertyType(**resp)
|
|
@@ -20,6 +20,7 @@ from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipel
|
|
|
20
20
|
IngestionPipeline,
|
|
21
21
|
PipelineStatus,
|
|
22
22
|
)
|
|
23
|
+
from metadata.ingestion.api.parser import parse_ingestion_pipeline_config_gracefully
|
|
23
24
|
from metadata.ingestion.ometa.client import REST
|
|
24
25
|
from metadata.utils.logger import ometa_logger
|
|
25
26
|
|
|
@@ -79,7 +80,7 @@ class OMetaIngestionPipelineMixin:
|
|
|
79
80
|
f"{self.get_suffix(IngestionPipeline)}/trigger/{ingestion_pipeline_id}"
|
|
80
81
|
)
|
|
81
82
|
|
|
82
|
-
return
|
|
83
|
+
return parse_ingestion_pipeline_config_gracefully(resp)
|
|
83
84
|
|
|
84
85
|
def get_pipeline_status_between_ts(
|
|
85
86
|
self,
|
|
@@ -125,6 +126,6 @@ class OMetaIngestionPipelineMixin:
|
|
|
125
126
|
)
|
|
126
127
|
|
|
127
128
|
if hasattr(resp, "sourceConfig"):
|
|
128
|
-
return
|
|
129
|
+
return parse_ingestion_pipeline_config_gracefully(resp)
|
|
129
130
|
|
|
130
131
|
return None
|
|
@@ -21,10 +21,8 @@ from typing import Generic, List, Optional, Type, TypeVar, Union
|
|
|
21
21
|
from pydantic import BaseModel
|
|
22
22
|
|
|
23
23
|
from metadata.generated.schema.type import basic
|
|
24
|
-
from metadata.utils.logger import ometa_logger
|
|
25
24
|
|
|
26
25
|
T = TypeVar("T", bound=BaseModel)
|
|
27
|
-
logger = ometa_logger()
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
class PatchField(str, Enum):
|
|
@@ -140,9 +138,6 @@ class OMetaPatchMixinBase(Generic[T]):
|
|
|
140
138
|
instance = self.get_by_id(entity=entity, entity_id=entity_id, fields=fields)
|
|
141
139
|
|
|
142
140
|
if not instance:
|
|
143
|
-
logger.warning(
|
|
144
|
-
f"Cannot find an instance of '{entity.__class__.__name__}' with id [{str(entity_id)}]."
|
|
145
|
-
)
|
|
146
141
|
return None
|
|
147
142
|
|
|
148
143
|
return instance
|
|
@@ -60,11 +60,13 @@ class OMetaServerMixin:
|
|
|
60
60
|
Validate Server & Client versions. They should match.
|
|
61
61
|
Otherwise, raise VersionMismatchException
|
|
62
62
|
"""
|
|
63
|
-
logger.debug("Validating client and server versions")
|
|
64
|
-
|
|
65
63
|
server_version = self.get_server_version()
|
|
66
64
|
client_version = get_client_version()
|
|
67
65
|
|
|
66
|
+
logger.info(
|
|
67
|
+
f"OpenMetadata client running with Server version [{server_version}] and Client version [{client_version}]"
|
|
68
|
+
)
|
|
69
|
+
|
|
68
70
|
# Server version will be 0.13.2, vs 0.13.2.X from the client.
|
|
69
71
|
# If the server version is contained in the client version, then we're good to go
|
|
70
72
|
if server_version not in client_version:
|
|
@@ -33,6 +33,9 @@ from metadata.generated.schema.type.entityReference import EntityReference
|
|
|
33
33
|
from metadata.ingestion.models.encoders import show_secrets_encoder
|
|
34
34
|
from metadata.ingestion.ometa.auth_provider import AuthenticationProvider
|
|
35
35
|
from metadata.ingestion.ometa.client import REST, APIError, ClientConfig
|
|
36
|
+
from metadata.ingestion.ometa.mixins.custom_property_mixin import (
|
|
37
|
+
OMetaCustomPropertyMixin,
|
|
38
|
+
)
|
|
36
39
|
from metadata.ingestion.ometa.mixins.dashboard_mixin import OMetaDashboardMixin
|
|
37
40
|
from metadata.ingestion.ometa.mixins.data_insight_mixin import DataInsightMixin
|
|
38
41
|
from metadata.ingestion.ometa.mixins.es_mixin import ESMixin
|
|
@@ -110,6 +113,7 @@ class OpenMetadata(
|
|
|
110
113
|
OMetaQueryMixin,
|
|
111
114
|
OMetaRolePolicyMixin,
|
|
112
115
|
OMetaSearchIndexMixin,
|
|
116
|
+
OMetaCustomPropertyMixin,
|
|
113
117
|
Generic[T, C],
|
|
114
118
|
):
|
|
115
119
|
"""
|
|
@@ -51,6 +51,7 @@ from metadata.generated.schema.tests.testSuite import TestSuite
|
|
|
51
51
|
from metadata.generated.schema.type.schema import Topic
|
|
52
52
|
from metadata.ingestion.api.models import Either, Entity, StackTraceError
|
|
53
53
|
from metadata.ingestion.api.steps import Sink
|
|
54
|
+
from metadata.ingestion.models.custom_properties import OMetaCustomProperties
|
|
54
55
|
from metadata.ingestion.models.data_insight import OMetaDataInsightSample
|
|
55
56
|
from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
56
57
|
from metadata.ingestion.models.life_cycle import OMetaLifeCycleData
|
|
@@ -172,6 +173,14 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
172
173
|
)
|
|
173
174
|
return Either(right=entity)
|
|
174
175
|
|
|
176
|
+
@_run_dispatch.register
|
|
177
|
+
def write_custom_properties(self, record: OMetaCustomProperties) -> Either[Dict]:
|
|
178
|
+
"""
|
|
179
|
+
Create or update the custom properties
|
|
180
|
+
"""
|
|
181
|
+
custom_property = self.metadata.create_or_update_custom_property(record)
|
|
182
|
+
return Either(right=custom_property)
|
|
183
|
+
|
|
175
184
|
@_run_dispatch.register
|
|
176
185
|
def write_datamodel(self, datamodel_link: DataModelLink) -> Either[DataModel]:
|
|
177
186
|
"""
|
|
@@ -59,6 +59,7 @@ from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
|
59
59
|
from metadata.ingestion.source.database.column_type_parser import ColumnTypeParser
|
|
60
60
|
from metadata.ingestion.source.database.database_service import DataModelLink
|
|
61
61
|
from metadata.ingestion.source.database.dbt.constants import (
|
|
62
|
+
DBT_RUN_RESULT_DATE_FORMAT,
|
|
62
63
|
REQUIRED_CATALOG_KEYS,
|
|
63
64
|
REQUIRED_MANIFEST_KEYS,
|
|
64
65
|
DbtCommonEnum,
|
|
@@ -870,12 +871,21 @@ class DbtSource(DbtServiceSource):
|
|
|
870
871
|
dbt_test_completed_at = dbt_test_timing.completed_at
|
|
871
872
|
dbt_timestamp = None
|
|
872
873
|
if dbt_test_completed_at:
|
|
873
|
-
dbt_timestamp = dbt_test_completed_at
|
|
874
|
+
dbt_timestamp = dbt_test_completed_at
|
|
874
875
|
elif self.context.run_results_generate_time:
|
|
875
|
-
dbt_timestamp = self.context.run_results_generate_time
|
|
876
|
+
dbt_timestamp = self.context.run_results_generate_time
|
|
877
|
+
|
|
878
|
+
# check if the timestamp is a str type and convert accordingly
|
|
879
|
+
if isinstance(dbt_timestamp, str):
|
|
880
|
+
dbt_timestamp = datetime.strptime(
|
|
881
|
+
dbt_timestamp, DBT_RUN_RESULT_DATE_FORMAT
|
|
882
|
+
)
|
|
883
|
+
|
|
876
884
|
# Create the test case result object
|
|
877
885
|
test_case_result = TestCaseResult(
|
|
878
|
-
timestamp=convert_timestamp_to_milliseconds(
|
|
886
|
+
timestamp=convert_timestamp_to_milliseconds(
|
|
887
|
+
dbt_timestamp.timestamp()
|
|
888
|
+
),
|
|
879
889
|
testCaseStatus=test_case_status,
|
|
880
890
|
testResultValue=[
|
|
881
891
|
TestResultValue(
|
|
@@ -213,7 +213,7 @@ class SalesforceSource(DatabaseServiceSource):
|
|
|
213
213
|
entity_type=DatabaseSchema,
|
|
214
214
|
service_name=self.context.database_service,
|
|
215
215
|
database_name=self.context.database,
|
|
216
|
-
schema_name=self.context.
|
|
216
|
+
schema_name=self.context.database_schema,
|
|
217
217
|
),
|
|
218
218
|
sourceUrl=self.get_source_url(
|
|
219
219
|
table_name=table_name,
|
|
@@ -13,6 +13,7 @@ Airflow source to extract metadata from OM UI
|
|
|
13
13
|
"""
|
|
14
14
|
import traceback
|
|
15
15
|
from datetime import datetime
|
|
16
|
+
from enum import Enum
|
|
16
17
|
from typing import Iterable, List, Optional, cast
|
|
17
18
|
|
|
18
19
|
from airflow.models import BaseOperator, DagRun, TaskInstance
|
|
@@ -61,10 +62,18 @@ from metadata.utils.logger import ingestion_logger
|
|
|
61
62
|
|
|
62
63
|
logger = ingestion_logger()
|
|
63
64
|
|
|
65
|
+
|
|
66
|
+
class AirflowTaskStatus(Enum):
|
|
67
|
+
SUCCESS = "success"
|
|
68
|
+
FAILED = "failed"
|
|
69
|
+
QUEUED = "queued"
|
|
70
|
+
REMOVED = "removed"
|
|
71
|
+
|
|
72
|
+
|
|
64
73
|
STATUS_MAP = {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
AirflowTaskStatus.SUCCESS.value: StatusType.Successful.value,
|
|
75
|
+
AirflowTaskStatus.FAILED.value: StatusType.Failed.value,
|
|
76
|
+
AirflowTaskStatus.QUEUED.value: StatusType.Pending.value,
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
|
|
@@ -169,12 +178,15 @@ class AirflowSource(PipelineServiceSource):
|
|
|
169
178
|
TaskInstance.end_date,
|
|
170
179
|
TaskInstance.run_id,
|
|
171
180
|
)
|
|
172
|
-
.filter(
|
|
181
|
+
.filter(
|
|
182
|
+
TaskInstance.dag_id == dag_id,
|
|
183
|
+
TaskInstance.run_id == run_id,
|
|
184
|
+
# updating old runs flag deleted tasks as `removed`
|
|
185
|
+
TaskInstance.state != AirflowTaskStatus.REMOVED,
|
|
186
|
+
)
|
|
173
187
|
.all()
|
|
174
188
|
)
|
|
175
|
-
except Exception as exc:
|
|
176
|
-
# Using a broad Exception here as the backend can come in many flavours (pymysql, pyodbc...)
|
|
177
|
-
# And we don't want to force all imports
|
|
189
|
+
except Exception as exc:
|
|
178
190
|
logger.debug(traceback.format_exc())
|
|
179
191
|
logger.warning(
|
|
180
192
|
f"Tried to get TaskInstances with run_id. It might not be available in older Airflow versions - {exc}."
|
|
@@ -399,6 +399,7 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
|
|
|
399
399
|
table,
|
|
400
400
|
sample,
|
|
401
401
|
)
|
|
402
|
+
row = None
|
|
402
403
|
|
|
403
404
|
try:
|
|
404
405
|
row = self._get_metric_fn[metric_type.value](
|
|
@@ -412,7 +413,6 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
|
|
|
412
413
|
error = f"{column if column is not None else runner.table.__tablename__} metric_type.value: {exc}"
|
|
413
414
|
logger.error(error)
|
|
414
415
|
self.status.failed_profiler(error, traceback.format_exc())
|
|
415
|
-
row = None
|
|
416
416
|
|
|
417
417
|
if column is not None:
|
|
418
418
|
column = column.name
|
metadata/utils/logger.py
CHANGED
|
@@ -28,6 +28,8 @@ from metadata.ingestion.api.models import Entity
|
|
|
28
28
|
from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
29
29
|
from metadata.ingestion.models.life_cycle import OMetaLifeCycleData
|
|
30
30
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
31
|
+
from metadata.ingestion.models.patch_request import PatchRequest
|
|
32
|
+
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
31
33
|
|
|
32
34
|
METADATA_LOGGER = "metadata"
|
|
33
35
|
BASE_LOGGING_FORMAT = (
|
|
@@ -251,3 +253,14 @@ def _(_: TestCaseResults) -> Optional[str]:
|
|
|
251
253
|
@get_log_name.register
|
|
252
254
|
def _(record: TestCaseResultResponse) -> str:
|
|
253
255
|
return record.testCase.fullyQualifiedName.__root__
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
@get_log_name.register
|
|
259
|
+
def _(record: OMetaPipelineStatus) -> str:
|
|
260
|
+
return f"Pipeline Status [{record.pipeline_fqn}]"
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
@get_log_name.register
|
|
264
|
+
def _(record: PatchRequest) -> str:
|
|
265
|
+
"""Get the log of the new entity"""
|
|
266
|
+
return get_log_name(record.new_entity)
|
metadata/utils/tag_utils.py
CHANGED
|
@@ -40,8 +40,8 @@ logger = ingestion_logger()
|
|
|
40
40
|
def get_ometa_tag_and_classification(
|
|
41
41
|
tags: List[str],
|
|
42
42
|
classification_name: str,
|
|
43
|
-
tag_description: Optional[str],
|
|
44
|
-
classification_description: Optional[str],
|
|
43
|
+
tag_description: Optional[str] = None,
|
|
44
|
+
classification_description: Optional[str] = None,
|
|
45
45
|
include_tags: bool = True,
|
|
46
46
|
tag_fqn: Optional[FullyQualifiedEntityName] = None,
|
|
47
47
|
) -> Iterable[Either[OMetaTagAndClassification]]:
|