openmetadata-ingestion 1.4.7.1__py3-none-any.whl → 1.4.8.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.
- 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 +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +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 +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/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 +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/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 +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/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 +4 -4
- 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 +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/connections/test_connections.py +5 -0
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/source/connections.py +19 -0
- metadata/ingestion/source/database/common_db_source.py +6 -1
- metadata/ingestion/source/database/databricks/metadata.py +33 -1
- metadata/ingestion/source/database/dbt/constants.py +1 -7
- metadata/ingestion/source/database/dbt/dbt_config.py +18 -19
- metadata/ingestion/source/database/dbt/dbt_service.py +4 -3
- metadata/ingestion/source/database/dbt/metadata.py +7 -3
- metadata/ingestion/source/database/dbt/models.py +2 -2
- metadata/ingestion/source/database/oracle/metadata.py +7 -0
- metadata/ingestion/source/database/oracle/queries.py +45 -11
- metadata/ingestion/source/database/oracle/utils.py +33 -0
- metadata/ingestion/source/database/snowflake/metadata.py +0 -6
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +9 -0
- metadata/profiler/metrics/composed/null_ratio.py +3 -7
- metadata/profiler/metrics/hybrid/histogram.py +9 -3
- metadata/profiler/metrics/static/null_count.py +4 -2
- metadata/profiler/orm/functions/table_metric_computer.py +2 -2
- metadata/profiler/orm/registry.py +11 -0
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/METADATA +278 -278
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/RECORD +575 -575
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.4.7.1.dist-info → openmetadata_ingestion-1.4.8.0.dist-info}/top_level.txt +0 -0
|
@@ -249,6 +249,7 @@ def get_view_definition(
|
|
|
249
249
|
)
|
|
250
250
|
return None
|
|
251
251
|
|
|
252
|
+
|
|
252
253
|
@reflection.cache
|
|
253
254
|
def get_table_names(
|
|
254
255
|
self, connection, schema=None, **kw
|
|
@@ -265,13 +266,44 @@ def get_table_names(
|
|
|
265
266
|
if len(row) > 1:
|
|
266
267
|
tables.append(row[1])
|
|
267
268
|
else:
|
|
268
|
-
|
|
269
|
+
table_name = row[0]
|
|
270
|
+
if schema:
|
|
271
|
+
database = kw.get("db_name")
|
|
272
|
+
table_type = get_table_type(connection, database, schema, table_name)
|
|
273
|
+
if not table_type or table_type == "FOREIGN":
|
|
274
|
+
# skip the table if it's foreign table / error in fetching table_type
|
|
275
|
+
logger.debug(
|
|
276
|
+
f"Skipping metadata ingestion for unsupported foreign table {table_name}"
|
|
277
|
+
)
|
|
278
|
+
continue
|
|
279
|
+
tables.append(table_name)
|
|
280
|
+
|
|
269
281
|
# "SHOW TABLES" command in hive also fetches view names
|
|
270
282
|
# Below code filters out view names from table names
|
|
271
283
|
views = self.get_view_names(connection, schema)
|
|
272
284
|
return [table for table in tables if table not in views]
|
|
273
285
|
|
|
274
286
|
|
|
287
|
+
def get_table_type(connection, database, schema, table):
|
|
288
|
+
"""get table type (regular/foreign)"""
|
|
289
|
+
try:
|
|
290
|
+
if database:
|
|
291
|
+
query = DATABRICKS_GET_TABLE_COMMENTS.format(
|
|
292
|
+
database_name=database, schema_name=schema, table_name=table
|
|
293
|
+
)
|
|
294
|
+
else:
|
|
295
|
+
query = f"DESCRIBE TABLE EXTENDED {schema}.{table}"
|
|
296
|
+
rows = connection.execute(query)
|
|
297
|
+
for row in rows:
|
|
298
|
+
row_dict = dict(row)
|
|
299
|
+
if row_dict.get("col_name") == "Type":
|
|
300
|
+
# get type of table
|
|
301
|
+
return row_dict.get("data_type")
|
|
302
|
+
except DatabaseError as err:
|
|
303
|
+
logger.error(f"Failed to fetch table type for table {table} due to: {err}")
|
|
304
|
+
return
|
|
305
|
+
|
|
306
|
+
|
|
275
307
|
DatabricksDialect.get_table_comment = get_table_comment
|
|
276
308
|
DatabricksDialect.get_view_names = get_view_names
|
|
277
309
|
DatabricksDialect.get_columns = get_columns
|
|
@@ -26,13 +26,7 @@ NONE_KEYWORDS_LIST = ["none", "null"]
|
|
|
26
26
|
|
|
27
27
|
DBT_CATALOG_FILE_NAME = "catalog.json"
|
|
28
28
|
DBT_MANIFEST_FILE_NAME = "manifest.json"
|
|
29
|
-
DBT_RUN_RESULTS_FILE_NAME = "run_results
|
|
30
|
-
|
|
31
|
-
DBT_FILE_NAMES_LIST = [
|
|
32
|
-
DBT_CATALOG_FILE_NAME,
|
|
33
|
-
DBT_MANIFEST_FILE_NAME,
|
|
34
|
-
DBT_RUN_RESULTS_FILE_NAME,
|
|
35
|
-
]
|
|
29
|
+
DBT_RUN_RESULTS_FILE_NAME = "run_results"
|
|
36
30
|
|
|
37
31
|
|
|
38
32
|
class SkipResourceTypeEnum(Enum):
|
|
@@ -41,7 +41,6 @@ from metadata.generated.schema.metadataIngestion.dbtconfig.dbtS3Config import (
|
|
|
41
41
|
)
|
|
42
42
|
from metadata.ingestion.source.database.dbt.constants import (
|
|
43
43
|
DBT_CATALOG_FILE_NAME,
|
|
44
|
-
DBT_FILE_NAMES_LIST,
|
|
45
44
|
DBT_MANIFEST_FILE_NAME,
|
|
46
45
|
DBT_RUN_RESULTS_FILE_NAME,
|
|
47
46
|
)
|
|
@@ -129,7 +128,7 @@ def _(config: DbtHttpConfig):
|
|
|
129
128
|
yield DbtFiles(
|
|
130
129
|
dbt_catalog=dbt_catalog.json() if dbt_catalog else None,
|
|
131
130
|
dbt_manifest=dbt_manifest.json(),
|
|
132
|
-
dbt_run_results=dbt_run_results.json() if dbt_run_results else None,
|
|
131
|
+
dbt_run_results=[dbt_run_results.json()] if dbt_run_results else None,
|
|
133
132
|
)
|
|
134
133
|
except DBTConfigException as exc:
|
|
135
134
|
raise exc
|
|
@@ -215,7 +214,7 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
|
|
|
215
214
|
yield DbtFiles(
|
|
216
215
|
dbt_catalog=dbt_catalog,
|
|
217
216
|
dbt_manifest=dbt_manifest,
|
|
218
|
-
dbt_run_results=dbt_run_results,
|
|
217
|
+
dbt_run_results=[dbt_run_results] if dbt_run_results else None,
|
|
219
218
|
)
|
|
220
219
|
except DBTConfigException as exc:
|
|
221
220
|
raise exc
|
|
@@ -232,13 +231,12 @@ def get_blobs_grouped_by_dir(blobs: List[str]) -> Dict[str, List[str]]:
|
|
|
232
231
|
for blob in blobs:
|
|
233
232
|
subdirectory = blob.rsplit("/", 1)[0] if "/" in blob else ""
|
|
234
233
|
blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
)
|
|
241
|
-
None,
|
|
234
|
+
# We'll be processing multiple run_result files from a single dir
|
|
235
|
+
# Grouping them together to process them in a single go
|
|
236
|
+
if (
|
|
237
|
+
DBT_MANIFEST_FILE_NAME == blob_file_name.lower()
|
|
238
|
+
or DBT_CATALOG_FILE_NAME == blob_file_name.lower()
|
|
239
|
+
or DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower()
|
|
242
240
|
):
|
|
243
241
|
blob_grouped_by_directory[subdirectory].append(blob)
|
|
244
242
|
return blob_grouped_by_directory
|
|
@@ -256,7 +254,7 @@ def download_dbt_files(
|
|
|
256
254
|
) in blob_grouped_by_directory.items():
|
|
257
255
|
dbt_catalog = None
|
|
258
256
|
dbt_manifest = None
|
|
259
|
-
dbt_run_results =
|
|
257
|
+
dbt_run_results = []
|
|
260
258
|
kwargs = {}
|
|
261
259
|
if bucket_name:
|
|
262
260
|
kwargs = {"bucket_name": bucket_name}
|
|
@@ -264,10 +262,11 @@ def download_dbt_files(
|
|
|
264
262
|
for blob in blobs:
|
|
265
263
|
if blob:
|
|
266
264
|
reader = get_reader(config_source=config, client=client)
|
|
267
|
-
if
|
|
265
|
+
blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
|
|
266
|
+
if DBT_MANIFEST_FILE_NAME == blob_file_name.lower():
|
|
268
267
|
logger.debug(f"{DBT_MANIFEST_FILE_NAME} found in {key}")
|
|
269
268
|
dbt_manifest = reader.read(path=blob, **kwargs)
|
|
270
|
-
if DBT_CATALOG_FILE_NAME
|
|
269
|
+
if DBT_CATALOG_FILE_NAME == blob_file_name.lower():
|
|
271
270
|
try:
|
|
272
271
|
logger.debug(f"{DBT_CATALOG_FILE_NAME} found in {key}")
|
|
273
272
|
dbt_catalog = reader.read(path=blob, **kwargs)
|
|
@@ -275,10 +274,12 @@ def download_dbt_files(
|
|
|
275
274
|
logger.warning(
|
|
276
275
|
f"{DBT_CATALOG_FILE_NAME} not found in {key}: {exc}"
|
|
277
276
|
)
|
|
278
|
-
if DBT_RUN_RESULTS_FILE_NAME in
|
|
277
|
+
if DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower():
|
|
279
278
|
try:
|
|
280
|
-
logger.debug(f"{
|
|
281
|
-
|
|
279
|
+
logger.debug(f"{blob_file_name} found in {key}")
|
|
280
|
+
dbt_run_result = reader.read(path=blob, **kwargs)
|
|
281
|
+
if dbt_run_result:
|
|
282
|
+
dbt_run_results.append(json.loads(dbt_run_result))
|
|
282
283
|
except Exception as exc:
|
|
283
284
|
logger.warning(
|
|
284
285
|
f"{DBT_RUN_RESULTS_FILE_NAME} not found in {key}: {exc}"
|
|
@@ -288,9 +289,7 @@ def download_dbt_files(
|
|
|
288
289
|
yield DbtFiles(
|
|
289
290
|
dbt_catalog=json.loads(dbt_catalog) if dbt_catalog else None,
|
|
290
291
|
dbt_manifest=json.loads(dbt_manifest),
|
|
291
|
-
dbt_run_results=
|
|
292
|
-
if dbt_run_results
|
|
293
|
-
else None,
|
|
292
|
+
dbt_run_results=dbt_run_results if dbt_run_results else None,
|
|
294
293
|
)
|
|
295
294
|
except DBTConfigException as exc:
|
|
296
295
|
logger.warning(exc)
|
|
@@ -174,9 +174,10 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
174
174
|
if self.context.get().dbt_file.dbt_catalog
|
|
175
175
|
else None,
|
|
176
176
|
dbt_manifest=parse_manifest(self.context.get().dbt_file.dbt_manifest),
|
|
177
|
-
dbt_run_results=
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
dbt_run_results=[
|
|
178
|
+
parse_run_results(run_result_file)
|
|
179
|
+
for run_result_file in self.context.get().dbt_file.dbt_run_results
|
|
180
|
+
]
|
|
180
181
|
if self.context.get().dbt_file.dbt_run_results
|
|
181
182
|
else None,
|
|
182
183
|
)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# pylint: disable=too-many-lines
|
|
1
2
|
# Copyright 2021 Collate
|
|
2
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -303,7 +304,8 @@ class DbtSource(DbtServiceSource):
|
|
|
303
304
|
self.context.get().dbt_tests[key][DbtCommonEnum.RESULTS.value] = next(
|
|
304
305
|
(
|
|
305
306
|
item
|
|
306
|
-
for
|
|
307
|
+
for run_result in dbt_objects.dbt_run_results
|
|
308
|
+
for item in run_result.results
|
|
307
309
|
if item.unique_id == key
|
|
308
310
|
),
|
|
309
311
|
None,
|
|
@@ -330,12 +332,14 @@ class DbtSource(DbtServiceSource):
|
|
|
330
332
|
self.context.get().data_model_links = []
|
|
331
333
|
self.context.get().dbt_tests = {}
|
|
332
334
|
self.context.get().run_results_generate_time = None
|
|
335
|
+
# Since we'll be processing multiple run_results for a single project
|
|
336
|
+
# we'll only consider the first run_results generated_at time
|
|
333
337
|
if (
|
|
334
338
|
dbt_objects.dbt_run_results
|
|
335
|
-
and dbt_objects.dbt_run_results.metadata.generated_at
|
|
339
|
+
and dbt_objects.dbt_run_results[0].metadata.generated_at
|
|
336
340
|
):
|
|
337
341
|
self.context.get().run_results_generate_time = (
|
|
338
|
-
dbt_objects.dbt_run_results.metadata.generated_at
|
|
342
|
+
dbt_objects.dbt_run_results[0].metadata.generated_at
|
|
339
343
|
)
|
|
340
344
|
for key, manifest_node in manifest_entities.items():
|
|
341
345
|
try:
|
|
@@ -20,13 +20,13 @@ from pydantic import BaseModel
|
|
|
20
20
|
class DbtFiles(BaseModel):
|
|
21
21
|
dbt_catalog: Optional[dict]
|
|
22
22
|
dbt_manifest: dict
|
|
23
|
-
dbt_run_results: Optional[dict]
|
|
23
|
+
dbt_run_results: Optional[List[dict]]
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class DbtObjects(BaseModel):
|
|
27
27
|
dbt_catalog: Optional[Any]
|
|
28
28
|
dbt_manifest: Any
|
|
29
|
-
dbt_run_results: Optional[Any]
|
|
29
|
+
dbt_run_results: Optional[List[Any]]
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class DbtFilteredModel(BaseModel):
|
|
@@ -54,6 +54,7 @@ from metadata.ingestion.source.database.oracle.queries import (
|
|
|
54
54
|
)
|
|
55
55
|
from metadata.ingestion.source.database.oracle.utils import (
|
|
56
56
|
_get_col_type,
|
|
57
|
+
_get_constraint_data,
|
|
57
58
|
get_columns,
|
|
58
59
|
get_mview_definition,
|
|
59
60
|
get_mview_names,
|
|
@@ -61,6 +62,8 @@ from metadata.ingestion.source.database.oracle.utils import (
|
|
|
61
62
|
get_table_comment,
|
|
62
63
|
get_table_names,
|
|
63
64
|
get_view_definition,
|
|
65
|
+
get_view_names,
|
|
66
|
+
get_view_names_dialect,
|
|
64
67
|
)
|
|
65
68
|
from metadata.ingestion.source.database.stored_procedures_mixin import (
|
|
66
69
|
QueryByProcedure,
|
|
@@ -97,10 +100,14 @@ OracleDialect.get_table_names = get_table_names
|
|
|
97
100
|
Inspector.get_mview_names = get_mview_names
|
|
98
101
|
Inspector.get_mview_definition = get_mview_definition
|
|
99
102
|
OracleDialect.get_mview_names = get_mview_names_dialect
|
|
103
|
+
Inspector.get_view_names = get_view_names
|
|
104
|
+
OracleDialect.get_view_names = get_view_names_dialect
|
|
100
105
|
|
|
101
106
|
Inspector.get_all_table_ddls = get_all_table_ddls
|
|
102
107
|
Inspector.get_table_ddl = get_table_ddl
|
|
103
108
|
|
|
109
|
+
OracleDialect._get_constraint_data = _get_constraint_data
|
|
110
|
+
|
|
104
111
|
|
|
105
112
|
class OracleSource(StoredProcedureMixin, CommonDbSourceService):
|
|
106
113
|
"""
|
|
@@ -20,7 +20,7 @@ SELECT
|
|
|
20
20
|
comments table_comment,
|
|
21
21
|
LOWER(table_name) "table_name",
|
|
22
22
|
LOWER(owner) "schema"
|
|
23
|
-
FROM
|
|
23
|
+
FROM DBA_TAB_COMMENTS
|
|
24
24
|
where comments is not null and owner not in ('SYSTEM', 'SYS')
|
|
25
25
|
"""
|
|
26
26
|
)
|
|
@@ -32,33 +32,39 @@ SELECT
|
|
|
32
32
|
LOWER(view_name) AS "view_name",
|
|
33
33
|
LOWER(owner) AS "schema",
|
|
34
34
|
DBMS_METADATA.GET_DDL('VIEW', view_name, owner) AS view_def
|
|
35
|
-
FROM
|
|
35
|
+
FROM DBA_VIEWS
|
|
36
36
|
WHERE owner NOT IN ('SYSTEM', 'SYS')
|
|
37
37
|
UNION ALL
|
|
38
38
|
SELECT
|
|
39
39
|
LOWER(mview_name) AS "view_name",
|
|
40
40
|
LOWER(owner) AS "schema",
|
|
41
41
|
DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', mview_name, owner) AS view_def
|
|
42
|
-
FROM
|
|
42
|
+
FROM DBA_MVIEWS
|
|
43
43
|
WHERE owner NOT IN ('SYSTEM', 'SYS')
|
|
44
44
|
"""
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
+
GET_VIEW_NAMES = textwrap.dedent(
|
|
48
|
+
"""
|
|
49
|
+
SELECT view_name FROM DBA_VIEWS WHERE owner = :owner
|
|
50
|
+
"""
|
|
51
|
+
)
|
|
52
|
+
|
|
47
53
|
GET_MATERIALIZED_VIEW_NAMES = textwrap.dedent(
|
|
48
54
|
"""
|
|
49
|
-
SELECT mview_name FROM
|
|
55
|
+
SELECT mview_name FROM DBA_MVIEWS WHERE owner = :owner
|
|
50
56
|
"""
|
|
51
57
|
)
|
|
52
58
|
|
|
53
59
|
ORACLE_GET_TABLE_NAMES = textwrap.dedent(
|
|
54
60
|
"""
|
|
55
|
-
SELECT table_name FROM
|
|
61
|
+
SELECT table_name FROM DBA_TABLES WHERE
|
|
56
62
|
{tablespace}
|
|
57
63
|
OWNER = :owner
|
|
58
64
|
AND IOT_NAME IS NULL
|
|
59
65
|
AND DURATION IS NULL
|
|
60
66
|
AND TABLE_NAME NOT IN
|
|
61
|
-
(SELECT mview_name FROM
|
|
67
|
+
(SELECT mview_name FROM DBA_MVIEWS WHERE owner = :owner)
|
|
62
68
|
"""
|
|
63
69
|
)
|
|
64
70
|
|
|
@@ -67,7 +73,7 @@ ORACLE_IDENTITY_TYPE = textwrap.dedent(
|
|
|
67
73
|
col.default_on_null,
|
|
68
74
|
(
|
|
69
75
|
SELECT id.generation_type || ',' || id.IDENTITY_OPTIONS
|
|
70
|
-
FROM
|
|
76
|
+
FROM DBA_TAB_IDENTITY_COLS{dblink} id
|
|
71
77
|
WHERE col.table_name = id.table_name
|
|
72
78
|
AND col.column_name = id.column_name
|
|
73
79
|
AND col.owner = id.owner
|
|
@@ -83,12 +89,12 @@ SELECT
|
|
|
83
89
|
LINE,
|
|
84
90
|
TEXT
|
|
85
91
|
FROM
|
|
86
|
-
|
|
92
|
+
DBA_SOURCE
|
|
87
93
|
WHERE
|
|
88
94
|
type = 'PROCEDURE' and owner = '{schema}'
|
|
89
95
|
"""
|
|
90
96
|
)
|
|
91
|
-
CHECK_ACCESS_TO_ALL = "SELECT table_name FROM
|
|
97
|
+
CHECK_ACCESS_TO_ALL = "SELECT table_name FROM DBA_TABLES where ROWNUM < 2"
|
|
92
98
|
ORACLE_GET_STORED_PROCEDURE_QUERIES = textwrap.dedent(
|
|
93
99
|
"""
|
|
94
100
|
WITH SP_HISTORY AS (SELECT
|
|
@@ -153,8 +159,8 @@ ORACLE_GET_COLUMNS = textwrap.dedent(
|
|
|
153
159
|
com.comments,
|
|
154
160
|
col.virtual_column,
|
|
155
161
|
{identity_cols}
|
|
156
|
-
FROM
|
|
157
|
-
LEFT JOIN
|
|
162
|
+
FROM DBA_TAB_COLS{dblink} col
|
|
163
|
+
LEFT JOIN DBA_COL_COMMENTS{dblink} com
|
|
158
164
|
ON col.table_name = com.table_name
|
|
159
165
|
AND col.column_name = com.column_name
|
|
160
166
|
AND col.owner = com.owner
|
|
@@ -163,6 +169,34 @@ ORACLE_GET_COLUMNS = textwrap.dedent(
|
|
|
163
169
|
"""
|
|
164
170
|
)
|
|
165
171
|
|
|
172
|
+
ORACLE_ALL_CONSTRAINTS = textwrap.dedent(
|
|
173
|
+
"""
|
|
174
|
+
SELECT
|
|
175
|
+
ac.constraint_name,
|
|
176
|
+
ac.constraint_type,
|
|
177
|
+
loc.column_name AS local_column,
|
|
178
|
+
rem.table_name AS remote_table,
|
|
179
|
+
rem.column_name AS remote_column,
|
|
180
|
+
rem.owner AS remote_owner,
|
|
181
|
+
loc.position as loc_pos,
|
|
182
|
+
rem.position as rem_pos,
|
|
183
|
+
ac.search_condition,
|
|
184
|
+
ac.delete_rule
|
|
185
|
+
FROM DBA_CONSTRAINTS{dblink} ac,
|
|
186
|
+
DBA_CONS_COLUMNS{dblink} loc,
|
|
187
|
+
DBA_CONS_COLUMNS{dblink} rem
|
|
188
|
+
WHERE ac.table_name = CAST(:table_name AS VARCHAR2(128))
|
|
189
|
+
AND ac.constraint_type IN ('R','P', 'U', 'C')
|
|
190
|
+
AND ac.owner = CAST(:owner AS VARCHAR2(128))
|
|
191
|
+
AND ac.owner = loc.owner
|
|
192
|
+
AND ac.constraint_name = loc.constraint_name
|
|
193
|
+
AND ac.r_owner = rem.owner(+)
|
|
194
|
+
AND ac.r_constraint_name = rem.constraint_name(+)
|
|
195
|
+
AND (rem.position IS NULL or loc.position=rem.position)
|
|
196
|
+
ORDER BY ac.constraint_name, loc.position
|
|
197
|
+
"""
|
|
198
|
+
)
|
|
199
|
+
|
|
166
200
|
ORACLE_QUERY_HISTORY_STATEMENT = textwrap.dedent(
|
|
167
201
|
"""
|
|
168
202
|
SELECT
|
|
@@ -21,6 +21,8 @@ from sqlalchemy.sql import sqltypes
|
|
|
21
21
|
|
|
22
22
|
from metadata.ingestion.source.database.oracle.queries import (
|
|
23
23
|
GET_MATERIALIZED_VIEW_NAMES,
|
|
24
|
+
GET_VIEW_NAMES,
|
|
25
|
+
ORACLE_ALL_CONSTRAINTS,
|
|
24
26
|
ORACLE_ALL_TABLE_COMMENTS,
|
|
25
27
|
ORACLE_ALL_VIEW_DEFINITIONS,
|
|
26
28
|
ORACLE_GET_COLUMNS,
|
|
@@ -222,6 +224,26 @@ def get_table_names(self, connection, schema=None, **kw):
|
|
|
222
224
|
return [row[0] for row in cursor]
|
|
223
225
|
|
|
224
226
|
|
|
227
|
+
def get_view_names(self, schema=None):
|
|
228
|
+
"""Return all materialized view names in `schema`.
|
|
229
|
+
|
|
230
|
+
:param schema: Optional, retrieve names from a non-default schema.
|
|
231
|
+
For special quoting, use :class:`.quoted_name`.
|
|
232
|
+
|
|
233
|
+
"""
|
|
234
|
+
|
|
235
|
+
with self._operation_context() as conn:
|
|
236
|
+
return self.dialect.get_view_names(conn, schema, info_cache=self.info_cache)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
@reflection.cache
|
|
240
|
+
def get_view_names_dialect(self, connection, schema=None, **kw):
|
|
241
|
+
schema = self.denormalize_name(schema or self.default_schema_name)
|
|
242
|
+
sql_query = sql.text(GET_VIEW_NAMES)
|
|
243
|
+
cursor = connection.execute(sql_query, {"owner": self.denormalize_name(schema)})
|
|
244
|
+
return [self.normalize_name(row[0]) for row in cursor]
|
|
245
|
+
|
|
246
|
+
|
|
225
247
|
def get_mview_names(self, schema=None):
|
|
226
248
|
"""Return all materialized view names in `schema`.
|
|
227
249
|
|
|
@@ -254,3 +276,14 @@ def get_mview_definition(self, mview_name, schema=None):
|
|
|
254
276
|
return self.dialect.get_view_definition(
|
|
255
277
|
conn, mview_name, schema, info_cache=self.info_cache
|
|
256
278
|
)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
@reflection.cache
|
|
282
|
+
def _get_constraint_data(self, connection, table_name, schema=None, dblink="", **kw):
|
|
283
|
+
|
|
284
|
+
params = {"table_name": table_name, "owner": schema}
|
|
285
|
+
text = ORACLE_ALL_CONSTRAINTS.format(dblink=dblink)
|
|
286
|
+
|
|
287
|
+
rp = connection.execute(sql.text(text), params)
|
|
288
|
+
constraint_data = rp.fetchall()
|
|
289
|
+
return constraint_data
|
|
@@ -61,9 +61,6 @@ from metadata.ingestion.source.database.external_table_lineage_mixin import (
|
|
|
61
61
|
from metadata.ingestion.source.database.incremental_metadata_extraction import (
|
|
62
62
|
IncrementalConfig,
|
|
63
63
|
)
|
|
64
|
-
from metadata.ingestion.source.database.life_cycle_query_mixin import (
|
|
65
|
-
LifeCycleQueryMixin,
|
|
66
|
-
)
|
|
67
64
|
from metadata.ingestion.source.database.multi_db_source import MultiDBSource
|
|
68
65
|
from metadata.ingestion.source.database.snowflake.models import (
|
|
69
66
|
STORED_PROC_LANGUAGE_MAP,
|
|
@@ -81,7 +78,6 @@ from metadata.ingestion.source.database.snowflake.queries import (
|
|
|
81
78
|
SNOWFLAKE_GET_SCHEMA_COMMENTS,
|
|
82
79
|
SNOWFLAKE_GET_STORED_PROCEDURE_QUERIES,
|
|
83
80
|
SNOWFLAKE_GET_STORED_PROCEDURES,
|
|
84
|
-
SNOWFLAKE_LIFE_CYCLE_QUERY,
|
|
85
81
|
SNOWFLAKE_SESSION_TAG_QUERY,
|
|
86
82
|
)
|
|
87
83
|
from metadata.ingestion.source.database.snowflake.utils import (
|
|
@@ -144,7 +140,6 @@ SnowflakeDialect._get_schema_foreign_keys = get_schema_foreign_keys
|
|
|
144
140
|
|
|
145
141
|
|
|
146
142
|
class SnowflakeSource(
|
|
147
|
-
LifeCycleQueryMixin,
|
|
148
143
|
StoredProcedureMixin,
|
|
149
144
|
ExternalTableLineageMixin,
|
|
150
145
|
CommonDbSourceService,
|
|
@@ -170,7 +165,6 @@ class SnowflakeSource(
|
|
|
170
165
|
|
|
171
166
|
self._account: Optional[str] = None
|
|
172
167
|
self._org_name: Optional[str] = None
|
|
173
|
-
self.life_cycle_query = SNOWFLAKE_LIFE_CYCLE_QUERY
|
|
174
168
|
self.context.get_global().deleted_tables = []
|
|
175
169
|
self.pipeline_name = pipeline_name
|
|
176
170
|
self.incremental = incremental_configuration
|
|
@@ -16,6 +16,7 @@ supporting sqlalchemy abstraction layer
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
import concurrent.futures
|
|
19
|
+
import math
|
|
19
20
|
import threading
|
|
20
21
|
import traceback
|
|
21
22
|
from collections import defaultdict
|
|
@@ -450,6 +451,14 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
|
|
|
450
451
|
column=metric_func.column,
|
|
451
452
|
sample=sample,
|
|
452
453
|
)
|
|
454
|
+
if row:
|
|
455
|
+
for k, v in row.items():
|
|
456
|
+
# Replace NaN values with None
|
|
457
|
+
if isinstance(v, float) and math.isnan(v):
|
|
458
|
+
logger.warning(
|
|
459
|
+
"NaN data detected and will be cast to null in OpenMetadata to maintain database parity"
|
|
460
|
+
)
|
|
461
|
+
row[k] = None
|
|
453
462
|
except Exception as exc:
|
|
454
463
|
error = (
|
|
455
464
|
f"{metric_func.column if metric_func.column is not None else metric_func.table.__tablename__} "
|
|
@@ -49,12 +49,8 @@ class NullRatio(ComposedMetric):
|
|
|
49
49
|
Safely compute null ratio based on the profiler
|
|
50
50
|
results of other Metrics
|
|
51
51
|
"""
|
|
52
|
-
import pandas as pd
|
|
53
|
-
|
|
54
52
|
res_count = res.get(Count.name())
|
|
55
53
|
res_null = res.get(NullCount.name())
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return None if pd.isnull(result) else result
|
|
60
|
-
return None
|
|
54
|
+
if res_count + res_null == 0:
|
|
55
|
+
return None
|
|
56
|
+
return res_null / (res_null + res_count)
|
|
@@ -25,7 +25,11 @@ from metadata.profiler.metrics.static.count import Count
|
|
|
25
25
|
from metadata.profiler.metrics.static.max import Max
|
|
26
26
|
from metadata.profiler.metrics.static.min import Min
|
|
27
27
|
from metadata.profiler.orm.functions.length import LenFn
|
|
28
|
-
from metadata.profiler.orm.registry import
|
|
28
|
+
from metadata.profiler.orm.registry import (
|
|
29
|
+
is_concatenable,
|
|
30
|
+
is_quantifiable,
|
|
31
|
+
is_value_non_numeric,
|
|
32
|
+
)
|
|
29
33
|
from metadata.utils.helpers import format_large_string_numbers
|
|
30
34
|
from metadata.utils.logger import profiler_logger
|
|
31
35
|
|
|
@@ -120,7 +124,6 @@ class Histogram(HybridMetric):
|
|
|
120
124
|
# freedman-diaconis rule
|
|
121
125
|
bin_width = self._get_bin_width(float(res_iqr), res_row_count) # type: ignore
|
|
122
126
|
num_bins = math.ceil((res_max - res_min) / bin_width) # type: ignore
|
|
123
|
-
|
|
124
127
|
# sturge's rule
|
|
125
128
|
if res_iqr is None or num_bins > max_bin_count:
|
|
126
129
|
num_bins = int(math.ceil(math.log2(res_row_count) + 1))
|
|
@@ -148,7 +151,10 @@ class Histogram(HybridMetric):
|
|
|
148
151
|
"We are missing the session attribute to compute the Histogram."
|
|
149
152
|
)
|
|
150
153
|
|
|
151
|
-
if not (is_quantifiable(self.col.type) or is_concatenable(self.col.type))
|
|
154
|
+
if not (is_quantifiable(self.col.type) or is_concatenable(self.col.type)) or (
|
|
155
|
+
is_value_non_numeric(res.get(Min.name()))
|
|
156
|
+
or is_value_non_numeric(res.get(Max.name()))
|
|
157
|
+
):
|
|
152
158
|
return None
|
|
153
159
|
|
|
154
160
|
# get the metric need for the freedman-diaconis rule
|
|
@@ -16,6 +16,7 @@ Null Count Metric definition
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
from sqlalchemy import case, column
|
|
19
|
+
from sqlalchemy.sql.functions import coalesce
|
|
19
20
|
|
|
20
21
|
from metadata.generated.schema.configuration.profilerConfiguration import MetricType
|
|
21
22
|
from metadata.profiler.metrics.core import StaticMetric, _label
|
|
@@ -48,8 +49,9 @@ class NullCount(StaticMetric):
|
|
|
48
49
|
@_label
|
|
49
50
|
def fn(self):
|
|
50
51
|
"""sqlalchemy function"""
|
|
51
|
-
return
|
|
52
|
-
case([(column(self.col.name, self.col.type).is_(None), 1)], else_=0)
|
|
52
|
+
return coalesce(
|
|
53
|
+
SumFn(case([(column(self.col.name, self.col.type).is_(None), 1)], else_=0)),
|
|
54
|
+
0,
|
|
53
55
|
)
|
|
54
56
|
|
|
55
57
|
def df_fn(self, dfs=None):
|
|
@@ -194,7 +194,7 @@ class OracleTableMetricComputer(BaseTableMetricComputer):
|
|
|
194
194
|
Column("object_name").label("table_name"),
|
|
195
195
|
Column("created"),
|
|
196
196
|
],
|
|
197
|
-
self._build_table("
|
|
197
|
+
self._build_table("DBA_OBJECTS", None),
|
|
198
198
|
[
|
|
199
199
|
func.lower(Column("owner")) == self.schema_name.lower(),
|
|
200
200
|
func.lower(Column("object_name")) == self.table_name.lower(),
|
|
@@ -209,7 +209,7 @@ class OracleTableMetricComputer(BaseTableMetricComputer):
|
|
|
209
209
|
Column("table_name"),
|
|
210
210
|
Column("NUM_ROWS"),
|
|
211
211
|
],
|
|
212
|
-
self._build_table("
|
|
212
|
+
self._build_table("DBA_TABLES", None),
|
|
213
213
|
[
|
|
214
214
|
func.lower(Column("owner")) == self.schema_name.lower(),
|
|
215
215
|
func.lower(Column("table_name")) == self.table_name.lower(),
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
Custom types' registry for easy access
|
|
14
14
|
without having an import mess
|
|
15
15
|
"""
|
|
16
|
+
import math
|
|
17
|
+
|
|
16
18
|
import sqlalchemy
|
|
17
19
|
from sqlalchemy import Date, DateTime, Integer, Numeric, Time
|
|
18
20
|
from sqlalchemy.sql.sqltypes import Concatenable, Enum
|
|
@@ -166,3 +168,12 @@ def is_concatenable(_type) -> bool:
|
|
|
166
168
|
if isinstance(_type, DataType):
|
|
167
169
|
return _type.value in CONCATENABLE_SET
|
|
168
170
|
return issubclass(_type.__class__, Concatenable)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def is_value_non_numeric(value) -> bool:
|
|
174
|
+
try:
|
|
175
|
+
if isinstance(value, float) and (math.isnan(value) or math.isinf(value)):
|
|
176
|
+
return True
|
|
177
|
+
return False
|
|
178
|
+
except Exception:
|
|
179
|
+
return False
|