openmetadata-ingestion 1.5.0.0rc1__py3-none-any.whl → 1.5.1.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.
- _openmetadata_testutils/kafka/__init__.py +0 -0
- _openmetadata_testutils/kafka/load_csv_data.py +133 -0
- _openmetadata_testutils/kafka/schema_registry_container.py +31 -0
- _openmetadata_testutils/postgres/conftest.py +5 -0
- _openmetadata_testutils/pydantic/test_utils.py +5 -4
- metadata/cli/app.py +0 -1
- metadata/cli/dataquality.py +0 -1
- metadata/cli/ingest.py +0 -1
- metadata/cli/profile.py +0 -1
- metadata/cli/usage.py +0 -1
- metadata/clients/domo_client.py +1 -1
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +7 -6
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +7 -2
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +44 -12
- metadata/generated/antlr/EntityLinkLexer.py +377 -379
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createAPICollection.py +1 -1
- metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +1 -1
- metadata/generated/schema/api/data/createQuery.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
- metadata/generated/schema/api/data/createTable.py +1 -1
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createApiService.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +1 -1
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +1 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +18 -7
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +2 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +23 -2
- metadata/generated/schema/dataInsight/custom/summaryCard.py +8 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -21
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +10 -2
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +9 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +1 -1
- metadata/generated/schema/entity/data/apiEndpoint.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +1 -1
- metadata/generated/schema/entity/data/table.py +2 -1
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +1 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +1 -1
- metadata/generated/schema/entity/domains/domain.py +1 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +1 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/apiService/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/apiService/restConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +7 -2
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +2 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +2 -2
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +1 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +1 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +2 -2
- 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 +7 -5
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gitlabCredentials.py +34 -0
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +2 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +5 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/limitsResponse.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +20 -20
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/customProperties/__init__.py +1 -1
- metadata/generated/schema/type/customProperties/complexTypes.py +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/great_expectations/action.py +1 -1
- metadata/ingestion/connections/builders.py +6 -0
- metadata/ingestion/connections/test_connections.py +5 -0
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +1 -1
- metadata/ingestion/source/connections.py +19 -0
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +3 -3
- metadata/ingestion/source/dashboard/looker/metadata.py +8 -3
- metadata/ingestion/source/dashboard/looker/utils.py +6 -3
- metadata/ingestion/source/dashboard/metabase/client.py +2 -1
- metadata/ingestion/source/dashboard/powerbi/metadata.py +2 -1
- metadata/ingestion/source/dashboard/qlikcloud/client.py +1 -1
- metadata/ingestion/source/dashboard/superset/mixin.py +5 -0
- metadata/ingestion/source/dashboard/tableau/metadata.py +10 -7
- metadata/ingestion/source/database/bigquery/metadata.py +5 -1
- metadata/ingestion/source/database/column_type_parser.py +3 -2
- metadata/ingestion/source/database/common_db_source.py +9 -4
- metadata/ingestion/source/database/database_service.py +1 -1
- metadata/ingestion/source/database/databricks/lineage.py +2 -2
- metadata/ingestion/source/database/databricks/metadata.py +100 -18
- metadata/ingestion/source/database/databricks/queries.py +3 -1
- metadata/ingestion/source/database/databricks/usage.py +2 -2
- metadata/ingestion/source/database/datalake/clients/gcs.py +4 -0
- metadata/ingestion/source/database/db2/metadata.py +8 -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 +14 -3
- metadata/ingestion/source/database/dbt/models.py +2 -2
- metadata/ingestion/source/database/mssql/lineage.py +0 -4
- metadata/ingestion/source/database/mssql/metadata.py +1 -1
- metadata/ingestion/source/database/mssql/usage.py +42 -0
- 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/postgres/converter_orm.py +52 -0
- metadata/ingestion/source/database/postgres/metadata.py +6 -0
- metadata/ingestion/source/database/postgres/metrics.py +42 -0
- metadata/ingestion/source/database/postgres/types/money.py +37 -0
- metadata/ingestion/source/database/postgres/usage.py +6 -0
- metadata/ingestion/source/database/redshift/connection.py +37 -9
- metadata/ingestion/source/database/redshift/queries.py +4 -5
- metadata/ingestion/source/database/unitycatalog/client.py +21 -0
- metadata/ingestion/source/database/unitycatalog/metadata.py +58 -22
- metadata/ingestion/source/pipeline/dagster/metadata.py +17 -14
- metadata/ingestion/source/pipeline/dbtcloud/client.py +29 -4
- metadata/ingestion/source/pipeline/dbtcloud/metadata.py +94 -71
- metadata/ingestion/source/pipeline/dbtcloud/models.py +6 -6
- metadata/ingestion/source/pipeline/dbtcloud/queries.py +22 -11
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +1 -1
- metadata/ingestion/source/pipeline/fivetran/client.py +2 -1
- metadata/ingestion/source/storage/gcs/client.py +4 -9
- metadata/ingestion/source/storage/gcs/metadata.py +4 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +23 -1
- metadata/profiler/metrics/composed/null_ratio.py +5 -8
- metadata/profiler/metrics/hybrid/histogram.py +9 -3
- metadata/profiler/metrics/static/mean.py +8 -9
- metadata/profiler/metrics/static/null_count.py +4 -2
- metadata/profiler/orm/functions/median.py +11 -4
- metadata/profiler/orm/functions/sum.py +1 -1
- metadata/profiler/orm/functions/table_metric_computer.py +2 -2
- metadata/profiler/orm/registry.py +14 -1
- metadata/profiler/processor/default.py +4 -1
- metadata/profiler/processor/sampler/sampler_factory.py +9 -0
- metadata/profiler/processor/sampler/sqlalchemy/azuresql/sampler.py +40 -0
- metadata/profiler/source/base/profiler_source.py +1 -0
- metadata/readers/file/api_reader.py +4 -1
- metadata/readers/file/gitlab.py +172 -0
- metadata/utils/helpers.py +4 -1
- metadata/utils/importer.py +26 -0
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/METADATA +353 -346
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/RECORD +670 -667
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +0 -48
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +0 -44
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +0 -46
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +0 -44
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +0 -39
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +0 -40
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/top_level.txt +0 -0
|
@@ -73,6 +73,9 @@ from metadata.generated.schema.security.credentials.bitbucketCredentials import
|
|
|
73
73
|
from metadata.generated.schema.security.credentials.githubCredentials import (
|
|
74
74
|
GitHubCredentials,
|
|
75
75
|
)
|
|
76
|
+
from metadata.generated.schema.security.credentials.gitlabCredentials import (
|
|
77
|
+
GitlabCredentials,
|
|
78
|
+
)
|
|
76
79
|
from metadata.generated.schema.type.basic import (
|
|
77
80
|
EntityName,
|
|
78
81
|
FullyQualifiedEntityName,
|
|
@@ -203,6 +206,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
203
206
|
NoGitCredentials,
|
|
204
207
|
GitHubCredentials,
|
|
205
208
|
BitBucketCredentials,
|
|
209
|
+
GitlabCredentials,
|
|
206
210
|
]
|
|
207
211
|
]
|
|
208
212
|
) -> "LookMLRepo":
|
|
@@ -225,6 +229,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
225
229
|
NoGitCredentials,
|
|
226
230
|
GitHubCredentials,
|
|
227
231
|
BitBucketCredentials,
|
|
232
|
+
GitlabCredentials,
|
|
228
233
|
]
|
|
229
234
|
],
|
|
230
235
|
path="manifest.lkml",
|
|
@@ -284,7 +289,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
284
289
|
}
|
|
285
290
|
logger.info(f"We found the following parsers:\n {self._project_parsers}")
|
|
286
291
|
|
|
287
|
-
def get_lookml_project_credentials(self, project_name: str) ->
|
|
292
|
+
def get_lookml_project_credentials(self, project_name: str) -> ReadersCredentials:
|
|
288
293
|
"""
|
|
289
294
|
Given a lookml project, get its git URL and build the credentials
|
|
290
295
|
"""
|
|
@@ -305,7 +310,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
305
310
|
Depending on the type of the credentials we'll need a different reader
|
|
306
311
|
"""
|
|
307
312
|
if not self._reader_class and self.service_connection.gitCredentials:
|
|
308
|
-
#
|
|
313
|
+
# Credentials from Github/Gitlab/Bitbucket will process by LocalReader
|
|
309
314
|
self._reader_class = LocalReader
|
|
310
315
|
|
|
311
316
|
return self._reader_class
|
|
@@ -319,7 +324,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
319
324
|
"""
|
|
320
325
|
if not self._repo_credentials:
|
|
321
326
|
if self.service_connection.gitCredentials and isinstance(
|
|
322
|
-
self.service_connection.gitCredentials,
|
|
327
|
+
self.service_connection.gitCredentials, ReadersCredentials
|
|
323
328
|
):
|
|
324
329
|
self._repo_credentials = self.service_connection.gitCredentials
|
|
325
330
|
|
|
@@ -28,6 +28,9 @@ from metadata.generated.schema.security.credentials.bitbucketCredentials import
|
|
|
28
28
|
from metadata.generated.schema.security.credentials.githubCredentials import (
|
|
29
29
|
GitHubCredentials,
|
|
30
30
|
)
|
|
31
|
+
from metadata.generated.schema.security.credentials.gitlabCredentials import (
|
|
32
|
+
GitlabCredentials,
|
|
33
|
+
)
|
|
31
34
|
from metadata.utils.logger import ingestion_logger
|
|
32
35
|
|
|
33
36
|
logger = ingestion_logger()
|
|
@@ -38,9 +41,7 @@ def _clone_repo(
|
|
|
38
41
|
path: str,
|
|
39
42
|
credential: Optional[
|
|
40
43
|
Union[
|
|
41
|
-
NoGitCredentials,
|
|
42
|
-
GitHubCredentials,
|
|
43
|
-
BitBucketCredentials,
|
|
44
|
+
NoGitCredentials, GitHubCredentials, BitBucketCredentials, GitlabCredentials
|
|
44
45
|
]
|
|
45
46
|
],
|
|
46
47
|
overwrite: Optional[bool] = False,
|
|
@@ -60,6 +61,8 @@ def _clone_repo(
|
|
|
60
61
|
elif isinstance(credential, BitBucketCredentials):
|
|
61
62
|
url = f"https://x-token-auth:{credential.token.root.get_secret_value()}@bitbucket.org/{repo_name}.git"
|
|
62
63
|
allow_unsafe_protocols = True
|
|
64
|
+
elif isinstance(credential, GitlabCredentials):
|
|
65
|
+
url = f"https://x-token-auth:{credential.token.root.get_secret_value()}@gitlab.com/{repo_name}.git"
|
|
63
66
|
|
|
64
67
|
assert url is not None
|
|
65
68
|
|
|
@@ -33,6 +33,7 @@ from metadata.ingestion.source.dashboard.metabase.models import (
|
|
|
33
33
|
MetabaseUser,
|
|
34
34
|
)
|
|
35
35
|
from metadata.utils.constants import AUTHORIZATION_HEADER, NO_ACCESS_TOKEN
|
|
36
|
+
from metadata.utils.helpers import clean_uri
|
|
36
37
|
from metadata.utils.logger import ingestion_logger
|
|
37
38
|
|
|
38
39
|
logger = ingestion_logger()
|
|
@@ -78,7 +79,7 @@ class MetabaseClient:
|
|
|
78
79
|
self.config = config
|
|
79
80
|
session_token = self._get_metabase_session()
|
|
80
81
|
client_config: ClientConfig = ClientConfig(
|
|
81
|
-
base_url=str(self.config.hostPort)
|
|
82
|
+
base_url=clean_uri(str(self.config.hostPort)),
|
|
82
83
|
api_version=API_VERSION,
|
|
83
84
|
auth_header=AUTHORIZATION_HEADER,
|
|
84
85
|
auth_token=lambda: (NO_ACCESS_TOKEN, 0),
|
|
@@ -102,7 +102,8 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
102
102
|
|
|
103
103
|
def close(self):
|
|
104
104
|
self.metadata.close()
|
|
105
|
-
self.client.file_client
|
|
105
|
+
if self.client.file_client:
|
|
106
|
+
self.client.file_client.delete_tmp_files()
|
|
106
107
|
|
|
107
108
|
def get_filtered_workspaces(self, groups: List[Group]) -> List[Group]:
|
|
108
109
|
"""
|
|
@@ -145,7 +145,7 @@ class QlikCloudClient:
|
|
|
145
145
|
resp_apps = self.client.get("/v1/items?resourceType=app")
|
|
146
146
|
if resp_apps:
|
|
147
147
|
resp = QlikAppResponse(**resp_apps)
|
|
148
|
-
|
|
148
|
+
return list(resp.apps)
|
|
149
149
|
|
|
150
150
|
def get_dashboard_details(self, dashboard_id: str) -> Optional[QlikApp]:
|
|
151
151
|
"""
|
|
@@ -223,6 +223,10 @@ class SupersetSourceMixin(DashboardServiceSource):
|
|
|
223
223
|
)
|
|
224
224
|
return None
|
|
225
225
|
|
|
226
|
+
def _clearn_column_datatype(self, datatype: str) -> str:
|
|
227
|
+
"""clean datatype of column fetched from superset"""
|
|
228
|
+
return datatype.replace("()", "")
|
|
229
|
+
|
|
226
230
|
def get_column_info(
|
|
227
231
|
self, data_source: List[Union[DataSourceResult, FetchColumn]]
|
|
228
232
|
) -> Optional[List[Column]]:
|
|
@@ -236,6 +240,7 @@ class SupersetSourceMixin(DashboardServiceSource):
|
|
|
236
240
|
for field in data_source or []:
|
|
237
241
|
try:
|
|
238
242
|
if field.type:
|
|
243
|
+
field.type = self._clearn_column_datatype(field.type)
|
|
239
244
|
col_parse = ColumnTypeParser._parse_datatype_string( # pylint: disable=protected-access
|
|
240
245
|
field.type
|
|
241
246
|
)
|
|
@@ -313,17 +313,18 @@ class TableauSource(DashboardServiceSource):
|
|
|
313
313
|
@staticmethod
|
|
314
314
|
def _get_data_model_column_fqn(
|
|
315
315
|
data_model_entity: DashboardDataModel, column: str
|
|
316
|
-
) -> Optional[str]:
|
|
316
|
+
) -> Optional[List[str]]:
|
|
317
317
|
"""
|
|
318
318
|
Get fqn of column if exist in table entity
|
|
319
319
|
"""
|
|
320
320
|
if not data_model_entity:
|
|
321
321
|
return None
|
|
322
|
+
columns = []
|
|
322
323
|
for tbl_column in data_model_entity.columns:
|
|
323
324
|
for child_column in tbl_column.children or []:
|
|
324
325
|
if column.lower() == child_column.name.root.lower():
|
|
325
|
-
|
|
326
|
-
return
|
|
326
|
+
columns.append(child_column.fullyQualifiedName.root)
|
|
327
|
+
return columns
|
|
327
328
|
|
|
328
329
|
def _get_column_lineage( # pylint: disable=arguments-differ
|
|
329
330
|
self,
|
|
@@ -342,13 +343,15 @@ class TableauSource(DashboardServiceSource):
|
|
|
342
343
|
from_column = get_column_fqn(
|
|
343
344
|
table_entity=table_entity, column=column.name
|
|
344
345
|
)
|
|
345
|
-
|
|
346
|
+
to_columns = self._get_data_model_column_fqn(
|
|
346
347
|
data_model_entity=data_model_entity,
|
|
347
348
|
column=column.id,
|
|
348
349
|
)
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
350
|
+
for to_column in to_columns:
|
|
351
|
+
column_lineage.append(
|
|
352
|
+
ColumnLineage(fromColumns=[from_column], toColumn=to_column)
|
|
353
|
+
)
|
|
354
|
+
return column_lineage
|
|
352
355
|
except Exception as exc:
|
|
353
356
|
logger.debug(f"Error to get column lineage: {exc}")
|
|
354
357
|
logger.debug(traceback.format_exc())
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"""
|
|
12
12
|
Bigquery source module
|
|
13
13
|
"""
|
|
14
|
+
import ast
|
|
14
15
|
import os
|
|
15
16
|
import traceback
|
|
16
17
|
from typing import Dict, Iterable, List, Optional, Tuple
|
|
@@ -412,7 +413,10 @@ class BigquerySource(
|
|
|
412
413
|
)
|
|
413
414
|
|
|
414
415
|
query_result = [result.schema_description for result in query_resp.result()]
|
|
415
|
-
|
|
416
|
+
|
|
417
|
+
return str(
|
|
418
|
+
ast.literal_eval(query_result[0])
|
|
419
|
+
) # To safely evaluate the string, unquote and interpret escaped characters
|
|
416
420
|
except IndexError:
|
|
417
421
|
logger.debug(f"No dataset description found for {schema_name}")
|
|
418
422
|
except Exception as err:
|
|
@@ -148,7 +148,7 @@ class ColumnTypeParser:
|
|
|
148
148
|
"MEDIUMBLOB": "MEDIUMBLOB",
|
|
149
149
|
"MEDIUMINT": "INT",
|
|
150
150
|
"MEDIUMTEXT": "MEDIUMTEXT",
|
|
151
|
-
"MONEY": "
|
|
151
|
+
"MONEY": "MONEY",
|
|
152
152
|
"NCHAR": "CHAR",
|
|
153
153
|
"NTEXT": "NTEXT",
|
|
154
154
|
"NULL": "NULL",
|
|
@@ -292,6 +292,8 @@ class ColumnTypeParser:
|
|
|
292
292
|
"CURR": "DECIMAL",
|
|
293
293
|
"STRG": "STRING",
|
|
294
294
|
"RSTR": "STRING",
|
|
295
|
+
# azuresql
|
|
296
|
+
"HIERARCHYID": "UNKNOWN",
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
_COMPLEX_TYPE = re.compile("^(struct|map|array|uniontype)")
|
|
@@ -347,7 +349,6 @@ class ColumnTypeParser:
|
|
|
347
349
|
arr_data_type = ColumnTypeParser._parse_primitive_datatype_string(
|
|
348
350
|
data_type[6:-1]
|
|
349
351
|
)["dataType"]
|
|
350
|
-
|
|
351
352
|
data_type_string = {
|
|
352
353
|
"dataType": "ARRAY",
|
|
353
354
|
"arrayDataType": arr_data_type,
|
|
@@ -61,7 +61,10 @@ from metadata.ingestion.connections.session import create_and_bind_thread_safe_s
|
|
|
61
61
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
62
62
|
from metadata.ingestion.models.ometa_lineage import OMetaLineageRequest
|
|
63
63
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
64
|
-
from metadata.ingestion.source.connections import
|
|
64
|
+
from metadata.ingestion.source.connections import (
|
|
65
|
+
get_connection,
|
|
66
|
+
kill_active_connections,
|
|
67
|
+
)
|
|
65
68
|
from metadata.ingestion.source.database.database_service import DatabaseServiceSource
|
|
66
69
|
from metadata.ingestion.source.database.sql_column_handler import SqlColumnHandlerMixin
|
|
67
70
|
from metadata.ingestion.source.database.sqlalchemy_source import SqlAlchemySource
|
|
@@ -142,6 +145,8 @@ class CommonDbSourceService(
|
|
|
142
145
|
to setup multiple inspectors. They can use this function.
|
|
143
146
|
:param database_name: new database to set
|
|
144
147
|
"""
|
|
148
|
+
|
|
149
|
+
kill_active_connections(self.engine)
|
|
145
150
|
logger.info(f"Ingesting from database: {database_name}")
|
|
146
151
|
|
|
147
152
|
new_service_connection = deepcopy(self.service_connection)
|
|
@@ -403,7 +408,7 @@ class CommonDbSourceService(
|
|
|
403
408
|
schema_definition = inspector.get_view_definition(
|
|
404
409
|
table_name, schema_name
|
|
405
410
|
)
|
|
406
|
-
elif hasattr(inspector, "get_table_ddl"):
|
|
411
|
+
elif hasattr(inspector, "get_table_ddl") and self.source_config.includeDDL:
|
|
407
412
|
schema_definition = inspector.get_table_ddl(
|
|
408
413
|
self.connection, table_name, schema_name
|
|
409
414
|
)
|
|
@@ -415,11 +420,11 @@ class CommonDbSourceService(
|
|
|
415
420
|
return schema_definition
|
|
416
421
|
|
|
417
422
|
except NotImplementedError:
|
|
418
|
-
logger.
|
|
423
|
+
logger.debug("Schema definition not implemented")
|
|
419
424
|
|
|
420
425
|
except Exception as exc:
|
|
421
426
|
logger.debug(traceback.format_exc())
|
|
422
|
-
logger.
|
|
427
|
+
logger.debug(f"Failed to fetch schema definition for {table_name}: {exc}")
|
|
423
428
|
return None
|
|
424
429
|
|
|
425
430
|
def is_partition( # pylint: disable=unused-argument
|
|
@@ -316,7 +316,7 @@ class DatabaseServiceSource(
|
|
|
316
316
|
"""
|
|
317
317
|
|
|
318
318
|
def yield_table_tag_details(
|
|
319
|
-
self, table_name_and_type: str
|
|
319
|
+
self, table_name_and_type: Tuple[str, TableType]
|
|
320
320
|
) -> Iterable[Either[OMetaTagAndClassification]]:
|
|
321
321
|
"""
|
|
322
322
|
From topology. To be run for each table
|
|
@@ -42,8 +42,8 @@ class DatabricksLineageSource(DatabricksQueryParserSource, LineageSource):
|
|
|
42
42
|
yield TableQuery(
|
|
43
43
|
query=row.get("query_text"),
|
|
44
44
|
userName=row.get("user_name"),
|
|
45
|
-
startTime=row.get("query_start_time_ms"),
|
|
46
|
-
endTime=row.get("execution_end_time_ms"),
|
|
45
|
+
startTime=str(row.get("query_start_time_ms")),
|
|
46
|
+
endTime=str(row.get("execution_end_time_ms")),
|
|
47
47
|
analysisDate=DateTime(datetime.now()),
|
|
48
48
|
serviceName=self.config.serviceName,
|
|
49
49
|
)
|
|
@@ -15,8 +15,10 @@ import traceback
|
|
|
15
15
|
from copy import deepcopy
|
|
16
16
|
from typing import Iterable, Optional, Tuple, Union
|
|
17
17
|
|
|
18
|
+
from pydantic import EmailStr
|
|
19
|
+
from pydantic_core import PydanticCustomError
|
|
18
20
|
from pyhive.sqlalchemy_hive import _type_map
|
|
19
|
-
from sqlalchemy import types, util
|
|
21
|
+
from sqlalchemy import exc, types, util
|
|
20
22
|
from sqlalchemy.engine import reflection
|
|
21
23
|
from sqlalchemy.engine.reflection import Inspector
|
|
22
24
|
from sqlalchemy.exc import DatabaseError
|
|
@@ -35,6 +37,7 @@ from metadata.generated.schema.entity.services.ingestionPipelines.status import
|
|
|
35
37
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
|
36
38
|
Source as WorkflowSource,
|
|
37
39
|
)
|
|
40
|
+
from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
|
|
38
41
|
from metadata.ingestion.api.models import Either
|
|
39
42
|
from metadata.ingestion.api.steps import InvalidSourceException
|
|
40
43
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
@@ -162,16 +165,19 @@ def get_columns(self, connection, table_name, schema=None, **kw):
|
|
|
162
165
|
}
|
|
163
166
|
if col_type in {"array", "struct", "map"}:
|
|
164
167
|
col_name = f"`{col_name}`" if "." in col_name else col_name
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
168
|
+
try:
|
|
169
|
+
rows = dict(
|
|
170
|
+
connection.execute(
|
|
171
|
+
f"DESCRIBE TABLE {kw.get('db_name')}.{schema}.{table_name} {col_name}"
|
|
172
|
+
).fetchall()
|
|
173
|
+
)
|
|
174
|
+
col_info["system_data_type"] = rows["data_type"]
|
|
175
|
+
col_info["is_complex"] = True
|
|
176
|
+
except DatabaseError as err:
|
|
177
|
+
logger.error(
|
|
178
|
+
f"Failed to fetch column details for column {col_name} in table {table_name} due to: {err}"
|
|
179
|
+
)
|
|
180
|
+
logger.debug(traceback.format_exc())
|
|
175
181
|
result.append(col_info)
|
|
176
182
|
return result
|
|
177
183
|
|
|
@@ -221,7 +227,9 @@ def get_table_comment( # pylint: disable=unused-argument
|
|
|
221
227
|
"""
|
|
222
228
|
cursor = connection.execute(
|
|
223
229
|
DATABRICKS_GET_TABLE_COMMENTS.format(
|
|
224
|
-
|
|
230
|
+
database_name=self.context.get().database,
|
|
231
|
+
schema_name=schema_name,
|
|
232
|
+
table_name=table_name,
|
|
225
233
|
)
|
|
226
234
|
)
|
|
227
235
|
try:
|
|
@@ -283,15 +291,46 @@ def get_table_names(
|
|
|
283
291
|
# if it is > 1, we use spark thrift server with 3 columns in the result (schema, table, is_temporary)
|
|
284
292
|
# else it is hive with 1 column in the result
|
|
285
293
|
if len(row) > 1:
|
|
286
|
-
|
|
294
|
+
table_name = row[1]
|
|
287
295
|
else:
|
|
288
|
-
|
|
296
|
+
table_name = row[0]
|
|
297
|
+
if schema:
|
|
298
|
+
database = kw.get("db_name")
|
|
299
|
+
table_type = get_table_type(connection, database, schema, table_name)
|
|
300
|
+
if not table_type or table_type == "FOREIGN":
|
|
301
|
+
# skip the table if it's foreign table / error in fetching table_type
|
|
302
|
+
logger.debug(
|
|
303
|
+
f"Skipping metadata ingestion for unsupported foreign table {table_name}"
|
|
304
|
+
)
|
|
305
|
+
continue
|
|
306
|
+
tables.append(table_name)
|
|
307
|
+
|
|
289
308
|
# "SHOW TABLES" command in hive also fetches view names
|
|
290
309
|
# Below code filters out view names from table names
|
|
291
310
|
views = self.get_view_names(connection, schema)
|
|
292
311
|
return [table for table in tables if table not in views]
|
|
293
312
|
|
|
294
313
|
|
|
314
|
+
def get_table_type(connection, database, schema, table):
|
|
315
|
+
"""get table type (regular/foreign)"""
|
|
316
|
+
try:
|
|
317
|
+
if database:
|
|
318
|
+
query = DATABRICKS_GET_TABLE_COMMENTS.format(
|
|
319
|
+
database_name=database, schema_name=schema, table_name=table
|
|
320
|
+
)
|
|
321
|
+
else:
|
|
322
|
+
query = f"DESCRIBE TABLE EXTENDED {schema}.{table}"
|
|
323
|
+
rows = connection.execute(query)
|
|
324
|
+
for row in rows:
|
|
325
|
+
row_dict = dict(row)
|
|
326
|
+
if row_dict.get("col_name") == "Type":
|
|
327
|
+
# get type of table
|
|
328
|
+
return row_dict.get("data_type")
|
|
329
|
+
except DatabaseError as err:
|
|
330
|
+
logger.error(f"Failed to fetch table type for table {table} due to: {err}")
|
|
331
|
+
return
|
|
332
|
+
|
|
333
|
+
|
|
295
334
|
DatabricksDialect.get_table_comment = get_table_comment
|
|
296
335
|
DatabricksDialect.get_view_names = get_view_names
|
|
297
336
|
DatabricksDialect.get_columns = get_columns
|
|
@@ -476,9 +515,11 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
|
|
|
476
515
|
)
|
|
477
516
|
if filter_by_database(
|
|
478
517
|
self.source_config.databaseFilterPattern,
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
518
|
+
(
|
|
519
|
+
database_fqn
|
|
520
|
+
if self.source_config.useFqnForFiltering
|
|
521
|
+
else new_catalog
|
|
522
|
+
),
|
|
482
523
|
):
|
|
483
524
|
self.status.filter(database_fqn, "Database Filtered Out")
|
|
484
525
|
continue
|
|
@@ -638,7 +679,9 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
|
|
|
638
679
|
try:
|
|
639
680
|
cursor = self.connection.execute(
|
|
640
681
|
DATABRICKS_GET_TABLE_COMMENTS.format(
|
|
641
|
-
|
|
682
|
+
database_name=self.context.get().database,
|
|
683
|
+
schema_name=schema_name,
|
|
684
|
+
table_name=table_name,
|
|
642
685
|
)
|
|
643
686
|
)
|
|
644
687
|
for result in list(cursor):
|
|
@@ -661,3 +704,42 @@ class DatabricksSource(ExternalTableLineageMixin, CommonDbSourceService, MultiDB
|
|
|
661
704
|
f"Table description error for table [{schema_name}.{table_name}]: {exc}"
|
|
662
705
|
)
|
|
663
706
|
return description
|
|
707
|
+
|
|
708
|
+
def _filter_owner_name(self, owner_name: str) -> str:
|
|
709
|
+
"""remove unnecessary keyword from name"""
|
|
710
|
+
pattern = r"\(Unknown\)"
|
|
711
|
+
filtered_name = re.sub(pattern, "", owner_name).strip()
|
|
712
|
+
return filtered_name
|
|
713
|
+
|
|
714
|
+
def get_owner_ref(self, table_name: str) -> Optional[EntityReferenceList]:
|
|
715
|
+
"""
|
|
716
|
+
Method to process the table owners
|
|
717
|
+
"""
|
|
718
|
+
try:
|
|
719
|
+
query = DATABRICKS_GET_TABLE_COMMENTS.format(
|
|
720
|
+
database_name=self.context.get().database,
|
|
721
|
+
schema_name=self.context.get().database_schema,
|
|
722
|
+
table_name=table_name,
|
|
723
|
+
)
|
|
724
|
+
result = self.connection.engine.execute(query)
|
|
725
|
+
owner = None
|
|
726
|
+
for row in result:
|
|
727
|
+
row_dict = dict(row)
|
|
728
|
+
if row_dict.get("col_name") == "Owner":
|
|
729
|
+
owner = row_dict.get("data_type")
|
|
730
|
+
break
|
|
731
|
+
if not owner:
|
|
732
|
+
return
|
|
733
|
+
|
|
734
|
+
owner = self._filter_owner_name(owner)
|
|
735
|
+
owner_ref = None
|
|
736
|
+
try:
|
|
737
|
+
owner_email = EmailStr._validate(owner)
|
|
738
|
+
owner_ref = self.metadata.get_reference_by_email(email=owner_email)
|
|
739
|
+
except PydanticCustomError:
|
|
740
|
+
owner_ref = self.metadata.get_reference_by_name(name=owner)
|
|
741
|
+
return owner_ref
|
|
742
|
+
except Exception as exc:
|
|
743
|
+
logger.debug(traceback.format_exc())
|
|
744
|
+
logger.warning(f"Error processing owner for table {table_name}: {exc}")
|
|
745
|
+
return
|
|
@@ -24,7 +24,9 @@ DATABRICKS_VIEW_DEFINITIONS = textwrap.dedent(
|
|
|
24
24
|
"""
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
-
DATABRICKS_GET_TABLE_COMMENTS =
|
|
27
|
+
DATABRICKS_GET_TABLE_COMMENTS = (
|
|
28
|
+
"DESCRIBE TABLE EXTENDED {database_name}.{schema_name}.{table_name}"
|
|
29
|
+
)
|
|
28
30
|
|
|
29
31
|
DATABRICKS_GET_CATALOGS = "SHOW CATALOGS"
|
|
30
32
|
|
|
@@ -47,8 +47,8 @@ class DatabricksUsageSource(DatabricksQueryParserSource, UsageSource):
|
|
|
47
47
|
TableQuery(
|
|
48
48
|
query=row.get("query_text"),
|
|
49
49
|
userName=row.get("user_name"),
|
|
50
|
-
startTime=row.get("query_start_time_ms"),
|
|
51
|
-
endTime=row.get("execution_end_time_ms"),
|
|
50
|
+
startTime=str(row.get("query_start_time_ms")),
|
|
51
|
+
endTime=str(row.get("execution_end_time_ms")),
|
|
52
52
|
analysisDate=DateTime(datetime.now()),
|
|
53
53
|
serviceName=self.config.serviceName,
|
|
54
54
|
duration=row.get("duration")
|
|
@@ -38,6 +38,10 @@ class DatalakeGcsClient(DatalakeBaseClient):
|
|
|
38
38
|
self._client = client
|
|
39
39
|
self._temp_credentials_file_path_list = temp_credentials_file_path_list
|
|
40
40
|
|
|
41
|
+
@property
|
|
42
|
+
def project(self):
|
|
43
|
+
return self._client.project
|
|
44
|
+
|
|
41
45
|
@staticmethod
|
|
42
46
|
def get_gcs_client(config: GCSConfig) -> storage.Client:
|
|
43
47
|
gcs_config = deepcopy(config)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# limitations under the License.
|
|
11
11
|
"""Db2 source module"""
|
|
12
12
|
import traceback
|
|
13
|
-
from typing import Optional
|
|
13
|
+
from typing import Iterable, Optional
|
|
14
14
|
|
|
15
15
|
from ibm_db_sa.base import ischema_names
|
|
16
16
|
from sqlalchemy.engine.reflection import Inspector
|
|
@@ -52,6 +52,13 @@ class Db2Source(CommonDbSourceService):
|
|
|
52
52
|
)
|
|
53
53
|
return cls(config, metadata)
|
|
54
54
|
|
|
55
|
+
def get_raw_database_schema_names(self) -> Iterable[str]:
|
|
56
|
+
if self.service_connection.__dict__.get("databaseSchema"):
|
|
57
|
+
yield self.service_connection.databaseSchema
|
|
58
|
+
else:
|
|
59
|
+
for schema_name in self.inspector.get_schema_names():
|
|
60
|
+
yield schema_name.rstrip()
|
|
61
|
+
|
|
55
62
|
@staticmethod
|
|
56
63
|
def get_table_description(
|
|
57
64
|
schema_name: str, table_name: str, inspector: Inspector
|
|
@@ -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
|
|
@@ -216,7 +215,7 @@ def _(config: DbtCloudConfig): # pylint: disable=too-many-locals
|
|
|
216
215
|
yield DbtFiles(
|
|
217
216
|
dbt_catalog=dbt_catalog,
|
|
218
217
|
dbt_manifest=dbt_manifest,
|
|
219
|
-
dbt_run_results=dbt_run_results,
|
|
218
|
+
dbt_run_results=[dbt_run_results] if dbt_run_results else None,
|
|
220
219
|
)
|
|
221
220
|
except DBTConfigException as exc:
|
|
222
221
|
raise exc
|
|
@@ -233,13 +232,12 @@ def get_blobs_grouped_by_dir(blobs: List[str]) -> Dict[str, List[str]]:
|
|
|
233
232
|
for blob in blobs:
|
|
234
233
|
subdirectory = blob.rsplit("/", 1)[0] if "/" in blob else ""
|
|
235
234
|
blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
)
|
|
242
|
-
None,
|
|
235
|
+
# We'll be processing multiple run_result files from a single dir
|
|
236
|
+
# Grouping them together to process them in a single go
|
|
237
|
+
if (
|
|
238
|
+
DBT_MANIFEST_FILE_NAME == blob_file_name.lower()
|
|
239
|
+
or DBT_CATALOG_FILE_NAME == blob_file_name.lower()
|
|
240
|
+
or DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower()
|
|
243
241
|
):
|
|
244
242
|
blob_grouped_by_directory[subdirectory].append(blob)
|
|
245
243
|
return blob_grouped_by_directory
|
|
@@ -257,7 +255,7 @@ def download_dbt_files(
|
|
|
257
255
|
) in blob_grouped_by_directory.items():
|
|
258
256
|
dbt_catalog = None
|
|
259
257
|
dbt_manifest = None
|
|
260
|
-
dbt_run_results =
|
|
258
|
+
dbt_run_results = []
|
|
261
259
|
kwargs = {}
|
|
262
260
|
if bucket_name:
|
|
263
261
|
kwargs = {"bucket_name": bucket_name}
|
|
@@ -265,10 +263,11 @@ def download_dbt_files(
|
|
|
265
263
|
for blob in blobs:
|
|
266
264
|
if blob:
|
|
267
265
|
reader = get_reader(config_source=config, client=client)
|
|
268
|
-
if
|
|
266
|
+
blob_file_name = blob.rsplit("/", 1)[1] if "/" in blob else blob
|
|
267
|
+
if DBT_MANIFEST_FILE_NAME == blob_file_name.lower():
|
|
269
268
|
logger.debug(f"{DBT_MANIFEST_FILE_NAME} found in {key}")
|
|
270
269
|
dbt_manifest = reader.read(path=blob, **kwargs)
|
|
271
|
-
if DBT_CATALOG_FILE_NAME
|
|
270
|
+
if DBT_CATALOG_FILE_NAME == blob_file_name.lower():
|
|
272
271
|
try:
|
|
273
272
|
logger.debug(f"{DBT_CATALOG_FILE_NAME} found in {key}")
|
|
274
273
|
dbt_catalog = reader.read(path=blob, **kwargs)
|
|
@@ -276,10 +275,12 @@ def download_dbt_files(
|
|
|
276
275
|
logger.warning(
|
|
277
276
|
f"{DBT_CATALOG_FILE_NAME} not found in {key}: {exc}"
|
|
278
277
|
)
|
|
279
|
-
if DBT_RUN_RESULTS_FILE_NAME in
|
|
278
|
+
if DBT_RUN_RESULTS_FILE_NAME in blob_file_name.lower():
|
|
280
279
|
try:
|
|
281
|
-
logger.debug(f"{
|
|
282
|
-
|
|
280
|
+
logger.debug(f"{blob_file_name} found in {key}")
|
|
281
|
+
dbt_run_result = reader.read(path=blob, **kwargs)
|
|
282
|
+
if dbt_run_result:
|
|
283
|
+
dbt_run_results.append(json.loads(dbt_run_result))
|
|
283
284
|
except Exception as exc:
|
|
284
285
|
logger.warning(
|
|
285
286
|
f"{DBT_RUN_RESULTS_FILE_NAME} not found in {key}: {exc}"
|
|
@@ -289,9 +290,7 @@ def download_dbt_files(
|
|
|
289
290
|
yield DbtFiles(
|
|
290
291
|
dbt_catalog=json.loads(dbt_catalog) if dbt_catalog else None,
|
|
291
292
|
dbt_manifest=json.loads(dbt_manifest),
|
|
292
|
-
dbt_run_results=
|
|
293
|
-
if dbt_run_results
|
|
294
|
-
else None,
|
|
293
|
+
dbt_run_results=dbt_run_results if dbt_run_results else None,
|
|
295
294
|
)
|
|
296
295
|
except DBTConfigException as exc:
|
|
297
296
|
logger.warning(exc)
|
|
@@ -184,9 +184,10 @@ class DbtServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
184
184
|
if self.context.get().dbt_file.dbt_catalog
|
|
185
185
|
else None,
|
|
186
186
|
dbt_manifest=parse_manifest(self.context.get().dbt_file.dbt_manifest),
|
|
187
|
-
dbt_run_results=
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
dbt_run_results=[
|
|
188
|
+
parse_run_results(run_result_file)
|
|
189
|
+
for run_result_file in self.context.get().dbt_file.dbt_run_results
|
|
190
|
+
]
|
|
190
191
|
if self.context.get().dbt_file.dbt_run_results
|
|
191
192
|
else None,
|
|
192
193
|
)
|