openmetadata-ingestion 1.4.3.2__py3-none-any.whl → 1.4.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +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/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 +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 +4 -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 +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/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 +4 -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/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +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/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/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/teradataConnection.py +99 -0
- 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/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 +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 +4 -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/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/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 +1 -1
- metadata/generated/schema/tests/customMetric.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/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 +1 -1
- 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 +3 -3
- 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/lineage/models.py +4 -0
- metadata/ingestion/ometa/mixins/custom_property_mixin.py +14 -1
- metadata/ingestion/source/dashboard/qlikcloud/client.py +27 -11
- metadata/ingestion/source/dashboard/qlikcloud/connection.py +1 -4
- metadata/ingestion/source/dashboard/qlikcloud/metadata.py +2 -2
- metadata/ingestion/source/dashboard/qlikcloud/models.py +11 -2
- metadata/ingestion/source/database/azuresql/connection.py +4 -2
- metadata/ingestion/source/database/column_type_parser.py +11 -0
- metadata/ingestion/source/database/teradata/__init__.py +0 -0
- metadata/ingestion/source/database/teradata/connection.py +98 -0
- metadata/ingestion/source/database/teradata/metadata.py +148 -0
- metadata/ingestion/source/database/teradata/models.py +22 -0
- metadata/ingestion/source/database/teradata/queries.py +77 -0
- metadata/ingestion/source/database/teradata/utils.py +34 -0
- metadata/utils/credentials.py +10 -1
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/METADATA +288 -284
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/RECORD +570 -563
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.4.3.2.dist-info → openmetadata_ingestion-1.4.4.0.dist-info}/top_level.txt +0 -0
|
@@ -64,6 +64,9 @@ from metadata.generated.schema.entity.services.connections.database.snowflakeCon
|
|
|
64
64
|
from metadata.generated.schema.entity.services.connections.database.sqliteConnection import (
|
|
65
65
|
SQLiteType,
|
|
66
66
|
)
|
|
67
|
+
from metadata.generated.schema.entity.services.connections.database.teradataConnection import (
|
|
68
|
+
TeradataType,
|
|
69
|
+
)
|
|
67
70
|
from metadata.utils.singleton import Singleton
|
|
68
71
|
|
|
69
72
|
|
|
@@ -112,6 +115,7 @@ MAP_CONNECTION_TYPE_DIALECT: Dict[str, Dialect] = {
|
|
|
112
115
|
str(SQLiteType.SQLite.value): Dialect.SQLITE,
|
|
113
116
|
str(MssqlType.Mssql.value): Dialect.TSQL,
|
|
114
117
|
str(AzureSQLType.AzureSQL.value): Dialect.TSQL,
|
|
118
|
+
str(TeradataType.Teradata.value): Dialect.TERADATA,
|
|
115
119
|
}
|
|
116
120
|
|
|
117
121
|
|
|
@@ -13,7 +13,9 @@ Mixin class containing Custom Property specific methods
|
|
|
13
13
|
|
|
14
14
|
To be used by OpenMetadata class
|
|
15
15
|
"""
|
|
16
|
-
from typing import Dict
|
|
16
|
+
from typing import Dict, List, Optional, Type, TypeVar
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
17
19
|
|
|
18
20
|
from metadata.generated.schema.type.customProperty import PropertyType
|
|
19
21
|
from metadata.generated.schema.type.entityReference import EntityReference
|
|
@@ -28,6 +30,8 @@ from metadata.utils.logger import ometa_logger
|
|
|
28
30
|
|
|
29
31
|
logger = ometa_logger()
|
|
30
32
|
|
|
33
|
+
T = TypeVar("T", bound=BaseModel)
|
|
34
|
+
|
|
31
35
|
|
|
32
36
|
class OMetaCustomPropertyMixin:
|
|
33
37
|
"""
|
|
@@ -78,3 +82,12 @@ class OMetaCustomPropertyMixin:
|
|
|
78
82
|
return PropertyType(
|
|
79
83
|
__root__=EntityReference(id=custom_property_type.id, type="type")
|
|
80
84
|
)
|
|
85
|
+
|
|
86
|
+
def get_entity_custom_properties(self, entity_type: Type[T]) -> Optional[List]:
|
|
87
|
+
"""
|
|
88
|
+
Get all the custom properties of an entity
|
|
89
|
+
"""
|
|
90
|
+
resp = self.client.get(
|
|
91
|
+
f"/metadata/types/name/{ENTITY_REFERENCE_TYPE_MAP.get(entity_type.__name__)}?fields=customProperties"
|
|
92
|
+
)
|
|
93
|
+
return resp.get("customProperties")
|
|
@@ -13,7 +13,7 @@ REST Auth & Client for QlikCloud
|
|
|
13
13
|
"""
|
|
14
14
|
import json
|
|
15
15
|
import traceback
|
|
16
|
-
from typing import Dict, List, Optional
|
|
16
|
+
from typing import Dict, Iterable, List, Optional
|
|
17
17
|
|
|
18
18
|
from metadata.generated.schema.entity.services.connections.dashboard.qlikCloudConnection import (
|
|
19
19
|
QlikCloudConnection,
|
|
@@ -26,7 +26,10 @@ from metadata.ingestion.source.dashboard.qlikcloud.constants import (
|
|
|
26
26
|
GET_SHEET_LAYOUT,
|
|
27
27
|
OPEN_DOC_REQ,
|
|
28
28
|
)
|
|
29
|
-
from metadata.ingestion.source.dashboard.qlikcloud.models import
|
|
29
|
+
from metadata.ingestion.source.dashboard.qlikcloud.models import (
|
|
30
|
+
QlikApp,
|
|
31
|
+
QlikAppResponse,
|
|
32
|
+
)
|
|
30
33
|
from metadata.ingestion.source.dashboard.qliksense.models import (
|
|
31
34
|
QlikDataModelResult,
|
|
32
35
|
QlikSheet,
|
|
@@ -40,6 +43,7 @@ from metadata.utils.logger import ingestion_logger
|
|
|
40
43
|
logger = ingestion_logger()
|
|
41
44
|
|
|
42
45
|
API_VERSION = "api"
|
|
46
|
+
API_LIMIT = 100
|
|
43
47
|
|
|
44
48
|
|
|
45
49
|
class QlikCloudClient:
|
|
@@ -53,13 +57,12 @@ class QlikCloudClient:
|
|
|
53
57
|
):
|
|
54
58
|
self.config = config
|
|
55
59
|
self.socket_connection = None
|
|
56
|
-
self.config.token = self.config.token.get_secret_value()
|
|
57
60
|
|
|
58
61
|
client_config: ClientConfig = ClientConfig(
|
|
59
62
|
base_url=self.config.hostPort,
|
|
60
63
|
api_version=API_VERSION,
|
|
61
64
|
auth_header=AUTHORIZATION_HEADER,
|
|
62
|
-
auth_token=lambda: (self.config.token, 0),
|
|
65
|
+
auth_token=lambda: (self.config.token.get_secret_value(), 0),
|
|
63
66
|
)
|
|
64
67
|
self.client = REST(client_config)
|
|
65
68
|
|
|
@@ -77,7 +80,7 @@ class QlikCloudClient:
|
|
|
77
80
|
self.socket_connection = create_connection(
|
|
78
81
|
f"wss://{clean_uri(self.config.hostPort.host)}/app/{dashboard_id or ''}",
|
|
79
82
|
sslopt={"cert_reqs": ssl.CERT_NONE},
|
|
80
|
-
header={"Authorization": f"Bearer {self.config.token}"},
|
|
83
|
+
header={"Authorization": f"Bearer {self.config.token.get_secret_value()}"},
|
|
81
84
|
)
|
|
82
85
|
self.socket_connection.recv()
|
|
83
86
|
|
|
@@ -117,19 +120,32 @@ class QlikCloudClient:
|
|
|
117
120
|
logger.warning("Failed to fetch the dashboard charts")
|
|
118
121
|
return []
|
|
119
122
|
|
|
120
|
-
def get_dashboards_list(self) ->
|
|
123
|
+
def get_dashboards_list(self) -> Iterable[QlikApp]:
|
|
121
124
|
"""
|
|
122
125
|
Get List of all apps
|
|
123
126
|
"""
|
|
124
127
|
try:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
link = f"/v1/items?resourceType=app&limit={API_LIMIT}"
|
|
129
|
+
while True:
|
|
130
|
+
resp_apps = self.client.get(link)
|
|
131
|
+
if resp_apps:
|
|
132
|
+
resp = QlikAppResponse(**resp_apps)
|
|
133
|
+
yield from resp.apps
|
|
134
|
+
if resp.links and resp.links.next and resp.links.next.href:
|
|
135
|
+
link = resp.links.next.href.replace(
|
|
136
|
+
f"{self.config.hostPort}{API_VERSION}", ""
|
|
137
|
+
)
|
|
138
|
+
else:
|
|
139
|
+
break
|
|
129
140
|
except Exception:
|
|
130
141
|
logger.debug(traceback.format_exc())
|
|
131
142
|
logger.warning("Failed to fetch the app list")
|
|
132
|
-
|
|
143
|
+
|
|
144
|
+
def get_dashboards_list_test_conn(self) -> Iterable[QlikApp]:
|
|
145
|
+
resp_apps = self.client.get("/v1/items?resourceType=app")
|
|
146
|
+
if resp_apps:
|
|
147
|
+
resp = QlikAppResponse(**resp_apps)
|
|
148
|
+
yield from resp.apps
|
|
133
149
|
|
|
134
150
|
def get_dashboard_details(self, dashboard_id: str) -> Optional[QlikApp]:
|
|
135
151
|
"""
|
|
@@ -43,10 +43,7 @@ def test_connection(
|
|
|
43
43
|
of a metadata workflow or during an Automation Workflow
|
|
44
44
|
"""
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
return client.get_dashboards_list()
|
|
48
|
-
|
|
49
|
-
test_fn = {"GetDashboards": custom_executor}
|
|
46
|
+
test_fn = {"GetDashboards": client.get_dashboards_list_test_conn}
|
|
50
47
|
|
|
51
48
|
test_connection_steps(
|
|
52
49
|
metadata=metadata,
|
|
@@ -36,7 +36,7 @@ from metadata.ingestion.api.models import Either
|
|
|
36
36
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
37
37
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
38
38
|
from metadata.ingestion.source.dashboard.qlikcloud.client import QlikCloudClient
|
|
39
|
-
from metadata.ingestion.source.dashboard.qlikcloud.models import QlikApp
|
|
39
|
+
from metadata.ingestion.source.dashboard.qlikcloud.models import QlikApp
|
|
40
40
|
from metadata.ingestion.source.dashboard.qliksense.metadata import QliksenseSource
|
|
41
41
|
from metadata.ingestion.source.dashboard.qliksense.models import QlikTable
|
|
42
42
|
from metadata.utils import fqn
|
|
@@ -74,7 +74,7 @@ class QlikcloudSource(QliksenseSource):
|
|
|
74
74
|
metadata: OpenMetadata,
|
|
75
75
|
):
|
|
76
76
|
super().__init__(config, metadata)
|
|
77
|
-
self.collections: List[
|
|
77
|
+
self.collections: List[QlikApp] = []
|
|
78
78
|
self.data_models: List[QlikTable] = []
|
|
79
79
|
|
|
80
80
|
def filter_draft_dashboard(self, dashboard: QlikApp) -> bool:
|
|
@@ -27,7 +27,16 @@ class QlikApp(BaseModel):
|
|
|
27
27
|
published: Optional[bool]
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
class
|
|
30
|
+
class QlikLink(BaseModel):
|
|
31
|
+
href: Optional[str] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class QlikLinks(BaseModel):
|
|
35
|
+
next: Optional[QlikLink] = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class QlikAppResponse(BaseModel):
|
|
31
39
|
"""QlikCloud Apps List"""
|
|
32
40
|
|
|
33
|
-
apps: Optional[List[QlikApp]]
|
|
41
|
+
apps: Optional[List[QlikApp]] = Field(None, alias="data")
|
|
42
|
+
links: Optional[QlikLinks] = None
|
|
@@ -22,6 +22,7 @@ from metadata.generated.schema.entity.automations.workflow import (
|
|
|
22
22
|
)
|
|
23
23
|
from metadata.generated.schema.entity.services.connections.database.azureSQLConnection import (
|
|
24
24
|
Authentication,
|
|
25
|
+
AuthenticationMode,
|
|
25
26
|
AzureSQLConnection,
|
|
26
27
|
)
|
|
27
28
|
from metadata.generated.schema.entity.services.connections.database.mssqlConnection import (
|
|
@@ -42,7 +43,8 @@ def get_connection_url(connection: Union[AzureSQLConnection, MssqlConnection]) -
|
|
|
42
43
|
"""
|
|
43
44
|
|
|
44
45
|
if (
|
|
45
|
-
|
|
46
|
+
isinstance(connection, AzureSQLConnection)
|
|
47
|
+
and isinstance(connection.authenticationMode, AuthenticationMode)
|
|
46
48
|
and connection.authenticationMode.authentication is not None
|
|
47
49
|
):
|
|
48
50
|
connection_string = f"Driver={connection.driver};Server={connection.hostPort};Database={connection.database};"
|
|
@@ -82,7 +84,7 @@ def get_connection_url(connection: Union[AzureSQLConnection, MssqlConnection]) -
|
|
|
82
84
|
params = "&".join(
|
|
83
85
|
f"{key}={quote_plus(value)}" for key, value in options.items() if value
|
|
84
86
|
)
|
|
85
|
-
url = f"{url}
|
|
87
|
+
url = f"{url}&{params}"
|
|
86
88
|
|
|
87
89
|
return url
|
|
88
90
|
|
|
@@ -291,6 +291,17 @@ class ColumnTypeParser:
|
|
|
291
291
|
except ImportError:
|
|
292
292
|
pass
|
|
293
293
|
|
|
294
|
+
try:
|
|
295
|
+
# pylint: disable=import-outside-toplevel
|
|
296
|
+
from teradatasqlalchemy import BYTE, VARBYTE
|
|
297
|
+
|
|
298
|
+
_COLUMN_TYPE_MAPPING[BYTE] = "BINARY"
|
|
299
|
+
_SOURCE_TYPE_TO_OM_TYPE["BYTE"] = "BINARY"
|
|
300
|
+
_COLUMN_TYPE_MAPPING[VARBYTE] = "VARBINARY"
|
|
301
|
+
_SOURCE_TYPE_TO_OM_TYPE["VARBYTE"] = "VARBINARY"
|
|
302
|
+
except ImportError:
|
|
303
|
+
pass
|
|
304
|
+
|
|
294
305
|
@staticmethod
|
|
295
306
|
def get_column_type(column_type: Any) -> str:
|
|
296
307
|
for func in [
|
|
File without changes
|
|
@@ -0,0 +1,98 @@
|
|
|
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
|
+
import enum
|
|
16
|
+
from typing import Optional
|
|
17
|
+
from urllib.parse import quote_plus
|
|
18
|
+
|
|
19
|
+
from sqlalchemy.engine import Engine
|
|
20
|
+
|
|
21
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
22
|
+
Workflow as AutomationWorkflow,
|
|
23
|
+
)
|
|
24
|
+
from metadata.generated.schema.entity.services.connections.database.teradataConnection import (
|
|
25
|
+
TeradataConnection,
|
|
26
|
+
)
|
|
27
|
+
from metadata.ingestion.connections.builders import (
|
|
28
|
+
create_generic_db_connection,
|
|
29
|
+
get_connection_args_common,
|
|
30
|
+
get_connection_options_dict,
|
|
31
|
+
)
|
|
32
|
+
from metadata.ingestion.connections.test_connections import test_connection_db_common
|
|
33
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
34
|
+
from metadata.ingestion.source.database.teradata.queries import TERADATA_GET_DATABASE
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_connection_url(connection: TeradataConnection) -> str:
|
|
38
|
+
"""
|
|
39
|
+
Create Teradtaa connection url
|
|
40
|
+
"""
|
|
41
|
+
url = f"{connection.scheme.value}://{connection.hostPort}/"
|
|
42
|
+
url += f"?user={quote_plus(connection.username)}"
|
|
43
|
+
if connection.password:
|
|
44
|
+
url += f"&password={quote_plus(connection.password.get_secret_value())}"
|
|
45
|
+
|
|
46
|
+
# add standard options
|
|
47
|
+
params = "&".join(
|
|
48
|
+
[
|
|
49
|
+
f"{key}={quote_plus(str(getattr(connection, key) if not isinstance(getattr(connection, key), enum.Enum) else getattr(connection, key).value))}"
|
|
50
|
+
for key in ["account", "logdata", "logmech", "tmode"]
|
|
51
|
+
if getattr(connection, key, None)
|
|
52
|
+
]
|
|
53
|
+
)
|
|
54
|
+
url = f"{url}&{params}"
|
|
55
|
+
|
|
56
|
+
# add additional options if specified
|
|
57
|
+
options = get_connection_options_dict(connection)
|
|
58
|
+
if options:
|
|
59
|
+
params = "&".join(
|
|
60
|
+
f"{key}={quote_plus(str(value if not isinstance(value, enum.Enum) else value.value))}"
|
|
61
|
+
for (key, value) in options.items()
|
|
62
|
+
if value
|
|
63
|
+
)
|
|
64
|
+
url += f"{url}&{params}"
|
|
65
|
+
|
|
66
|
+
return url
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_connection(connection: TeradataConnection) -> Engine:
|
|
70
|
+
"""
|
|
71
|
+
Create connection
|
|
72
|
+
"""
|
|
73
|
+
return create_generic_db_connection(
|
|
74
|
+
connection=connection,
|
|
75
|
+
get_connection_url_fn=get_connection_url,
|
|
76
|
+
get_connection_args_fn=get_connection_args_common,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_connection(
|
|
81
|
+
metadata: OpenMetadata,
|
|
82
|
+
engine: Engine,
|
|
83
|
+
service_connection: TeradataConnection,
|
|
84
|
+
automation_workflow: Optional[AutomationWorkflow] = None,
|
|
85
|
+
) -> None:
|
|
86
|
+
"""
|
|
87
|
+
Test connection. This can be executed either as part
|
|
88
|
+
of a metadata workflow or during an Automation Workflow
|
|
89
|
+
"""
|
|
90
|
+
queries = {"GetDatabases": TERADATA_GET_DATABASE}
|
|
91
|
+
|
|
92
|
+
test_connection_db_common(
|
|
93
|
+
metadata=metadata,
|
|
94
|
+
engine=engine,
|
|
95
|
+
service_connection=service_connection,
|
|
96
|
+
automation_workflow=automation_workflow,
|
|
97
|
+
queries=queries,
|
|
98
|
+
)
|
|
@@ -0,0 +1,148 @@
|
|
|
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
|
+
Teradata source implementation.
|
|
14
|
+
"""
|
|
15
|
+
import traceback
|
|
16
|
+
from typing import Iterable, Optional
|
|
17
|
+
|
|
18
|
+
from teradatasqlalchemy.dialect import TeradataDialect
|
|
19
|
+
|
|
20
|
+
from metadata.generated.schema.api.data.createStoredProcedure import (
|
|
21
|
+
CreateStoredProcedureRequest,
|
|
22
|
+
)
|
|
23
|
+
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
24
|
+
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedureCode
|
|
25
|
+
from metadata.generated.schema.entity.services.connections.database.teradataConnection import (
|
|
26
|
+
TeradataConnection,
|
|
27
|
+
)
|
|
28
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
29
|
+
StackTraceError,
|
|
30
|
+
)
|
|
31
|
+
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
32
|
+
Source as WorkflowSource,
|
|
33
|
+
)
|
|
34
|
+
from metadata.generated.schema.type.basic import EntityName
|
|
35
|
+
from metadata.ingestion.api.models import Either
|
|
36
|
+
from metadata.ingestion.api.steps import InvalidSourceException
|
|
37
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
38
|
+
from metadata.ingestion.source.database.common_db_source import CommonDbSourceService
|
|
39
|
+
from metadata.ingestion.source.database.teradata.models import (
|
|
40
|
+
STORED_PROC_LANGUAGE_MAP,
|
|
41
|
+
TeradataStoredProcedure,
|
|
42
|
+
)
|
|
43
|
+
from metadata.ingestion.source.database.teradata.queries import (
|
|
44
|
+
TERADATA_GET_STORED_PROCEDURES,
|
|
45
|
+
TERADATA_SHOW_STORED_PROCEDURE,
|
|
46
|
+
)
|
|
47
|
+
from metadata.ingestion.source.database.teradata.utils import get_table_comment
|
|
48
|
+
from metadata.utils import fqn
|
|
49
|
+
from metadata.utils.logger import ingestion_logger
|
|
50
|
+
from metadata.utils.sqlalchemy_utils import get_all_table_comments
|
|
51
|
+
|
|
52
|
+
logger = ingestion_logger()
|
|
53
|
+
|
|
54
|
+
TeradataDialect.get_table_comment = get_table_comment
|
|
55
|
+
TeradataDialect.get_all_table_comments = get_all_table_comments
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class TeradataSource(CommonDbSourceService):
|
|
59
|
+
"""
|
|
60
|
+
Implements the necessary methods to extract
|
|
61
|
+
Database metadata from Teradata Source
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def create(
|
|
66
|
+
cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
|
|
67
|
+
):
|
|
68
|
+
config: WorkflowSource = WorkflowSource.parse_obj(config_dict)
|
|
69
|
+
connection = config.serviceConnection.__root__.config
|
|
70
|
+
if not isinstance(connection, TeradataConnection):
|
|
71
|
+
raise InvalidSourceException(
|
|
72
|
+
f"Expected TeradataConnection, but got {connection}"
|
|
73
|
+
)
|
|
74
|
+
return cls(config, metadata)
|
|
75
|
+
|
|
76
|
+
def get_stored_procedures(self) -> Iterable[TeradataStoredProcedure]:
|
|
77
|
+
"""List Teradata stored procedures"""
|
|
78
|
+
if self.source_config.includeStoredProcedures:
|
|
79
|
+
results = self.engine.execute(
|
|
80
|
+
TERADATA_GET_STORED_PROCEDURES.format(
|
|
81
|
+
schema_name=self.context.get().database_schema,
|
|
82
|
+
)
|
|
83
|
+
).all()
|
|
84
|
+
for row in results:
|
|
85
|
+
try:
|
|
86
|
+
stored_procedure = TeradataStoredProcedure.parse_obj(dict(row))
|
|
87
|
+
stored_procedure.definition = self.describe_procedure_definition(
|
|
88
|
+
stored_procedure
|
|
89
|
+
)
|
|
90
|
+
yield stored_procedure
|
|
91
|
+
except Exception as exc:
|
|
92
|
+
logger.error()
|
|
93
|
+
self.status.failed(
|
|
94
|
+
error=StackTraceError(
|
|
95
|
+
name=dict(row).get("name", "UNKNOWN"),
|
|
96
|
+
error=f"Error parsing Stored Procedure payload: {exc}",
|
|
97
|
+
stackTrace=traceback.format_exc(),
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def describe_procedure_definition(
|
|
102
|
+
self, stored_procedure: TeradataStoredProcedure
|
|
103
|
+
) -> str:
|
|
104
|
+
"""
|
|
105
|
+
We can only get the SP definition via SHOW PROCEDURE
|
|
106
|
+
"""
|
|
107
|
+
res = self.engine.execute(
|
|
108
|
+
TERADATA_SHOW_STORED_PROCEDURE.format(
|
|
109
|
+
schema_name=stored_procedure.database_schema,
|
|
110
|
+
procedure_name=stored_procedure.procedure_name,
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
return str(res.first()[0])
|
|
114
|
+
|
|
115
|
+
def yield_stored_procedure(
|
|
116
|
+
self, stored_procedure: TeradataStoredProcedure
|
|
117
|
+
) -> Iterable[Either[CreateStoredProcedureRequest]]:
|
|
118
|
+
"""Prepare the stored procedure payload"""
|
|
119
|
+
|
|
120
|
+
try:
|
|
121
|
+
stored_procedure_request = CreateStoredProcedureRequest(
|
|
122
|
+
name=EntityName(__root__=stored_procedure.procedure_name),
|
|
123
|
+
description=None,
|
|
124
|
+
storedProcedureCode=StoredProcedureCode(
|
|
125
|
+
language=STORED_PROC_LANGUAGE_MAP.get(
|
|
126
|
+
stored_procedure.procedure_type
|
|
127
|
+
),
|
|
128
|
+
code=stored_procedure.definition,
|
|
129
|
+
),
|
|
130
|
+
databaseSchema=fqn.build(
|
|
131
|
+
metadata=self.metadata,
|
|
132
|
+
entity_type=DatabaseSchema,
|
|
133
|
+
service_name=self.context.get().database_service,
|
|
134
|
+
database_name=self.context.get().database,
|
|
135
|
+
schema_name=stored_procedure.database_schema,
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
yield Either(right=stored_procedure_request)
|
|
139
|
+
self.register_record_stored_proc_request(stored_procedure_request)
|
|
140
|
+
|
|
141
|
+
except Exception as exc:
|
|
142
|
+
yield Either(
|
|
143
|
+
left=StackTraceError(
|
|
144
|
+
name=stored_procedure.procedure_name,
|
|
145
|
+
error=f"Error yielding Stored Procedure [{stored_procedure.procedure_name}] due to [{exc}]",
|
|
146
|
+
stackTrace=traceback.format_exc(),
|
|
147
|
+
)
|
|
148
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Teradata models
|
|
3
|
+
"""
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from metadata.generated.schema.entity.data.storedProcedure import Language
|
|
9
|
+
|
|
10
|
+
STORED_PROC_LANGUAGE_MAP = {
|
|
11
|
+
"SQL": Language.SQL,
|
|
12
|
+
"EXTERNAL": Language.External,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TeradataStoredProcedure(BaseModel):
|
|
17
|
+
"""Teradata stored procedure list query results"""
|
|
18
|
+
|
|
19
|
+
procedure_name: str = Field(...)
|
|
20
|
+
database_schema: Optional[str] = Field(None)
|
|
21
|
+
procedure_type: str = Field(Language.SQL)
|
|
22
|
+
definition: str = Field(None)
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
SQL Queries used during ingestion
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
TERADATA_GET_TABLE_NAMES = """
|
|
16
|
+
SELECT tablename, databasename from dbc.tablesvx
|
|
17
|
+
WHERE DataBaseName = :schema AND TableKind in ('T','V','O')
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
TERADATA_TABLE_COMMENTS = """
|
|
21
|
+
SELECT DataBaseName as schema,
|
|
22
|
+
TableName as table_name,
|
|
23
|
+
CommentString as table_comment
|
|
24
|
+
FROM dbc.tablesvx
|
|
25
|
+
WHERE TableKind in ('T','V','O')
|
|
26
|
+
ORDER BY "schema", "table_name"
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
TERADATA_GET_STORED_PROCEDURES = """
|
|
30
|
+
SELECT T.DatabaseName AS database_schema,
|
|
31
|
+
T.TableName AS procedure_name,
|
|
32
|
+
case T.TableKind
|
|
33
|
+
when 'P' then 'SQL'
|
|
34
|
+
when 'E' then 'EXTERNAL'
|
|
35
|
+
END as procedure_type
|
|
36
|
+
FROM DBC.TablesVX T
|
|
37
|
+
WHERE T.TableKind in ('P', 'E')
|
|
38
|
+
and T.DatabaseName = '{schema_name}'
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
TERADATA_SHOW_STORED_PROCEDURE = """
|
|
42
|
+
SHOW PROCEDURE {schema_name}.{procedure_name};
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
TERADATA_VIEW_DEFINITIONS = """
|
|
46
|
+
select dbase.DatabaseNameI,
|
|
47
|
+
tvm.TVMNameI,
|
|
48
|
+
tvm.CreateText
|
|
49
|
+
from dbc.tvm tvm join DBC.Dbase dbase
|
|
50
|
+
on tvm.DatabaseId = dbase.DatabaseId
|
|
51
|
+
where TableKind in ('V')
|
|
52
|
+
AND tvm.tvmid NOT IN ( '00C001000000'xb, '00C002000000'xb,
|
|
53
|
+
'00C009000000'xb, '00C010000000'xb,
|
|
54
|
+
'00C017000000'xb, '000000000000'xb)
|
|
55
|
+
AND (tvm.tvmid IN
|
|
56
|
+
/* IDs of Tables accessible to the USER or *PUBLIC* */
|
|
57
|
+
(SELECT TVMId FROM DBC.View_UserTablesExtVX)
|
|
58
|
+
OR
|
|
59
|
+
dbase.DatabaseId IN
|
|
60
|
+
/* IDs of databases accessible to the USER or *PUBLIC* */
|
|
61
|
+
(SELECT DatabaseID FROM DBC.View_UserDBsExtVX)
|
|
62
|
+
)
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
TERADATA_GET_DATABASE = """
|
|
66
|
+
select databasename from dbc.databasesvx
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
TERADATA_GET_DB_NAMES = """
|
|
71
|
+
select databasename from dbc.databasesvx
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
TERADATA_GET_SERVER_VERSION = """
|
|
75
|
+
SELECT InfoData FROM dbc.dbcinfo
|
|
76
|
+
where InfoKey = 'VERSION'
|
|
77
|
+
"""
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
Teradata SQLAlchemy Helper Methods
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from sqlalchemy.engine import reflection
|
|
16
|
+
|
|
17
|
+
from metadata.ingestion.source.database.teradata.queries import TERADATA_TABLE_COMMENTS
|
|
18
|
+
from metadata.utils.logger import ingestion_logger
|
|
19
|
+
from metadata.utils.sqlalchemy_utils import get_table_comment_wrapper
|
|
20
|
+
|
|
21
|
+
logger = ingestion_logger()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@reflection.cache
|
|
25
|
+
def get_table_comment(
|
|
26
|
+
self, connection, table_name, schema=None, **kw
|
|
27
|
+
): # pylint: disable=unused-argument
|
|
28
|
+
return get_table_comment_wrapper(
|
|
29
|
+
self,
|
|
30
|
+
connection,
|
|
31
|
+
table_name=table_name,
|
|
32
|
+
schema=schema,
|
|
33
|
+
query=TERADATA_TABLE_COMMENTS,
|
|
34
|
+
)
|
metadata/utils/credentials.py
CHANGED
|
@@ -137,12 +137,21 @@ def set_google_credentials(gcp_credentials: GCPCredentials) -> None:
|
|
|
137
137
|
os.environ[GOOGLE_CREDENTIALS] = str(gcp_credentials.gcpConfig.__root__)
|
|
138
138
|
return
|
|
139
139
|
|
|
140
|
-
if
|
|
140
|
+
if (
|
|
141
|
+
isinstance(gcp_credentials.gcpConfig, GcpCredentialsValues)
|
|
142
|
+
and gcp_credentials.gcpConfig.projectId is None
|
|
143
|
+
):
|
|
141
144
|
logger.info(
|
|
142
145
|
"No credentials available, using the current environment permissions authenticated via gcloud SDK."
|
|
143
146
|
)
|
|
144
147
|
return
|
|
145
148
|
|
|
149
|
+
if isinstance(gcp_credentials.gcpConfig, GcpExternalAccount):
|
|
150
|
+
logger.info(
|
|
151
|
+
"Using External account credentials to authenticate with GCP services."
|
|
152
|
+
)
|
|
153
|
+
return
|
|
154
|
+
|
|
146
155
|
if isinstance(gcp_credentials.gcpConfig, GcpCredentialsValues):
|
|
147
156
|
if (
|
|
148
157
|
gcp_credentials.gcpConfig.projectId
|