openmetadata-ingestion 1.5.6.0__py3-none-any.whl → 1.5.7.1__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/data_quality/validations/base_test_handler.py +5 -23
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +3 -5
- metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +69 -25
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +50 -12
- metadata/data_quality/validations/utils.py +56 -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/createAPICollection.py +1 -1
- metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/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/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createApiService.py +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/createTestCaseResolutionStatus.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/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/limitsConfiguration.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/custom/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/summaryCard.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/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +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/apiCollection.py +1 -1
- metadata/generated/schema/entity/data/apiEndpoint.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/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +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/apiService.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/apiService/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/apiService/restConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +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 +1 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/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/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +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/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 +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/sapErpConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +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 +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.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/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/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 +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/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 +1 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/api/testEventSubscriptionDestination.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 +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/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/credentials/gitlabCredentials.py +1 -1
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +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/limitsResponse.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +20 -20
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testCaseResolutionStatus.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/apiSchema.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/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 +28 -13
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperties/tableConfig.py +28 -0
- metadata/generated/schema/type/customProperty.py +5 -3
- 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/source/dashboard/mstr/client.py +3 -2
- metadata/ingestion/source/dashboard/quicksight/metadata.py +59 -50
- metadata/ingestion/source/dashboard/quicksight/models.py +2 -2
- metadata/ingestion/source/dashboard/superset/connection.py +6 -1
- metadata/ingestion/source/dashboard/superset/db_source.py +7 -1
- metadata/ingestion/source/dashboard/superset/mixin.py +7 -1
- metadata/ingestion/source/database/couchbase/metadata.py +67 -14
- metadata/ingestion/source/database/couchbase/models.py +31 -0
- metadata/ingestion/source/database/couchbase/queries.py +4 -3
- metadata/ingestion/source/database/dbt/constants.py +55 -0
- metadata/ingestion/source/database/dbt/dbt_service.py +29 -45
- metadata/ingestion/source/database/glue/metadata.py +11 -1
- metadata/ingestion/source/database/glue/models.py +1 -0
- metadata/ingestion/source/database/pinotdb/connection.py +11 -1
- metadata/ingestion/source/database/pinotdb/metadata.py +41 -1
- metadata/ingestion/source/database/postgres/metadata.py +74 -3
- metadata/ingestion/source/database/postgres/models.py +25 -0
- metadata/ingestion/source/database/postgres/queries.py +96 -0
- metadata/ingestion/source/database/salesforce/metadata.py +10 -5
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +160 -14
- metadata/ingestion/source/pipeline/gluepipeline/models.py +78 -0
- metadata/ingestion/source/pipeline/pipeline_service.py +10 -0
- metadata/utils/collections.py +27 -0
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/METADATA +342 -341
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/RECORD +615 -610
- metadata/utils/test_suite.py +0 -84
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.5.6.0.dist-info → openmetadata_ingestion-1.5.7.1.dist-info}/top_level.txt +0 -0
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"""
|
|
13
13
|
Source connection handler
|
|
14
14
|
"""
|
|
15
|
+
from copy import deepcopy
|
|
15
16
|
from typing import Optional
|
|
16
17
|
|
|
17
18
|
from sqlalchemy.engine import Engine
|
|
@@ -26,6 +27,7 @@ from metadata.ingestion.connections.builders import (
|
|
|
26
27
|
create_generic_db_connection,
|
|
27
28
|
get_connection_args_common,
|
|
28
29
|
get_connection_url_common,
|
|
30
|
+
init_empty_connection_arguments,
|
|
29
31
|
)
|
|
30
32
|
from metadata.ingestion.connections.test_connections import test_connection_db_common
|
|
31
33
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
@@ -41,8 +43,16 @@ def get_connection(connection: PinotDBConnection) -> Engine:
|
|
|
41
43
|
"""
|
|
42
44
|
Create connection
|
|
43
45
|
"""
|
|
46
|
+
# TODO: Rename database field to DatabaseSchema
|
|
47
|
+
# Pinot does not support multi database concept
|
|
48
|
+
if connection.database is not None:
|
|
49
|
+
if not connection.connectionArguments:
|
|
50
|
+
connection.connectionArguments = init_empty_connection_arguments()
|
|
51
|
+
connection.connectionArguments.root["database"] = connection.database
|
|
52
|
+
connection_copy = deepcopy(connection)
|
|
53
|
+
connection_copy.database = None
|
|
44
54
|
return create_generic_db_connection(
|
|
45
|
-
connection=
|
|
55
|
+
connection=connection_copy,
|
|
46
56
|
get_connection_url_fn=get_connection_url,
|
|
47
57
|
get_connection_args_fn=get_connection_args_common,
|
|
48
58
|
)
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
# See the License for the specific language governing permissions and
|
|
10
10
|
# limitations under the License.
|
|
11
11
|
"""PinotDb source module"""
|
|
12
|
-
from typing import Optional
|
|
12
|
+
from typing import Iterable, Optional
|
|
13
|
+
|
|
14
|
+
from pinotdb import sqlalchemy as pinot_sqlalchemy
|
|
15
|
+
from sqlalchemy import types
|
|
13
16
|
|
|
14
17
|
from metadata.generated.schema.entity.services.connections.database.pinotDBConnection import (
|
|
15
18
|
PinotDBConnection,
|
|
@@ -22,6 +25,31 @@ from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
|
22
25
|
from metadata.ingestion.source.database.common_db_source import CommonDbSourceService
|
|
23
26
|
|
|
24
27
|
|
|
28
|
+
def get_type_custom(data_type, field_size):
|
|
29
|
+
type_map = {
|
|
30
|
+
"int": types.BigInteger,
|
|
31
|
+
"long": types.BigInteger,
|
|
32
|
+
"float": types.Float,
|
|
33
|
+
"double": types.Numeric,
|
|
34
|
+
# BOOLEAN, is added after release 0.7.1.
|
|
35
|
+
# In release 0.7.1 and older releases, BOOLEAN is equivalent to STRING.
|
|
36
|
+
"boolean": types.Boolean,
|
|
37
|
+
"timestamp": types.TIMESTAMP,
|
|
38
|
+
"string": types.String,
|
|
39
|
+
"json": types.JSON,
|
|
40
|
+
"bytes": types.LargeBinary,
|
|
41
|
+
"big_decimal": types.DECIMAL,
|
|
42
|
+
# Complex types
|
|
43
|
+
"struct": types.BLOB,
|
|
44
|
+
"map": types.BLOB,
|
|
45
|
+
"array": types.ARRAY,
|
|
46
|
+
}
|
|
47
|
+
return type_map.get(data_type.lower())
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
pinot_sqlalchemy.get_type = get_type_custom
|
|
51
|
+
|
|
52
|
+
|
|
25
53
|
class PinotdbSource(CommonDbSourceService):
|
|
26
54
|
"""
|
|
27
55
|
Implements the necessary methods to extract
|
|
@@ -39,3 +67,15 @@ class PinotdbSource(CommonDbSourceService):
|
|
|
39
67
|
f"Expected PinotdbConnection, but got {connection}"
|
|
40
68
|
)
|
|
41
69
|
return cls(config, metadata)
|
|
70
|
+
|
|
71
|
+
def get_database_names(self) -> Iterable[str]:
|
|
72
|
+
"""
|
|
73
|
+
Default case with a single database.
|
|
74
|
+
|
|
75
|
+
It might come informed - or not - from the source.
|
|
76
|
+
|
|
77
|
+
Sources with multiple databases should overwrite this and
|
|
78
|
+
apply the necessary filters.
|
|
79
|
+
"""
|
|
80
|
+
# TODO: Add databaseDisplayName field in PinotDBConnection
|
|
81
|
+
yield "default"
|
|
@@ -13,14 +13,19 @@ Postgres source module
|
|
|
13
13
|
"""
|
|
14
14
|
import traceback
|
|
15
15
|
from collections import namedtuple
|
|
16
|
-
from typing import Iterable, Optional, Tuple
|
|
16
|
+
from typing import Dict, Iterable, List, Optional, Tuple
|
|
17
17
|
|
|
18
18
|
from sqlalchemy import String as SqlAlchemyString
|
|
19
19
|
from sqlalchemy import sql
|
|
20
20
|
from sqlalchemy.dialects.postgresql.base import PGDialect, ischema_names
|
|
21
21
|
from sqlalchemy.engine import Inspector
|
|
22
22
|
|
|
23
|
+
from metadata.generated.schema.api.data.createStoredProcedure import (
|
|
24
|
+
CreateStoredProcedureRequest,
|
|
25
|
+
)
|
|
23
26
|
from metadata.generated.schema.entity.data.database import Database
|
|
27
|
+
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
28
|
+
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedureCode
|
|
24
29
|
from metadata.generated.schema.entity.data.table import (
|
|
25
30
|
PartitionColumnDetails,
|
|
26
31
|
PartitionIntervalTypes,
|
|
@@ -36,7 +41,7 @@ from metadata.generated.schema.entity.services.ingestionPipelines.status import
|
|
|
36
41
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
37
42
|
Source as WorkflowSource,
|
|
38
43
|
)
|
|
39
|
-
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
44
|
+
from metadata.generated.schema.type.basic import EntityName, FullyQualifiedEntityName
|
|
40
45
|
from metadata.ingestion.api.models import Either
|
|
41
46
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
42
47
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
@@ -46,10 +51,13 @@ from metadata.ingestion.source.database.common_db_source import (
|
|
|
46
51
|
CommonDbSourceService,
|
|
47
52
|
TableNameAndType,
|
|
48
53
|
)
|
|
54
|
+
from metadata.ingestion.source.database.mssql.models import STORED_PROC_LANGUAGE_MAP
|
|
49
55
|
from metadata.ingestion.source.database.multi_db_source import MultiDBSource
|
|
56
|
+
from metadata.ingestion.source.database.postgres.models import PostgresStoredProcedure
|
|
50
57
|
from metadata.ingestion.source.database.postgres.queries import (
|
|
51
58
|
POSTGRES_GET_ALL_TABLE_PG_POLICY,
|
|
52
59
|
POSTGRES_GET_DB_NAMES,
|
|
60
|
+
POSTGRES_GET_STORED_PROCEDURES,
|
|
53
61
|
POSTGRES_GET_TABLE_NAMES,
|
|
54
62
|
POSTGRES_PARTITION_DETAILS,
|
|
55
63
|
POSTGRES_SCHEMA_COMMENTS,
|
|
@@ -63,6 +71,10 @@ from metadata.ingestion.source.database.postgres.utils import (
|
|
|
63
71
|
get_table_owner,
|
|
64
72
|
get_view_definition,
|
|
65
73
|
)
|
|
74
|
+
from metadata.ingestion.source.database.stored_procedures_mixin import (
|
|
75
|
+
QueryByProcedure,
|
|
76
|
+
StoredProcedureMixin,
|
|
77
|
+
)
|
|
66
78
|
from metadata.utils import fqn
|
|
67
79
|
from metadata.utils.filters import filter_by_database
|
|
68
80
|
from metadata.utils.importer import import_side_effects
|
|
@@ -142,7 +154,7 @@ Inspector.get_table_owner = get_etable_owner
|
|
|
142
154
|
PGDialect.get_foreign_keys = get_foreign_keys
|
|
143
155
|
|
|
144
156
|
|
|
145
|
-
class PostgresSource(CommonDbSourceService, MultiDBSource):
|
|
157
|
+
class PostgresSource(CommonDbSourceService, MultiDBSource, StoredProcedureMixin):
|
|
146
158
|
"""
|
|
147
159
|
Implements the necessary methods to extract
|
|
148
160
|
Database metadata from Postgres Source
|
|
@@ -298,3 +310,62 @@ class PostgresSource(CommonDbSourceService, MultiDBSource):
|
|
|
298
310
|
stackTrace=traceback.format_exc(),
|
|
299
311
|
)
|
|
300
312
|
)
|
|
313
|
+
|
|
314
|
+
def get_stored_procedures(self) -> Iterable[PostgresStoredProcedure]:
|
|
315
|
+
"""List stored procedures"""
|
|
316
|
+
if self.source_config.includeStoredProcedures:
|
|
317
|
+
results = self.engine.execute(POSTGRES_GET_STORED_PROCEDURES).all()
|
|
318
|
+
for row in results:
|
|
319
|
+
try:
|
|
320
|
+
stored_procedure = PostgresStoredProcedure.model_validate(
|
|
321
|
+
dict(row._mapping)
|
|
322
|
+
)
|
|
323
|
+
yield stored_procedure
|
|
324
|
+
except Exception as exc:
|
|
325
|
+
logger.error()
|
|
326
|
+
self.status.failed(
|
|
327
|
+
error=StackTraceError(
|
|
328
|
+
name=dict(row).get("name", "UNKNOWN"),
|
|
329
|
+
error=f"Error parsing Stored Procedure payload: {exc}",
|
|
330
|
+
stackTrace=traceback.format_exc(),
|
|
331
|
+
)
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
def yield_stored_procedure(
|
|
335
|
+
self, stored_procedure
|
|
336
|
+
) -> Iterable[Either[CreateStoredProcedureRequest]]:
|
|
337
|
+
"""Prepare the stored procedure payload"""
|
|
338
|
+
try:
|
|
339
|
+
stored_procedure_request = CreateStoredProcedureRequest(
|
|
340
|
+
name=EntityName(stored_procedure.name),
|
|
341
|
+
description=None,
|
|
342
|
+
storedProcedureCode=StoredProcedureCode(
|
|
343
|
+
language=STORED_PROC_LANGUAGE_MAP.get(stored_procedure.language),
|
|
344
|
+
code=stored_procedure.definition,
|
|
345
|
+
),
|
|
346
|
+
databaseSchema=fqn.build(
|
|
347
|
+
metadata=self.metadata,
|
|
348
|
+
entity_type=DatabaseSchema,
|
|
349
|
+
service_name=self.context.get().database_service,
|
|
350
|
+
database_name=self.context.get().database,
|
|
351
|
+
schema_name=self.context.get().database_schema,
|
|
352
|
+
),
|
|
353
|
+
)
|
|
354
|
+
yield Either(right=stored_procedure_request)
|
|
355
|
+
self.register_record_stored_proc_request(stored_procedure_request)
|
|
356
|
+
|
|
357
|
+
except Exception as exc:
|
|
358
|
+
yield Either(
|
|
359
|
+
left=StackTraceError(
|
|
360
|
+
name=stored_procedure.name,
|
|
361
|
+
error=f"Error yielding Stored Procedure [{stored_procedure.name}] due to [{exc}]",
|
|
362
|
+
stackTrace=traceback.format_exc(),
|
|
363
|
+
)
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
def get_stored_procedure_queries_dict(self) -> Dict[str, List[QueryByProcedure]]:
|
|
367
|
+
"""
|
|
368
|
+
Return the dictionary associating stored procedures to the
|
|
369
|
+
queries they triggered
|
|
370
|
+
"""
|
|
371
|
+
return {}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
Postgres models
|
|
13
|
+
"""
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
from pydantic import BaseModel, Field
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class PostgresStoredProcedure(BaseModel):
|
|
20
|
+
"""Postgres stored procedure list query results"""
|
|
21
|
+
|
|
22
|
+
name: str = Field(alias="procedure_name")
|
|
23
|
+
schema: str = Field(alias="schema_name")
|
|
24
|
+
definition: str
|
|
25
|
+
language: Optional[str] = None
|
|
@@ -211,3 +211,99 @@ POSTGRES_FETCH_FK = """
|
|
|
211
211
|
n.oid = c.relnamespace
|
|
212
212
|
ORDER BY 1
|
|
213
213
|
"""
|
|
214
|
+
|
|
215
|
+
POSTGRES_GET_JSON_FIELDS = """
|
|
216
|
+
WITH RECURSIVE json_hierarchy AS (
|
|
217
|
+
SELECT
|
|
218
|
+
key AS path,
|
|
219
|
+
json_typeof(value) AS type,
|
|
220
|
+
value,
|
|
221
|
+
json_build_object() AS properties,
|
|
222
|
+
key AS title
|
|
223
|
+
FROM
|
|
224
|
+
{table_name} tbd,
|
|
225
|
+
LATERAL json_each({column_name}::json)
|
|
226
|
+
),
|
|
227
|
+
build_hierarchy AS (
|
|
228
|
+
SELECT
|
|
229
|
+
path,
|
|
230
|
+
type,
|
|
231
|
+
title,
|
|
232
|
+
CASE
|
|
233
|
+
WHEN type = 'object' THEN
|
|
234
|
+
json_build_object(
|
|
235
|
+
'title', title,
|
|
236
|
+
'type', 'object',
|
|
237
|
+
'properties', (
|
|
238
|
+
SELECT json_object_agg(
|
|
239
|
+
key,
|
|
240
|
+
json_build_object(
|
|
241
|
+
'title', key,
|
|
242
|
+
'type', json_typeof(value),
|
|
243
|
+
'properties', (
|
|
244
|
+
CASE
|
|
245
|
+
WHEN json_typeof(value) = 'object' THEN
|
|
246
|
+
(
|
|
247
|
+
SELECT json_object_agg(
|
|
248
|
+
key,
|
|
249
|
+
json_build_object(
|
|
250
|
+
'title', key,
|
|
251
|
+
'type', json_typeof(value),
|
|
252
|
+
'properties',
|
|
253
|
+
json_build_object()
|
|
254
|
+
)
|
|
255
|
+
)
|
|
256
|
+
FROM json_each(value::json) AS sub_key_value
|
|
257
|
+
)
|
|
258
|
+
ELSE json_build_object()
|
|
259
|
+
END
|
|
260
|
+
)
|
|
261
|
+
)
|
|
262
|
+
)
|
|
263
|
+
FROM json_each(value::json) AS key_value
|
|
264
|
+
)
|
|
265
|
+
)
|
|
266
|
+
WHEN type = 'array' THEN
|
|
267
|
+
json_build_object(
|
|
268
|
+
'title', title,
|
|
269
|
+
'type', 'array',
|
|
270
|
+
'properties', json_build_object()
|
|
271
|
+
)
|
|
272
|
+
ELSE
|
|
273
|
+
json_build_object(
|
|
274
|
+
'title', title,
|
|
275
|
+
'type', type
|
|
276
|
+
)
|
|
277
|
+
END AS hierarchy
|
|
278
|
+
FROM
|
|
279
|
+
json_hierarchy
|
|
280
|
+
),
|
|
281
|
+
aggregate_hierarchy AS (
|
|
282
|
+
select
|
|
283
|
+
json_build_object(
|
|
284
|
+
'title','{column_name}',
|
|
285
|
+
'type','object',
|
|
286
|
+
'properties',
|
|
287
|
+
json_object_agg(
|
|
288
|
+
path,
|
|
289
|
+
hierarchy
|
|
290
|
+
)) AS result
|
|
291
|
+
FROM
|
|
292
|
+
build_hierarchy
|
|
293
|
+
)
|
|
294
|
+
SELECT
|
|
295
|
+
result
|
|
296
|
+
FROM
|
|
297
|
+
aggregate_hierarchy;
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
POSTGRES_GET_STORED_PROCEDURES = """
|
|
301
|
+
SELECT proname AS procedure_name,
|
|
302
|
+
nspname AS schema_name,
|
|
303
|
+
proargtypes AS argument_types,
|
|
304
|
+
prorettype::regtype AS return_type,
|
|
305
|
+
prosrc AS definition
|
|
306
|
+
FROM pg_proc
|
|
307
|
+
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
|
|
308
|
+
WHERE prokind = 'p';
|
|
309
|
+
"""
|
|
@@ -203,15 +203,18 @@ class SalesforceSource(DatabaseServiceSource):
|
|
|
203
203
|
)
|
|
204
204
|
)
|
|
205
205
|
|
|
206
|
-
def get_table_description(
|
|
206
|
+
def get_table_description(
|
|
207
|
+
self, table_name: str, object_label: Optional[str]
|
|
208
|
+
) -> Optional[str]:
|
|
207
209
|
"""
|
|
208
210
|
Method to get the table description for salesforce with Tooling API
|
|
209
211
|
"""
|
|
212
|
+
table_description = None
|
|
210
213
|
try:
|
|
211
214
|
result = self.client.toolingexecute(
|
|
212
215
|
f"query/?q=SELECT+Description+FROM+EntityDefinition+WHERE+QualifiedApiName='{table_name}'"
|
|
213
216
|
)
|
|
214
|
-
|
|
217
|
+
table_description = result["records"][0]["Description"]
|
|
215
218
|
except KeyError as err:
|
|
216
219
|
logger.warning(
|
|
217
220
|
f"Unable to get required key from Tooling API response for table [{table_name}]: {err}"
|
|
@@ -225,7 +228,7 @@ class SalesforceSource(DatabaseServiceSource):
|
|
|
225
228
|
logger.warning(
|
|
226
229
|
f"Unable to get description with Tooling API for table [{table_name}]: {exc}"
|
|
227
230
|
)
|
|
228
|
-
return
|
|
231
|
+
return table_description if table_description else object_label
|
|
229
232
|
|
|
230
233
|
def yield_table(
|
|
231
234
|
self, table_name_and_type: Tuple[str, TableType]
|
|
@@ -241,11 +244,13 @@ class SalesforceSource(DatabaseServiceSource):
|
|
|
241
244
|
f"sobjects/{table_name}/describe/",
|
|
242
245
|
params=None,
|
|
243
246
|
)
|
|
244
|
-
columns = self.get_columns(salesforce_objects
|
|
247
|
+
columns = self.get_columns(salesforce_objects.get("fields", []))
|
|
245
248
|
table_request = CreateTableRequest(
|
|
246
249
|
name=EntityName(table_name),
|
|
247
250
|
tableType=table_type,
|
|
248
|
-
description=self.get_table_description(
|
|
251
|
+
description=self.get_table_description(
|
|
252
|
+
table_name, salesforce_objects.get("label")
|
|
253
|
+
),
|
|
249
254
|
columns=columns,
|
|
250
255
|
tableConstraints=table_constraints,
|
|
251
256
|
databaseSchema=FullyQualifiedEntityName(
|
|
@@ -25,6 +25,7 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
25
25
|
Task,
|
|
26
26
|
TaskStatus,
|
|
27
27
|
)
|
|
28
|
+
from metadata.generated.schema.entity.data.table import Table
|
|
28
29
|
from metadata.generated.schema.entity.services.connections.pipeline.gluePipelineConnection import (
|
|
29
30
|
GluePipelineConnection,
|
|
30
31
|
)
|
|
@@ -40,14 +41,25 @@ from metadata.generated.schema.type.basic import (
|
|
|
40
41
|
SourceUrl,
|
|
41
42
|
Timestamp,
|
|
42
43
|
)
|
|
44
|
+
from metadata.generated.schema.type.entityLineage import EntitiesEdge, LineageDetails
|
|
45
|
+
from metadata.generated.schema.type.entityLineage import Source as LineageSource
|
|
46
|
+
from metadata.generated.schema.type.entityReference import EntityReference
|
|
43
47
|
from metadata.ingestion.api.models import Either
|
|
44
48
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
45
49
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
46
50
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
51
|
+
from metadata.ingestion.source.pipeline.gluepipeline.models import (
|
|
52
|
+
AmazonRedshift,
|
|
53
|
+
CatalogSource,
|
|
54
|
+
JDBCSource,
|
|
55
|
+
JobNodeResponse,
|
|
56
|
+
S3Source,
|
|
57
|
+
S3Target,
|
|
58
|
+
)
|
|
47
59
|
from metadata.ingestion.source.pipeline.pipeline_service import PipelineServiceSource
|
|
48
60
|
from metadata.utils import fqn
|
|
49
61
|
from metadata.utils.logger import ingestion_logger
|
|
50
|
-
from metadata.utils.time_utils import
|
|
62
|
+
from metadata.utils.time_utils import datetime_to_timestamp
|
|
51
63
|
|
|
52
64
|
logger = ingestion_logger()
|
|
53
65
|
|
|
@@ -63,6 +75,28 @@ STATUS_MAP = {
|
|
|
63
75
|
"incomplete": StatusType.Failed,
|
|
64
76
|
"pending": StatusType.Pending,
|
|
65
77
|
}
|
|
78
|
+
TABLE_MODEL_MAP = {
|
|
79
|
+
"AmazonRedshiftSource": AmazonRedshift,
|
|
80
|
+
"AmazonRedshiftTarget": AmazonRedshift,
|
|
81
|
+
"AthenaConnectorSource": JDBCSource,
|
|
82
|
+
"JDBCConnectorSource": JDBCSource,
|
|
83
|
+
"JDBCConnectorTarget": JDBCSource,
|
|
84
|
+
"DirectJDBCSource": CatalogSource,
|
|
85
|
+
"RedshiftSource": CatalogSource,
|
|
86
|
+
"RedshiftTarget": CatalogSource,
|
|
87
|
+
"DirectJDBC": CatalogSource,
|
|
88
|
+
}
|
|
89
|
+
STORAGE_MODEL_MAP = {
|
|
90
|
+
"S3CsvSource": S3Source,
|
|
91
|
+
"S3JsonSource": S3Source,
|
|
92
|
+
"S3ParquetSource": S3Source,
|
|
93
|
+
"S3HudiSource": S3Source,
|
|
94
|
+
"S3DeltaSource": S3Source,
|
|
95
|
+
"S3DirectTarget": S3Target,
|
|
96
|
+
"S3DeltaDirectTarget": S3Target,
|
|
97
|
+
"S3GlueParquetTarget": S3Target,
|
|
98
|
+
"S3HudiDirectTarget": S3Target,
|
|
99
|
+
}
|
|
66
100
|
|
|
67
101
|
|
|
68
102
|
class GluepipelineSource(PipelineServiceSource):
|
|
@@ -145,9 +179,88 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
145
179
|
downstream_tasks.append(self.task_id_mapping[edges["DestinationId"]])
|
|
146
180
|
return downstream_tasks
|
|
147
181
|
|
|
182
|
+
def get_lineage_details(self, job) -> Optional[dict]:
|
|
183
|
+
"""
|
|
184
|
+
Get the Lineage Details of the pipeline
|
|
185
|
+
"""
|
|
186
|
+
lineage_details = {"sources": [], "targets": []}
|
|
187
|
+
try:
|
|
188
|
+
job_details = JobNodeResponse.model_validate(
|
|
189
|
+
self.glue.get_job(JobName=job)
|
|
190
|
+
).Job
|
|
191
|
+
if job_details and job_details.config_nodes:
|
|
192
|
+
nodes = job_details.config_nodes
|
|
193
|
+
for _, node in nodes.items():
|
|
194
|
+
for key, entity in node.items():
|
|
195
|
+
table_model, storage_model = None, None
|
|
196
|
+
if key in TABLE_MODEL_MAP:
|
|
197
|
+
table_model = TABLE_MODEL_MAP[key].model_validate(entity)
|
|
198
|
+
elif "Catalog" in key:
|
|
199
|
+
table_model = CatalogSource.model_validate(entity)
|
|
200
|
+
elif key in STORAGE_MODEL_MAP:
|
|
201
|
+
storage_model = STORAGE_MODEL_MAP[key].model_validate(
|
|
202
|
+
entity
|
|
203
|
+
)
|
|
204
|
+
if table_model:
|
|
205
|
+
for db_service_name in self.get_db_service_names():
|
|
206
|
+
table_entity = self.metadata.get_entity_reference(
|
|
207
|
+
entity=Table,
|
|
208
|
+
fqn=fqn.build(
|
|
209
|
+
metadata=self.metadata,
|
|
210
|
+
entity_type=Table,
|
|
211
|
+
table_name=table_model.table_name,
|
|
212
|
+
database_name=table_model.database_name,
|
|
213
|
+
schema_name=table_model.schema_name,
|
|
214
|
+
service_name=db_service_name,
|
|
215
|
+
),
|
|
216
|
+
)
|
|
217
|
+
if table_entity:
|
|
218
|
+
if key.endswith("Source"):
|
|
219
|
+
lineage_details["sources"].append(table_entity)
|
|
220
|
+
else:
|
|
221
|
+
lineage_details["targets"].append(table_entity)
|
|
222
|
+
break
|
|
223
|
+
if storage_model:
|
|
224
|
+
for path in storage_model.Paths or [storage_model.Path]:
|
|
225
|
+
container = self.metadata.es_search_container_by_path(
|
|
226
|
+
full_path=path
|
|
227
|
+
)
|
|
228
|
+
if container and container[0]:
|
|
229
|
+
storage_entity = EntityReference(
|
|
230
|
+
id=container[0].id,
|
|
231
|
+
type="container",
|
|
232
|
+
name=container[0].name.root,
|
|
233
|
+
fullyQualifiedName=container[
|
|
234
|
+
0
|
|
235
|
+
].fullyQualifiedName.root,
|
|
236
|
+
)
|
|
237
|
+
if storage_entity:
|
|
238
|
+
if key.endswith("Source"):
|
|
239
|
+
lineage_details["sources"].append(
|
|
240
|
+
storage_entity
|
|
241
|
+
)
|
|
242
|
+
else:
|
|
243
|
+
lineage_details["targets"].append(
|
|
244
|
+
storage_entity
|
|
245
|
+
)
|
|
246
|
+
break
|
|
247
|
+
|
|
248
|
+
except Exception as exc:
|
|
249
|
+
logger.debug(traceback.format_exc())
|
|
250
|
+
logger.warning(
|
|
251
|
+
f"Failed to get lineage details for job : {job} due to : {exc}"
|
|
252
|
+
)
|
|
253
|
+
return lineage_details
|
|
254
|
+
|
|
148
255
|
def yield_pipeline_status(
|
|
149
256
|
self, pipeline_details: Any
|
|
150
257
|
) -> Iterable[Either[OMetaPipelineStatus]]:
|
|
258
|
+
pipeline_fqn = fqn.build(
|
|
259
|
+
metadata=self.metadata,
|
|
260
|
+
entity_type=Pipeline,
|
|
261
|
+
service_name=self.context.get().pipeline_service,
|
|
262
|
+
pipeline_name=self.context.get().pipeline,
|
|
263
|
+
)
|
|
151
264
|
for job in self.job_name_list:
|
|
152
265
|
try:
|
|
153
266
|
runs = self.glue.get_job_runs(JobName=job)
|
|
@@ -161,13 +274,13 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
161
274
|
attempt["JobRunState"].lower(), StatusType.Pending
|
|
162
275
|
).value,
|
|
163
276
|
startTime=Timestamp(
|
|
164
|
-
|
|
165
|
-
attempt["StartedOn"]
|
|
277
|
+
datetime_to_timestamp(
|
|
278
|
+
attempt["StartedOn"], milliseconds=True
|
|
166
279
|
)
|
|
167
280
|
),
|
|
168
281
|
endTime=Timestamp(
|
|
169
|
-
|
|
170
|
-
attempt["CompletedOn"]
|
|
282
|
+
datetime_to_timestamp(
|
|
283
|
+
attempt["CompletedOn"], milliseconds=True
|
|
171
284
|
)
|
|
172
285
|
),
|
|
173
286
|
)
|
|
@@ -175,20 +288,14 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
175
288
|
pipeline_status = PipelineStatus(
|
|
176
289
|
taskStatus=task_status,
|
|
177
290
|
timestamp=Timestamp(
|
|
178
|
-
|
|
179
|
-
attempt["StartedOn"]
|
|
291
|
+
datetime_to_timestamp(
|
|
292
|
+
attempt["StartedOn"], milliseconds=True
|
|
180
293
|
)
|
|
181
294
|
),
|
|
182
295
|
executionStatus=STATUS_MAP.get(
|
|
183
296
|
attempt["JobRunState"].lower(), StatusType.Pending
|
|
184
297
|
).value,
|
|
185
298
|
)
|
|
186
|
-
pipeline_fqn = fqn.build(
|
|
187
|
-
metadata=self.metadata,
|
|
188
|
-
entity_type=Pipeline,
|
|
189
|
-
service_name=self.context.get().pipeline_service,
|
|
190
|
-
pipeline_name=self.context.get().pipeline,
|
|
191
|
-
)
|
|
192
299
|
yield Either(
|
|
193
300
|
right=OMetaPipelineStatus(
|
|
194
301
|
pipeline_fqn=pipeline_fqn,
|
|
@@ -199,7 +306,7 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
199
306
|
yield Either(
|
|
200
307
|
left=StackTraceError(
|
|
201
308
|
name=pipeline_fqn,
|
|
202
|
-
error=f"Failed to yield pipeline status: {exc}",
|
|
309
|
+
error=f"Failed to yield pipeline status for job {job}: {exc}",
|
|
203
310
|
stackTrace=traceback.format_exc(),
|
|
204
311
|
)
|
|
205
312
|
)
|
|
@@ -210,3 +317,42 @@ class GluepipelineSource(PipelineServiceSource):
|
|
|
210
317
|
"""
|
|
211
318
|
Get lineage between pipeline and data sources
|
|
212
319
|
"""
|
|
320
|
+
try:
|
|
321
|
+
pipeline_fqn = fqn.build(
|
|
322
|
+
metadata=self.metadata,
|
|
323
|
+
entity_type=Pipeline,
|
|
324
|
+
service_name=self.context.get().pipeline_service,
|
|
325
|
+
pipeline_name=self.context.get().pipeline,
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
pipeline_entity = self.metadata.get_by_name(
|
|
329
|
+
entity=Pipeline, fqn=pipeline_fqn
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
lineage_details = LineageDetails(
|
|
333
|
+
pipeline=EntityReference(id=pipeline_entity.id.root, type="pipeline"),
|
|
334
|
+
source=LineageSource.PipelineLineage,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
for job in self.job_name_list:
|
|
338
|
+
lineage_enities = self.get_lineage_details(job)
|
|
339
|
+
for source in lineage_enities.get("sources"):
|
|
340
|
+
for target in lineage_enities.get("targets"):
|
|
341
|
+
yield Either(
|
|
342
|
+
right=AddLineageRequest(
|
|
343
|
+
edge=EntitiesEdge(
|
|
344
|
+
fromEntity=source,
|
|
345
|
+
toEntity=target,
|
|
346
|
+
lineageDetails=lineage_details,
|
|
347
|
+
)
|
|
348
|
+
)
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
except Exception as exc:
|
|
352
|
+
yield Either(
|
|
353
|
+
left=StackTraceError(
|
|
354
|
+
name=pipeline_details.get(NAME),
|
|
355
|
+
error=f"Wild error ingesting pipeline lineage {pipeline_details} - {exc}",
|
|
356
|
+
stackTrace=traceback.format_exc(),
|
|
357
|
+
)
|
|
358
|
+
)
|