openmetadata-ingestion 1.4.0.0rc1__py3-none-any.whl → 1.4.0.0rc3__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/__version__.py +13 -0
- metadata/cli/app.py +0 -1
- metadata/cmd.py +0 -193
- metadata/data_quality/source/test_suite.py +8 -2
- metadata/examples/workflows/kafka_connect.yaml +30 -0
- 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 +1 -1
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/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 +4 -3
- 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/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/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 +2 -2
- 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 +2 -2
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +2 -2
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/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 +3 -3
- 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/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.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 +6 -5
- 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/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +15 -5
- 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 +5 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/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 +4 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +4 -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 +2 -2
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +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 +4 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +7 -3
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/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/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/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/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +5 -2
- 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/ingestionPipelines/status.py +1 -1
- 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 +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 +2 -2
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -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/storageMetadataGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +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/oidcClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/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/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +19 -19
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +2 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +2 -2
- 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 +7 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/customProperties/__init__.py +1 -1
- metadata/generated/schema/type/customProperties/complexTypes.py +9 -10
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +1 -1
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +1 -1
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/ingestion/models/custom_properties.py +2 -0
- metadata/ingestion/models/patch_request.py +1 -1
- metadata/ingestion/ometa/mixins/patch_mixin.py +4 -2
- metadata/ingestion/ometa/mixins/server_mixin.py +9 -12
- metadata/ingestion/ometa/mixins/user_mixin.py +16 -4
- metadata/ingestion/processor/query_parser.py +29 -25
- metadata/ingestion/source/dashboard/powerbi/metadata.py +27 -2
- metadata/ingestion/source/database/athena/client.py +1 -1
- metadata/ingestion/source/database/athena/lineage.py +2 -0
- metadata/ingestion/source/database/athena/models.py +1 -1
- metadata/ingestion/source/database/athena/query_parser.py +2 -0
- metadata/ingestion/source/database/athena/usage.py +2 -0
- metadata/ingestion/source/database/bigquery/metadata.py +28 -9
- metadata/ingestion/source/database/clickhouse/metadata.py +24 -16
- metadata/ingestion/source/database/common_db_source.py +25 -19
- metadata/ingestion/source/database/database_service.py +3 -1
- metadata/ingestion/source/database/databricks/metadata.py +12 -18
- metadata/ingestion/source/database/databricks/queries.py +1 -4
- metadata/ingestion/source/database/dbt/metadata.py +8 -14
- metadata/ingestion/source/database/deltalake/connection.py +2 -2
- metadata/ingestion/source/database/deltalake/metadata.py +1 -1
- metadata/ingestion/source/database/hive/metadata.py +23 -0
- metadata/ingestion/source/database/mssql/metadata.py +6 -0
- metadata/ingestion/source/database/mysql/metadata.py +5 -0
- metadata/ingestion/source/database/oracle/metadata.py +26 -12
- metadata/ingestion/source/database/postgres/metadata.py +4 -0
- metadata/ingestion/source/database/redshift/metadata.py +8 -1
- metadata/ingestion/source/database/sample_data.py +1 -3
- metadata/ingestion/source/database/snowflake/metadata.py +4 -1
- metadata/ingestion/source/database/snowflake/queries.py +4 -0
- metadata/ingestion/source/database/snowflake/utils.py +20 -0
- metadata/ingestion/source/database/sqlalchemy_source.py +2 -2
- metadata/ingestion/source/database/trino/connection.py +13 -0
- metadata/ingestion/source/messaging/common_broker_source.py +42 -3
- metadata/ingestion/source/pipeline/dagster/queries.py +53 -82
- metadata/ingestion/source/pipeline/kafkaconnect/__init__.py +0 -0
- metadata/ingestion/source/pipeline/kafkaconnect/client.py +278 -0
- metadata/ingestion/source/pipeline/kafkaconnect/connection.py +58 -0
- metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +319 -0
- metadata/ingestion/source/pipeline/kafkaconnect/models.py +62 -0
- metadata/ingestion/source/storage/s3/connection.py +10 -1
- metadata/ingestion/source/storage/s3/metadata.py +12 -23
- metadata/ingestion/source/storage/s3/models.py +4 -4
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +1 -3
- metadata/profiler/processor/metric_filter.py +3 -1
- metadata/utils/elasticsearch.py +8 -0
- metadata/utils/messaging_utils.py +43 -0
- metadata/utils/sqlalchemy_utils.py +45 -1
- metadata/utils/tag_utils.py +2 -2
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/METADATA +288 -279
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/RECORD +608 -605
- metadata/applications/auto_tagger.py +0 -212
- metadata/cli/backup.py +0 -209
- metadata/cli/db_dump.py +0 -239
- metadata/cli/utils.py +0 -56
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
"""
|
|
12
|
+
Client to interact with Kafka Connect REST APIs
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import traceback
|
|
16
|
+
from typing import List, Optional
|
|
17
|
+
|
|
18
|
+
from kafka_connect import KafkaConnect
|
|
19
|
+
|
|
20
|
+
from metadata.generated.schema.entity.services.connections.pipeline.kafkaConnectConnection import (
|
|
21
|
+
KafkaConnectConnection,
|
|
22
|
+
)
|
|
23
|
+
from metadata.ingestion.source.pipeline.kafkaconnect.models import (
|
|
24
|
+
KafkaConnectDatasetDetails,
|
|
25
|
+
KafkaConnectPipelineDetails,
|
|
26
|
+
KafkaConnectTasks,
|
|
27
|
+
KafkaConnectTopics,
|
|
28
|
+
)
|
|
29
|
+
from metadata.utils.helpers import clean_uri
|
|
30
|
+
from metadata.utils.logger import ometa_logger
|
|
31
|
+
|
|
32
|
+
logger = ometa_logger()
|
|
33
|
+
|
|
34
|
+
SUPPORTED_DATASETS = {
|
|
35
|
+
"table": [
|
|
36
|
+
"table",
|
|
37
|
+
"collection",
|
|
38
|
+
"snowflake.schema.name",
|
|
39
|
+
"table.whitelist",
|
|
40
|
+
"fields.whitelist",
|
|
41
|
+
],
|
|
42
|
+
"database": ["database", "db.name", "snowflake.database.name"],
|
|
43
|
+
"container_name": ["s3.bucket.name"],
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class KafkaConnectClient:
|
|
48
|
+
"""
|
|
49
|
+
Wrapper on top of KafkaConnect REST API
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def __init__(self, config: KafkaConnectConnection):
|
|
53
|
+
url = clean_uri(config.hostPort)
|
|
54
|
+
auth = None
|
|
55
|
+
ssl_verify = config.verifySSL
|
|
56
|
+
if config.KafkaConnectConfig:
|
|
57
|
+
auth = f"{config.KafkaConnectConfig.username}:{config.KafkaConnectConfig.password}"
|
|
58
|
+
self.client = KafkaConnect(url=url, auth=auth, ssl_verify=ssl_verify)
|
|
59
|
+
|
|
60
|
+
def get_cluster_info(self) -> Optional[dict]:
|
|
61
|
+
"""
|
|
62
|
+
Get the version and other details of the Kafka Connect cluster.
|
|
63
|
+
"""
|
|
64
|
+
try:
|
|
65
|
+
result = self.client.get_cluster_info()
|
|
66
|
+
return result
|
|
67
|
+
|
|
68
|
+
except Exception as exc:
|
|
69
|
+
logger.debug(traceback.format_exc())
|
|
70
|
+
logger.error(f"Unable to get cluster info :{exc}")
|
|
71
|
+
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
def get_connectors(
|
|
75
|
+
self,
|
|
76
|
+
expand: str = None,
|
|
77
|
+
pattern: str = None,
|
|
78
|
+
state: str = None,
|
|
79
|
+
) -> Optional[dict]:
|
|
80
|
+
"""
|
|
81
|
+
Get the list of connectors.
|
|
82
|
+
Args:
|
|
83
|
+
expand (str): Optional parameter that retrieves additional information about the connectors.
|
|
84
|
+
Valid values are "status" and "info".
|
|
85
|
+
pattern (str): Only list connectors that match the regex pattern.
|
|
86
|
+
state (str): Only list connectors that match the state.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
result = self.client.list_connectors(
|
|
91
|
+
expand=expand, pattern=pattern, state=state
|
|
92
|
+
)
|
|
93
|
+
return result
|
|
94
|
+
except Exception as exc:
|
|
95
|
+
logger.debug(traceback.format_exc())
|
|
96
|
+
logger.error(f"Unable to get connectors list {exc}")
|
|
97
|
+
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
def get_connector_plugins(self) -> Optional[dict]:
|
|
101
|
+
"""
|
|
102
|
+
Get the list of connector plugins.
|
|
103
|
+
"""
|
|
104
|
+
try:
|
|
105
|
+
result = self.client.list_connector_plugins()
|
|
106
|
+
return result
|
|
107
|
+
except Exception as exc:
|
|
108
|
+
logger.debug(traceback.format_exc())
|
|
109
|
+
logger.warning(f"Unable to get connector plugins {exc}")
|
|
110
|
+
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
def get_connector_config(self, connector: str) -> Optional[dict]:
|
|
114
|
+
"""
|
|
115
|
+
Get the details of a single connector.
|
|
116
|
+
Args:
|
|
117
|
+
connector (str): The name of the connector.
|
|
118
|
+
"""
|
|
119
|
+
try:
|
|
120
|
+
result = self.client.get_connector(connector=connector)
|
|
121
|
+
if result:
|
|
122
|
+
return result.get("config")
|
|
123
|
+
except Exception as exc:
|
|
124
|
+
logger.debug(traceback.format_exc())
|
|
125
|
+
logger.error(f"Unable to get connector configuration details {exc}")
|
|
126
|
+
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
def get_connector_dataset_info(self, connector: str) -> Optional[dict]:
|
|
130
|
+
"""
|
|
131
|
+
Get the details of dataset of connector if there is any.
|
|
132
|
+
Checks in the connector configurations for dataset fields
|
|
133
|
+
if any related field is found returns the result
|
|
134
|
+
Args:
|
|
135
|
+
connector (str): The name of the connector.
|
|
136
|
+
Returns:
|
|
137
|
+
Optional[Dict]: A dictionary containing dataset information
|
|
138
|
+
(type, table, database, or bucket_name)
|
|
139
|
+
if a dataset is found, or None if the connector
|
|
140
|
+
is not found, has no dataset, or an error occurs.
|
|
141
|
+
"""
|
|
142
|
+
try:
|
|
143
|
+
conn_config = self.get_connector_config(connector=connector)
|
|
144
|
+
|
|
145
|
+
if not conn_config:
|
|
146
|
+
return None
|
|
147
|
+
|
|
148
|
+
result = {}
|
|
149
|
+
for dataset in SUPPORTED_DATASETS or []:
|
|
150
|
+
for key in SUPPORTED_DATASETS[dataset] or []:
|
|
151
|
+
if conn_config.get(key):
|
|
152
|
+
result[dataset] = conn_config[key]
|
|
153
|
+
return KafkaConnectDatasetDetails(**result)
|
|
154
|
+
|
|
155
|
+
except Exception as exc:
|
|
156
|
+
logger.debug(traceback.format_exc())
|
|
157
|
+
logger.warning(f"Unable to get connector dataset details {exc}")
|
|
158
|
+
|
|
159
|
+
return None
|
|
160
|
+
|
|
161
|
+
def get_connector_tasks(self, connector: str) -> Optional[List[KafkaConnectTasks]]:
|
|
162
|
+
"""
|
|
163
|
+
Get the list of tasks for a connector.
|
|
164
|
+
Args:
|
|
165
|
+
connector (str): The name of the connector.
|
|
166
|
+
Returns:
|
|
167
|
+
Optional[List[KafkaConnectTasks]]: A list of KafkaConnectTasks objects
|
|
168
|
+
representing the connector's tasks,
|
|
169
|
+
or None if the connector is not found
|
|
170
|
+
or an error occurs.
|
|
171
|
+
"""
|
|
172
|
+
try:
|
|
173
|
+
result = self.client.get_connector_status(connector=connector)
|
|
174
|
+
tasks = [KafkaConnectTasks(**task) for task in result.get("tasks") or []]
|
|
175
|
+
return tasks
|
|
176
|
+
except Exception as exc:
|
|
177
|
+
logger.debug(traceback.format_exc())
|
|
178
|
+
logger.error(f"Unable to get connector tasks list {exc}")
|
|
179
|
+
|
|
180
|
+
return None
|
|
181
|
+
|
|
182
|
+
def get_connector_task_status(self, connector: str, task_id: int) -> Optional[dict]:
|
|
183
|
+
"""
|
|
184
|
+
Get the status of a specific task for a connector.
|
|
185
|
+
Args:
|
|
186
|
+
connector (str): The name of the connector.
|
|
187
|
+
task_id (int): The ID of the task.
|
|
188
|
+
Returns:
|
|
189
|
+
Optional[Dict]: A dictionary containing the task status information,
|
|
190
|
+
or None if the connector or task is not found
|
|
191
|
+
or an error occurs.
|
|
192
|
+
"""
|
|
193
|
+
try:
|
|
194
|
+
result = self.client.get_connector_task_status(
|
|
195
|
+
connector=connector, task_id=task_id
|
|
196
|
+
)
|
|
197
|
+
return result
|
|
198
|
+
except Exception as exc:
|
|
199
|
+
logger.debug(traceback.format_exc())
|
|
200
|
+
logger.error(f"Unable to get connector tasks status {exc}")
|
|
201
|
+
|
|
202
|
+
return None
|
|
203
|
+
|
|
204
|
+
def get_connector_topics(
|
|
205
|
+
self, connector: str
|
|
206
|
+
) -> Optional[List[KafkaConnectTopics]]:
|
|
207
|
+
"""
|
|
208
|
+
Get the list of topics for a connector.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
connector (str): The name of the connector.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
Optional[List[KafkaConnectTopics]]: A list of KafkaConnectTopics objects
|
|
215
|
+
representing the connector's topics,
|
|
216
|
+
or None if the connector is not found
|
|
217
|
+
or an error occurs.
|
|
218
|
+
"""
|
|
219
|
+
try:
|
|
220
|
+
result = self.client.list_connector_topics(connector=connector).get(
|
|
221
|
+
connector
|
|
222
|
+
)
|
|
223
|
+
if result:
|
|
224
|
+
topics = [
|
|
225
|
+
KafkaConnectTopics(name=topic)
|
|
226
|
+
for topic in result.get("topics") or []
|
|
227
|
+
]
|
|
228
|
+
return topics
|
|
229
|
+
except Exception as exc:
|
|
230
|
+
logger.debug(traceback.format_exc())
|
|
231
|
+
logger.warning(f"Unable to get connector Topics {exc}")
|
|
232
|
+
|
|
233
|
+
return None
|
|
234
|
+
|
|
235
|
+
def get_connector_state(self, connector: str) -> Optional[str]:
|
|
236
|
+
"""
|
|
237
|
+
Get the status of a single connector.
|
|
238
|
+
Args:
|
|
239
|
+
connector (str): The name of the connector.
|
|
240
|
+
"""
|
|
241
|
+
try:
|
|
242
|
+
result = self.client.get_connector_status(connector=connector)
|
|
243
|
+
if result.get("connector"):
|
|
244
|
+
return result["connector"].get("state")
|
|
245
|
+
except Exception as exc:
|
|
246
|
+
logger.debug(traceback.format_exc())
|
|
247
|
+
logger.warning(f"Unable to get connector state due to {exc}")
|
|
248
|
+
|
|
249
|
+
return None
|
|
250
|
+
|
|
251
|
+
def get_connector_list(self) -> Optional[List[KafkaConnectPipelineDetails]]:
|
|
252
|
+
"""
|
|
253
|
+
Get the information of a single connector.
|
|
254
|
+
Args:
|
|
255
|
+
connector (str): The name of the connector.
|
|
256
|
+
Returns:
|
|
257
|
+
Optional[KafkaConnectPipelineDetails]: A KafkaConnectPipelineDetails
|
|
258
|
+
object containing connector information,
|
|
259
|
+
or None if the connector is not found
|
|
260
|
+
or an error occurs.
|
|
261
|
+
"""
|
|
262
|
+
try:
|
|
263
|
+
connectors = []
|
|
264
|
+
for connector in self.get_connectors() or []:
|
|
265
|
+
result = self.client.get_connector_status(connector=connector)
|
|
266
|
+
connector_details = KafkaConnectPipelineDetails(**result)
|
|
267
|
+
connector_details.status = self.get_connector_state(connector=connector)
|
|
268
|
+
connector_details.tasks = self.get_connector_tasks(connector=connector)
|
|
269
|
+
connector_details.topics = self.get_connector_topics(
|
|
270
|
+
connector=connector
|
|
271
|
+
)
|
|
272
|
+
connectors.append(connector_details)
|
|
273
|
+
return connectors
|
|
274
|
+
except Exception as exc:
|
|
275
|
+
logger.debug(traceback.format_exc())
|
|
276
|
+
logger.error(f"Unable to get connector information {exc}")
|
|
277
|
+
|
|
278
|
+
return None
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Source connection handler
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from typing import Optional
|
|
17
|
+
|
|
18
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
19
|
+
Workflow as AutomationWorkflow,
|
|
20
|
+
)
|
|
21
|
+
from metadata.generated.schema.entity.services.connections.pipeline.kafkaConnectConnection import (
|
|
22
|
+
KafkaConnectConnection,
|
|
23
|
+
)
|
|
24
|
+
from metadata.ingestion.connections.test_connections import test_connection_steps
|
|
25
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
26
|
+
from metadata.ingestion.source.pipeline.kafkaconnect.client import KafkaConnectClient
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_connection(connection: KafkaConnectConnection) -> KafkaConnectClient:
|
|
30
|
+
"""
|
|
31
|
+
Create connection
|
|
32
|
+
"""
|
|
33
|
+
return KafkaConnectClient(connection)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_connection(
|
|
37
|
+
metadata: OpenMetadata,
|
|
38
|
+
client: KafkaConnectClient,
|
|
39
|
+
service_connection: KafkaConnectConnection,
|
|
40
|
+
automation_workflow: Optional[AutomationWorkflow] = None,
|
|
41
|
+
) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Test connection. This can be executed either as part
|
|
44
|
+
of a metadata workflow or during an Automation Workflow
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
test_fn = {
|
|
48
|
+
"GetClusterInfo": client.get_cluster_info,
|
|
49
|
+
"GetPipelines": client.get_connectors,
|
|
50
|
+
"GetPlugins": client.get_connector_plugins,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
test_connection_steps(
|
|
54
|
+
metadata=metadata,
|
|
55
|
+
test_fn=test_fn,
|
|
56
|
+
service_type=service_connection.type.value,
|
|
57
|
+
automation_workflow=automation_workflow,
|
|
58
|
+
)
|
|
@@ -0,0 +1,319 @@
|
|
|
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
|
+
KafkaConnect source to extract metadata from OM UI
|
|
13
|
+
"""
|
|
14
|
+
import traceback
|
|
15
|
+
from datetime import datetime
|
|
16
|
+
from typing import Iterable, Optional
|
|
17
|
+
|
|
18
|
+
from metadata.generated.schema.api.data.createPipeline import CreatePipelineRequest
|
|
19
|
+
from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
|
|
20
|
+
from metadata.generated.schema.entity.data.container import Container
|
|
21
|
+
from metadata.generated.schema.entity.data.pipeline import (
|
|
22
|
+
Pipeline,
|
|
23
|
+
PipelineStatus,
|
|
24
|
+
StatusType,
|
|
25
|
+
Task,
|
|
26
|
+
TaskStatus,
|
|
27
|
+
)
|
|
28
|
+
from metadata.generated.schema.entity.data.table import Table
|
|
29
|
+
from metadata.generated.schema.entity.data.topic import Topic
|
|
30
|
+
from metadata.generated.schema.entity.services.connections.pipeline.kafkaConnectConnection import (
|
|
31
|
+
KafkaConnectConnection,
|
|
32
|
+
)
|
|
33
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
34
|
+
StackTraceError,
|
|
35
|
+
)
|
|
36
|
+
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
37
|
+
Source as WorkflowSource,
|
|
38
|
+
)
|
|
39
|
+
from metadata.generated.schema.type.entityLineage import EntitiesEdge, LineageDetails
|
|
40
|
+
from metadata.generated.schema.type.entityLineage import Source as LineageSource
|
|
41
|
+
from metadata.generated.schema.type.entityReference import EntityReference
|
|
42
|
+
from metadata.ingestion.api.models import Either
|
|
43
|
+
from metadata.ingestion.api.steps import InvalidSourceException
|
|
44
|
+
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
45
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata, T
|
|
46
|
+
from metadata.ingestion.source.pipeline.kafkaconnect.models import (
|
|
47
|
+
KafkaConnectPipelineDetails,
|
|
48
|
+
)
|
|
49
|
+
from metadata.ingestion.source.pipeline.pipeline_service import PipelineServiceSource
|
|
50
|
+
from metadata.utils import fqn
|
|
51
|
+
from metadata.utils.constants import ENTITY_REFERENCE_TYPE_MAP
|
|
52
|
+
from metadata.utils.helpers import clean_uri, datetime_to_ts
|
|
53
|
+
from metadata.utils.logger import ingestion_logger
|
|
54
|
+
|
|
55
|
+
logger = ingestion_logger()
|
|
56
|
+
|
|
57
|
+
STATUS_MAP = {
|
|
58
|
+
"RUNNING": StatusType.Successful.value,
|
|
59
|
+
"FAILED": StatusType.Failed.value,
|
|
60
|
+
"PAUSED": StatusType.Pending.value,
|
|
61
|
+
"UNASSIGNED": StatusType.Pending.value,
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class KafkaconnectSource(PipelineServiceSource):
|
|
66
|
+
"""
|
|
67
|
+
Implements the necessary methods ot extract
|
|
68
|
+
Pipeline metadata from Kafka Connect
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def create(
|
|
73
|
+
cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
|
|
74
|
+
):
|
|
75
|
+
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
76
|
+
connection: KafkaConnectConnection = config.serviceConnection.__root__.config
|
|
77
|
+
if not isinstance(connection, KafkaConnectConnection):
|
|
78
|
+
raise InvalidSourceException(
|
|
79
|
+
f"Expected KafkaConnectConnection, but got {connection}"
|
|
80
|
+
)
|
|
81
|
+
return cls(config, metadata)
|
|
82
|
+
|
|
83
|
+
def yield_pipeline(
|
|
84
|
+
self, pipeline_details: KafkaConnectPipelineDetails
|
|
85
|
+
) -> Iterable[Either[CreatePipelineRequest]]:
|
|
86
|
+
"""
|
|
87
|
+
Method to Get Pipeline Entity
|
|
88
|
+
"""
|
|
89
|
+
try:
|
|
90
|
+
connection_url = f"{clean_uri(self.service_connection.hostPort)}"
|
|
91
|
+
|
|
92
|
+
pipeline_request = CreatePipelineRequest(
|
|
93
|
+
name=pipeline_details.name,
|
|
94
|
+
sourceUrl=connection_url,
|
|
95
|
+
tasks=[
|
|
96
|
+
Task(
|
|
97
|
+
name=task.id,
|
|
98
|
+
)
|
|
99
|
+
for task in pipeline_details.tasks or []
|
|
100
|
+
],
|
|
101
|
+
service=self.context.get().pipeline_service,
|
|
102
|
+
)
|
|
103
|
+
yield Either(right=pipeline_request)
|
|
104
|
+
self.register_record(pipeline_request=pipeline_request)
|
|
105
|
+
except Exception as exc:
|
|
106
|
+
yield Either(
|
|
107
|
+
left=StackTraceError(
|
|
108
|
+
name=pipeline_details.name,
|
|
109
|
+
error=f"Wild error ingesting pipeline {pipeline_details} - {exc}",
|
|
110
|
+
stackTrace=traceback.format_exc(),
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def get_dataset_entity(
|
|
115
|
+
self, pipeline_details: KafkaConnectPipelineDetails
|
|
116
|
+
) -> Optional[T]:
|
|
117
|
+
"""
|
|
118
|
+
Get lineage dataset entity
|
|
119
|
+
"""
|
|
120
|
+
try:
|
|
121
|
+
dataset_details = self.client.get_connector_dataset_info(
|
|
122
|
+
connector=pipeline_details.name
|
|
123
|
+
)
|
|
124
|
+
if dataset_details:
|
|
125
|
+
if (
|
|
126
|
+
isinstance(dataset_details.dataset_type, type(Table))
|
|
127
|
+
and self.source_config.lineageInformation.dbServiceNames
|
|
128
|
+
):
|
|
129
|
+
for dbservicename in (
|
|
130
|
+
self.source_config.lineageInformation.dbServiceNames or []
|
|
131
|
+
):
|
|
132
|
+
dataset_entity = self.metadata.get_by_name(
|
|
133
|
+
entity=dataset_details.dataset_type,
|
|
134
|
+
fqn=fqn.build(
|
|
135
|
+
metadata=self.metadata,
|
|
136
|
+
entity_type=dataset_details.dataset_type,
|
|
137
|
+
table_name=dataset_details.table,
|
|
138
|
+
database_name=None,
|
|
139
|
+
schema_name=dataset_details.database,
|
|
140
|
+
service_name=dbservicename,
|
|
141
|
+
),
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
if dataset_entity:
|
|
145
|
+
return dataset_entity
|
|
146
|
+
|
|
147
|
+
if (
|
|
148
|
+
isinstance(dataset_details.dataset_type, type(Container))
|
|
149
|
+
and self.source_config.lineageInformation.storageServiceNames
|
|
150
|
+
):
|
|
151
|
+
for storageservicename in (
|
|
152
|
+
self.source_config.lineageInformation.storageServiceNames or []
|
|
153
|
+
):
|
|
154
|
+
dataset_entity = self.metadata.get_by_name(
|
|
155
|
+
entity=dataset_details.dataset_type,
|
|
156
|
+
fqn=fqn.build(
|
|
157
|
+
metadata=self.metadata,
|
|
158
|
+
entity_type=dataset_details.dataset_type,
|
|
159
|
+
container_name=dataset_details.container_name,
|
|
160
|
+
service_name=storageservicename,
|
|
161
|
+
),
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
if dataset_entity:
|
|
165
|
+
return dataset_entity
|
|
166
|
+
|
|
167
|
+
except Exception as exc:
|
|
168
|
+
logger.debug(traceback.format_exc())
|
|
169
|
+
logger.warning(f"Unable to get dataset entity {exc}")
|
|
170
|
+
|
|
171
|
+
return None
|
|
172
|
+
|
|
173
|
+
def yield_pipeline_lineage_details(
|
|
174
|
+
self, pipeline_details: KafkaConnectPipelineDetails
|
|
175
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
176
|
+
"""
|
|
177
|
+
Get lineage between pipeline and data sources
|
|
178
|
+
"""
|
|
179
|
+
try:
|
|
180
|
+
if not self.service_connection.messagingServiceName:
|
|
181
|
+
logger.debug("Kafka messagingServiceName not found")
|
|
182
|
+
return None
|
|
183
|
+
|
|
184
|
+
pipeline_fqn = fqn.build(
|
|
185
|
+
metadata=self.metadata,
|
|
186
|
+
entity_type=Pipeline,
|
|
187
|
+
service_name=self.context.get().pipeline_service,
|
|
188
|
+
pipeline_name=self.context.get().pipeline,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
pipeline_entity = self.metadata.get_by_name(
|
|
192
|
+
entity=Pipeline, fqn=pipeline_fqn
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
lineage_details = LineageDetails(
|
|
196
|
+
pipeline=EntityReference(
|
|
197
|
+
id=pipeline_entity.id.__root__, type="pipeline"
|
|
198
|
+
),
|
|
199
|
+
source=LineageSource.PipelineLineage,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
dataset_entity = self.get_dataset_entity(pipeline_details=pipeline_details)
|
|
203
|
+
|
|
204
|
+
for topic in pipeline_details.topics or []:
|
|
205
|
+
|
|
206
|
+
topic_fqn = fqn.build(
|
|
207
|
+
metadata=self.metadata,
|
|
208
|
+
entity_type=Topic,
|
|
209
|
+
service_name=self.service_connection.messagingServiceName,
|
|
210
|
+
topic_name=topic.name,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
topic_entity = self.metadata.get_by_name(entity=Topic, fqn=topic_fqn)
|
|
214
|
+
|
|
215
|
+
if topic_entity is None or dataset_entity is None:
|
|
216
|
+
continue
|
|
217
|
+
|
|
218
|
+
if pipeline_details.conn_type.lower() == "sink":
|
|
219
|
+
from_entity, to_entity = topic_entity, dataset_entity
|
|
220
|
+
else:
|
|
221
|
+
from_entity, to_entity = dataset_entity, topic_entity
|
|
222
|
+
|
|
223
|
+
yield Either(
|
|
224
|
+
right=AddLineageRequest(
|
|
225
|
+
edge=EntitiesEdge(
|
|
226
|
+
fromEntity=EntityReference(
|
|
227
|
+
id=from_entity.id,
|
|
228
|
+
type=ENTITY_REFERENCE_TYPE_MAP[
|
|
229
|
+
type(from_entity).__name__
|
|
230
|
+
],
|
|
231
|
+
),
|
|
232
|
+
toEntity=EntityReference(
|
|
233
|
+
id=to_entity.id,
|
|
234
|
+
type=ENTITY_REFERENCE_TYPE_MAP[
|
|
235
|
+
type(to_entity).__name__
|
|
236
|
+
],
|
|
237
|
+
),
|
|
238
|
+
lineageDetails=lineage_details,
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
except Exception as exc:
|
|
243
|
+
yield Either(
|
|
244
|
+
left=StackTraceError(
|
|
245
|
+
name=pipeline_details.name,
|
|
246
|
+
error=f"Wild error ingesting pipeline lineage {pipeline_details} - {exc}",
|
|
247
|
+
stackTrace=traceback.format_exc(),
|
|
248
|
+
)
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
return None
|
|
252
|
+
|
|
253
|
+
def get_pipelines_list(self) -> Iterable[KafkaConnectPipelineDetails]:
|
|
254
|
+
"""
|
|
255
|
+
Get List of all pipelines
|
|
256
|
+
"""
|
|
257
|
+
try:
|
|
258
|
+
yield from self.client.get_connector_list()
|
|
259
|
+
except Exception as exc:
|
|
260
|
+
logger.debug(traceback.format_exc())
|
|
261
|
+
logger.error(f"Failed to get pipeline list due to : {exc}")
|
|
262
|
+
|
|
263
|
+
def get_pipeline_name(self, pipeline_details: KafkaConnectPipelineDetails) -> str:
|
|
264
|
+
"""
|
|
265
|
+
Get Pipeline Name
|
|
266
|
+
"""
|
|
267
|
+
try:
|
|
268
|
+
return pipeline_details.name
|
|
269
|
+
except Exception as exc:
|
|
270
|
+
logger.debug(traceback.format_exc())
|
|
271
|
+
logger.error(f"Failed to get pipeline name to : {exc}")
|
|
272
|
+
|
|
273
|
+
return None
|
|
274
|
+
|
|
275
|
+
def yield_pipeline_status(
|
|
276
|
+
self, pipeline_details: KafkaConnectPipelineDetails
|
|
277
|
+
) -> Iterable[Either[OMetaPipelineStatus]]:
|
|
278
|
+
"""
|
|
279
|
+
Get Pipeline Status
|
|
280
|
+
"""
|
|
281
|
+
try:
|
|
282
|
+
task_status = [
|
|
283
|
+
TaskStatus(
|
|
284
|
+
name=task.id,
|
|
285
|
+
executionStatus=STATUS_MAP.get(task.state, StatusType.Pending),
|
|
286
|
+
)
|
|
287
|
+
for task in pipeline_details.tasks or []
|
|
288
|
+
]
|
|
289
|
+
|
|
290
|
+
pipeline_status = PipelineStatus(
|
|
291
|
+
executionStatus=STATUS_MAP.get(
|
|
292
|
+
pipeline_details.status, StatusType.Pending
|
|
293
|
+
),
|
|
294
|
+
taskStatus=task_status,
|
|
295
|
+
timestamp=datetime_to_ts(datetime.now())
|
|
296
|
+
# Kafka connect doesn't provide any details with exec time
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
pipeline_fqn = fqn.build(
|
|
300
|
+
metadata=self.metadata,
|
|
301
|
+
entity_type=Pipeline,
|
|
302
|
+
service_name=self.context.get().pipeline_service,
|
|
303
|
+
pipeline_name=self.context.get().pipeline,
|
|
304
|
+
)
|
|
305
|
+
yield Either(
|
|
306
|
+
right=OMetaPipelineStatus(
|
|
307
|
+
pipeline_fqn=pipeline_fqn,
|
|
308
|
+
pipeline_status=pipeline_status,
|
|
309
|
+
)
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
except Exception as exc:
|
|
313
|
+
yield Either(
|
|
314
|
+
left=StackTraceError(
|
|
315
|
+
name=pipeline_details.name,
|
|
316
|
+
error=f"Wild error ingesting pipeline status {pipeline_details} - {exc}",
|
|
317
|
+
stackTrace=traceback.format_exc(),
|
|
318
|
+
)
|
|
319
|
+
)
|