openmetadata-ingestion 1.6.3.2.dev1__py3-none-any.whl → 1.6.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- metadata/clients/domo_client.py +2 -2
- 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 +5 -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/addTagToAssetsRequest.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/createMetric.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 +6 -2
- metadata/generated/schema/api/domains/createDomain.py +6 -2
- 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/governance/__init__.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowDefinition.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowInstanceState.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/createTestCaseResult.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 +2 -4
- 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 +4 -1
- metadata/generated/schema/configuration/assetCertificationSettings.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/lineageSettings.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/searchSettings.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/configuration/workflowSettings.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 +5 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +5 -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 +5 -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 +5 -1
- metadata/generated/schema/entity/applications/appExtension.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +3 -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/addCustomProperties.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/removeCustomPropertiesAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +10 -2
- 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 +23 -3
- 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/collateAIAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.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/dataRetentionConfiguration.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/collateAIAppPrivateConfig.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 +5 -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 +5 -1
- metadata/generated/schema/entity/bot.py +5 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +5 -1
- metadata/generated/schema/entity/classification/tag.py +5 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +5 -1
- metadata/generated/schema/entity/data/apiEndpoint.py +5 -1
- metadata/generated/schema/entity/data/chart.py +5 -1
- metadata/generated/schema/entity/data/container.py +5 -1
- metadata/generated/schema/entity/data/dashboard.py +5 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +5 -1
- metadata/generated/schema/entity/data/database.py +5 -1
- metadata/generated/schema/entity/data/databaseSchema.py +5 -1
- metadata/generated/schema/entity/data/glossary.py +5 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +5 -1
- metadata/generated/schema/entity/data/metric.py +5 -1
- metadata/generated/schema/entity/data/mlmodel.py +5 -1
- metadata/generated/schema/entity/data/pipeline.py +5 -1
- metadata/generated/schema/entity/data/query.py +5 -1
- metadata/generated/schema/entity/data/report.py +5 -1
- metadata/generated/schema/entity/data/searchIndex.py +5 -1
- metadata/generated/schema/entity/data/storedProcedure.py +5 -1
- metadata/generated/schema/entity/data/table.py +6 -1
- metadata/generated/schema/entity/data/topic.py +5 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +5 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +11 -3
- metadata/generated/schema/entity/domains/domain.py +11 -3
- 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 +5 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +5 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.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/sigmaConnection.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/common/noConfigAuthenticationTypes.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 +9 -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/exasolConnection.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 +9 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.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/matillion/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +39 -0
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +4 -25
- metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +40 -0
- metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +38 -0
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +3 -2
- 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/pipeline/stitchConnection.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 +5 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +5 -1
- metadata/generated/schema/entity/services/databaseService.py +5 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +11 -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 +5 -1
- metadata/generated/schema/entity/services/metadataService.py +5 -1
- metadata/generated/schema/entity/services/mlmodelService.py +5 -1
- metadata/generated/schema/entity/services/pipelineService.py +5 -1
- metadata/generated/schema/entity/services/searchService.py +5 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +5 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +5 -1
- metadata/generated/schema/entity/teams/role.py +5 -1
- metadata/generated/schema/entity/teams/team.py +5 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +5 -1
- metadata/generated/schema/entity/type.py +5 -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/eventSubscriptionDiagnosticInfo.py +1 -1
- metadata/generated/schema/events/api/eventsRecord.py +1 -1
- metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
- metadata/generated/schema/events/api/typedEvent.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 +5 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/failedEventResponse.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/statusContext.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionStatus.py +1 -1
- metadata/generated/schema/events/testDestinationStatus.py +1 -1
- metadata/generated/schema/governance/workflows/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeSubType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/workflowDefinition.py +5 -1
- metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
- metadata/generated/schema/governance/workflows/workflowInstanceState.py +1 -1
- metadata/generated/schema/jobs/__init__.py +1 -1
- metadata/generated/schema/jobs/backgroundJob.py +1 -1
- metadata/generated/schema/jobs/enumCleanupArgs.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.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/databaseServiceAutoClassificationPipeline.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 +9 -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 +2 -2
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/limitsResponse.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +20 -20
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +5 -1
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +5 -1
- metadata/generated/schema/tests/testSuite.py +5 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/assetCertification.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +8 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -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/customProperties/tableConfig.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 +32 -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/lineage/masker.py +1 -1
- metadata/ingestion/lineage/models.py +1 -2
- metadata/ingestion/lineage/parser.py +2 -2
- metadata/ingestion/lineage/sql_lineage.py +111 -5
- metadata/ingestion/ometa/mixins/query_mixin.py +2 -0
- metadata/ingestion/ometa/routes.py +4 -0
- metadata/ingestion/source/api/rest/metadata.py +33 -24
- metadata/ingestion/source/dashboard/lightdash/client.py +2 -1
- metadata/ingestion/source/dashboard/looker/metadata.py +119 -15
- metadata/ingestion/source/dashboard/mode/client.py +2 -1
- metadata/ingestion/source/dashboard/powerbi/client.py +150 -35
- metadata/ingestion/source/dashboard/qlikcloud/client.py +1 -1
- metadata/ingestion/source/dashboard/superset/client.py +3 -2
- metadata/ingestion/source/database/bigquery/metadata.py +39 -0
- metadata/ingestion/source/database/databricks/connection.py +8 -3
- metadata/ingestion/source/database/databricks/lineage.py +12 -24
- metadata/ingestion/source/database/databricks/queries.py +24 -0
- metadata/ingestion/source/database/databricks/query_parser.py +11 -15
- metadata/ingestion/source/database/databricks/usage.py +7 -37
- metadata/ingestion/source/database/db2/connection.py +1 -1
- metadata/ingestion/source/database/db2/service_spec.py +1 -4
- metadata/ingestion/source/database/dbt/dbt_config.py +2 -1
- metadata/ingestion/source/database/dbt/metadata.py +3 -1
- metadata/ingestion/source/database/druid/service_spec.py +1 -5
- metadata/ingestion/source/database/greenplum/service_spec.py +1 -5
- metadata/ingestion/source/database/hive/service_spec.py +1 -5
- metadata/ingestion/source/database/impala/service_spec.py +1 -5
- metadata/ingestion/source/database/lineage_source.py +13 -1
- metadata/ingestion/source/database/mariadb/service_spec.py +1 -9
- metadata/ingestion/source/database/pinotdb/service_spec.py +1 -5
- metadata/ingestion/source/database/postgres/usage.py +15 -0
- metadata/ingestion/source/database/query_parser_source.py +1 -0
- metadata/ingestion/source/database/redshift/metadata.py +31 -11
- metadata/ingestion/source/database/redshift/queries.py +5 -0
- metadata/ingestion/source/database/sas/client.py +2 -1
- metadata/ingestion/source/database/singlestore/service_spec.py +1 -6
- metadata/ingestion/source/database/snowflake/connection.py +10 -2
- metadata/ingestion/source/database/snowflake/lineage.py +4 -0
- metadata/ingestion/source/database/snowflake/metadata.py +3 -0
- metadata/ingestion/source/database/snowflake/queries.py +8 -8
- metadata/ingestion/source/database/snowflake/query_parser.py +1 -0
- metadata/ingestion/source/database/sqlite/service_spec.py +1 -5
- metadata/ingestion/source/database/teradata/service_spec.py +1 -5
- metadata/ingestion/source/database/trino/connection.py +13 -0
- metadata/ingestion/source/database/unitycatalog/lineage.py +56 -32
- metadata/ingestion/source/database/unitycatalog/query_parser.py +7 -0
- metadata/ingestion/source/database/unitycatalog/service_spec.py +4 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +41 -2
- metadata/ingestion/source/database/usage_source.py +2 -1
- metadata/ingestion/source/metadata/atlas/client.py +2 -1
- metadata/ingestion/source/pipeline/nifi/connection.py +4 -2
- metadata/mixins/sqalchemy/sqa_mixin.py +19 -8
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +1 -1
- metadata/profiler/interface/sqlalchemy/unity_catalog/sampler_interface.py +29 -0
- metadata/profiler/metrics/window/first_quartile.py +1 -1
- metadata/profiler/metrics/window/median.py +1 -1
- metadata/profiler/metrics/window/third_quartile.py +1 -1
- metadata/profiler/source/fetcher/config.py +4 -0
- metadata/profiler/source/fetcher/fetcher_strategy.py +19 -2
- metadata/sampler/sampler_interface.py +0 -3
- metadata/sampler/sqlalchemy/bigquery/sampler.py +2 -3
- metadata/sampler/sqlalchemy/mssql/sampler.py +2 -2
- metadata/sampler/sqlalchemy/postgres/sampler.py +1 -1
- metadata/sampler/sqlalchemy/sampler.py +22 -9
- metadata/sampler/sqlalchemy/snowflake/sampler.py +2 -2
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/METADATA +391 -372
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/RECORD +715 -709
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.6.3.2.dev1.dist-info → openmetadata_ingestion-1.6.5.0.dist-info}/top_level.txt +0 -0
|
@@ -16,8 +16,10 @@ import traceback
|
|
|
16
16
|
from collections import defaultdict
|
|
17
17
|
from typing import Any, Iterable, List, Optional, Tuple, Union
|
|
18
18
|
|
|
19
|
+
import networkx as nx
|
|
19
20
|
from collate_sqllineage.core.models import Column, DataFunction
|
|
20
21
|
from collate_sqllineage.core.models import Table as LineageTable
|
|
22
|
+
from networkx import DiGraph
|
|
21
23
|
|
|
22
24
|
from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
|
|
23
25
|
from metadata.generated.schema.entity.data.storedProcedure import (
|
|
@@ -509,6 +511,7 @@ def _create_lineage_by_table_name(
|
|
|
509
511
|
column_lineage_map: dict,
|
|
510
512
|
lineage_source: LineageSource = LineageSource.QueryLineage,
|
|
511
513
|
procedure: Optional[EntityReference] = None,
|
|
514
|
+
graph: DiGraph = None,
|
|
512
515
|
) -> Iterable[Either[AddLineageRequest]]:
|
|
513
516
|
"""
|
|
514
517
|
This method is to create a lineage between two tables
|
|
@@ -539,6 +542,11 @@ def _create_lineage_by_table_name(
|
|
|
539
542
|
logger.debug(
|
|
540
543
|
f"WARNING: Table entity [{table_name}] not found in OpenMetadata"
|
|
541
544
|
)
|
|
545
|
+
if graph is not None and (not from_table_entities or not to_table_entities):
|
|
546
|
+
graph.add_node(from_table, entity=from_table_entities)
|
|
547
|
+
graph.add_node(to_table, entity=to_table_entities)
|
|
548
|
+
graph.add_edge(from_table, to_table, query=masked_query)
|
|
549
|
+
return
|
|
542
550
|
|
|
543
551
|
for from_entity, to_entity in itertools.product(
|
|
544
552
|
from_table_entities or [], to_table_entities or []
|
|
@@ -606,6 +614,7 @@ def get_lineage_by_query(
|
|
|
606
614
|
dialect: Dialect,
|
|
607
615
|
timeout_seconds: int = LINEAGE_PARSING_TIMEOUT,
|
|
608
616
|
lineage_source: LineageSource = LineageSource.QueryLineage,
|
|
617
|
+
graph: DiGraph = None,
|
|
609
618
|
) -> Iterable[Either[AddLineageRequest]]:
|
|
610
619
|
"""
|
|
611
620
|
This method parses the query to get source, target and intermediate table names to create lineage,
|
|
@@ -616,8 +625,8 @@ def get_lineage_by_query(
|
|
|
616
625
|
|
|
617
626
|
try:
|
|
618
627
|
lineage_parser = LineageParser(query, dialect, timeout_seconds=timeout_seconds)
|
|
619
|
-
masked_query = lineage_parser.masked_query
|
|
620
|
-
logger.debug(f"Running lineage with query: {masked_query}")
|
|
628
|
+
masked_query = lineage_parser.masked_query
|
|
629
|
+
logger.debug(f"Running lineage with query: {masked_query or query}")
|
|
621
630
|
|
|
622
631
|
raw_column_lineage = lineage_parser.column_lineage
|
|
623
632
|
column_lineage.update(populate_column_lineage_map(raw_column_lineage))
|
|
@@ -645,6 +654,7 @@ def get_lineage_by_query(
|
|
|
645
654
|
column_lineage_map=column_lineage,
|
|
646
655
|
lineage_source=lineage_source,
|
|
647
656
|
procedure=procedure,
|
|
657
|
+
graph=graph,
|
|
648
658
|
)
|
|
649
659
|
for target_table in lineage_parser.target_tables:
|
|
650
660
|
yield from _create_lineage_by_table_name(
|
|
@@ -682,11 +692,12 @@ def get_lineage_by_query(
|
|
|
682
692
|
column_lineage_map=column_lineage,
|
|
683
693
|
lineage_source=lineage_source,
|
|
684
694
|
procedure=procedure,
|
|
695
|
+
graph=graph,
|
|
685
696
|
)
|
|
686
697
|
if not lineage_parser.query_parsing_success:
|
|
687
698
|
query_parsing_failures.add(
|
|
688
699
|
QueryParsingError(
|
|
689
|
-
query=masked_query,
|
|
700
|
+
query=masked_query or query,
|
|
690
701
|
error=lineage_parser.query_parsing_failure_reason,
|
|
691
702
|
)
|
|
692
703
|
)
|
|
@@ -710,6 +721,7 @@ def get_lineage_via_table_entity(
|
|
|
710
721
|
dialect: Dialect,
|
|
711
722
|
timeout_seconds: int = LINEAGE_PARSING_TIMEOUT,
|
|
712
723
|
lineage_source: LineageSource = LineageSource.QueryLineage,
|
|
724
|
+
graph: DiGraph = None,
|
|
713
725
|
) -> Iterable[Either[AddLineageRequest]]:
|
|
714
726
|
"""Get lineage from table entity"""
|
|
715
727
|
column_lineage = {}
|
|
@@ -717,8 +729,10 @@ def get_lineage_via_table_entity(
|
|
|
717
729
|
|
|
718
730
|
try:
|
|
719
731
|
lineage_parser = LineageParser(query, dialect, timeout_seconds=timeout_seconds)
|
|
720
|
-
masked_query = lineage_parser.masked_query
|
|
721
|
-
logger.debug(
|
|
732
|
+
masked_query = lineage_parser.masked_query
|
|
733
|
+
logger.debug(
|
|
734
|
+
f"Getting lineage via table entity using query: {masked_query or query}"
|
|
735
|
+
)
|
|
722
736
|
to_table_name = table_entity.name.root
|
|
723
737
|
|
|
724
738
|
for from_table_name in lineage_parser.source_tables:
|
|
@@ -743,6 +757,7 @@ def get_lineage_via_table_entity(
|
|
|
743
757
|
column_lineage_map=column_lineage,
|
|
744
758
|
lineage_source=lineage_source,
|
|
745
759
|
procedure=procedure,
|
|
760
|
+
graph=graph,
|
|
746
761
|
) or []
|
|
747
762
|
if not lineage_parser.query_parsing_success:
|
|
748
763
|
query_parsing_failures.add(
|
|
@@ -759,3 +774,94 @@ def get_lineage_via_table_entity(
|
|
|
759
774
|
stackTrace=traceback.format_exc(),
|
|
760
775
|
)
|
|
761
776
|
)
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
def _process_sequence(
|
|
780
|
+
sequence: List[Any], graph: DiGraph
|
|
781
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
782
|
+
"""
|
|
783
|
+
Process a sequence of nodes to generate lineage information.
|
|
784
|
+
"""
|
|
785
|
+
from_node = None
|
|
786
|
+
queries = set()
|
|
787
|
+
clean_queries = False
|
|
788
|
+
previous_node = None
|
|
789
|
+
for node in sequence:
|
|
790
|
+
try:
|
|
791
|
+
if clean_queries:
|
|
792
|
+
queries.clear()
|
|
793
|
+
clean_queries = False
|
|
794
|
+
current_node = graph.nodes[node]
|
|
795
|
+
current_entity = current_node.get("entity")
|
|
796
|
+
|
|
797
|
+
if (
|
|
798
|
+
previous_node is not None
|
|
799
|
+
and graph.edges[(previous_node, node)].get("query") is not None
|
|
800
|
+
):
|
|
801
|
+
queries.add(graph.edges[(previous_node, node)].get("query"))
|
|
802
|
+
|
|
803
|
+
if current_entity and from_node is not None:
|
|
804
|
+
for from_entity, to_entity in itertools.product(
|
|
805
|
+
from_node.get("entity") or [], current_entity or []
|
|
806
|
+
):
|
|
807
|
+
if to_entity and from_entity:
|
|
808
|
+
yield _build_table_lineage(
|
|
809
|
+
to_entity=to_entity,
|
|
810
|
+
from_entity=from_entity,
|
|
811
|
+
to_table_raw_name=str(node),
|
|
812
|
+
from_table_raw_name=str(from_node),
|
|
813
|
+
masked_query="\n--------\n".join(queries),
|
|
814
|
+
column_lineage_map={},
|
|
815
|
+
lineage_source=LineageSource.QueryLineage,
|
|
816
|
+
procedure=None,
|
|
817
|
+
)
|
|
818
|
+
clean_queries = True
|
|
819
|
+
|
|
820
|
+
if current_entity:
|
|
821
|
+
from_node = graph.nodes[node]
|
|
822
|
+
previous_node = node
|
|
823
|
+
except Exception as exc:
|
|
824
|
+
logger.debug(traceback.format_exc())
|
|
825
|
+
logger.error(f"Error creating lineage for node [{node}]: {exc}")
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
def get_lineage_by_graph(
|
|
829
|
+
graph: DiGraph,
|
|
830
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
831
|
+
"""
|
|
832
|
+
Generate lineage information from a directed graph.
|
|
833
|
+
This method processes a directed graph to extract lineage information by identifying
|
|
834
|
+
weakly connected components and traversing each component to generate sequences of nodes.
|
|
835
|
+
It then yields lineage information for each sequence.
|
|
836
|
+
Args:
|
|
837
|
+
graph (DiGraph): A directed graph representing the lineage.
|
|
838
|
+
Raises:
|
|
839
|
+
Exception: If an error occurs during the lineage creation process, it logs the error.
|
|
840
|
+
"""
|
|
841
|
+
if graph is None:
|
|
842
|
+
return
|
|
843
|
+
|
|
844
|
+
# Get all weakly connected components
|
|
845
|
+
components = list(nx.weakly_connected_components(graph))
|
|
846
|
+
|
|
847
|
+
# Extract each component as an independent subgraph
|
|
848
|
+
independent_subtrees = [
|
|
849
|
+
graph.subgraph(component).copy() for component in components
|
|
850
|
+
]
|
|
851
|
+
|
|
852
|
+
# Print results in the desired format
|
|
853
|
+
for subtree in independent_subtrees:
|
|
854
|
+
# Find a root node (node with no incoming edges)
|
|
855
|
+
root = [node for node in subtree if subtree.in_degree(node) == 0][0]
|
|
856
|
+
|
|
857
|
+
# Traverse from the root to get the sequence of nodes
|
|
858
|
+
current = root
|
|
859
|
+
sequence = [current]
|
|
860
|
+
while True:
|
|
861
|
+
successors = list(subtree.successors(current))
|
|
862
|
+
if not successors:
|
|
863
|
+
break
|
|
864
|
+
current = successors[0]
|
|
865
|
+
sequence.append(current)
|
|
866
|
+
|
|
867
|
+
yield from _process_sequence(sequence, subtree)
|
|
@@ -42,6 +42,8 @@ class OMetaQueryMixin:
|
|
|
42
42
|
return str(result.hexdigest())
|
|
43
43
|
|
|
44
44
|
def _get_or_create_query(self, query: CreateQueryRequest) -> Optional[Query]:
|
|
45
|
+
if query.query.root is None:
|
|
46
|
+
return None
|
|
45
47
|
query_hash = self._get_query_hash(query=query.query.root)
|
|
46
48
|
query_entity = self.get_by_name(entity=Query, fqn=query_hash)
|
|
47
49
|
if query_entity is None:
|
|
@@ -92,6 +92,7 @@ from metadata.generated.schema.api.services.createStorageService import (
|
|
|
92
92
|
from metadata.generated.schema.api.services.ingestionPipelines.createIngestionPipeline import (
|
|
93
93
|
CreateIngestionPipelineRequest,
|
|
94
94
|
)
|
|
95
|
+
from metadata.generated.schema.api.teams.createPersona import CreatePersonaRequest
|
|
95
96
|
from metadata.generated.schema.api.teams.createRole import CreateRoleRequest
|
|
96
97
|
from metadata.generated.schema.api.teams.createTeam import CreateTeamRequest
|
|
97
98
|
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
|
|
@@ -157,6 +158,7 @@ from metadata.generated.schema.entity.services.mlmodelService import MlModelServ
|
|
|
157
158
|
from metadata.generated.schema.entity.services.pipelineService import PipelineService
|
|
158
159
|
from metadata.generated.schema.entity.services.searchService import SearchService
|
|
159
160
|
from metadata.generated.schema.entity.services.storageService import StorageService
|
|
161
|
+
from metadata.generated.schema.entity.teams.persona import Persona
|
|
160
162
|
from metadata.generated.schema.entity.teams.role import Role
|
|
161
163
|
from metadata.generated.schema.entity.teams.team import Team
|
|
162
164
|
from metadata.generated.schema.entity.teams.user import AuthenticationMechanism, User
|
|
@@ -217,6 +219,8 @@ ROUTES = {
|
|
|
217
219
|
CreateTeamRequest.__name__: "/teams",
|
|
218
220
|
User.__name__: "/users",
|
|
219
221
|
CreateUserRequest.__name__: "/users",
|
|
222
|
+
Persona.__name__: "/personas",
|
|
223
|
+
CreatePersonaRequest.__name__: "/personas",
|
|
220
224
|
AuthenticationMechanism.__name__: "/users/auth-mechanism",
|
|
221
225
|
Bot.__name__: "/bots",
|
|
222
226
|
CreateBot.__name__: "/bots",
|
|
@@ -171,7 +171,7 @@ class RestSource(ApiServiceSource):
|
|
|
171
171
|
break
|
|
172
172
|
return filtered_paths
|
|
173
173
|
except Exception as err:
|
|
174
|
-
logger.
|
|
174
|
+
logger.warning(
|
|
175
175
|
f"Error while filtering endpoints for collection {collection.name.root}"
|
|
176
176
|
)
|
|
177
177
|
return None
|
|
@@ -184,7 +184,7 @@ class RestSource(ApiServiceSource):
|
|
|
184
184
|
endpoint.name = f"{path} - {method_type}"
|
|
185
185
|
return endpoint
|
|
186
186
|
except Exception as err:
|
|
187
|
-
logger.
|
|
187
|
+
logger.warning(f"Error while parsing endpoint data: {err}")
|
|
188
188
|
return None
|
|
189
189
|
|
|
190
190
|
def _generate_collection_url(self, collection_name: str) -> Optional[AnyUrl]:
|
|
@@ -195,7 +195,7 @@ class RestSource(ApiServiceSource):
|
|
|
195
195
|
f"{self.config.serviceConnection.root.config.openAPISchemaURL}#tag/{collection_name}"
|
|
196
196
|
)
|
|
197
197
|
except Exception as err:
|
|
198
|
-
logger.
|
|
198
|
+
logger.warning(f"Error while generating collection url: {err}")
|
|
199
199
|
return None
|
|
200
200
|
|
|
201
201
|
def _generate_endpoint_url(self, endpoint_name: str) -> AnyUrl:
|
|
@@ -203,15 +203,14 @@ class RestSource(ApiServiceSource):
|
|
|
203
203
|
base_url = self.config.serviceConnection.root.config.openAPISchemaURL
|
|
204
204
|
if endpoint_name:
|
|
205
205
|
return AnyUrl(f"{base_url}#operation/{endpoint_name}")
|
|
206
|
-
|
|
207
|
-
return AnyUrl(base_url)
|
|
206
|
+
return AnyUrl(base_url)
|
|
208
207
|
|
|
209
208
|
def _get_api_request_method(self, method_type: str) -> Optional[str]:
|
|
210
209
|
"""fetch endpoint request method"""
|
|
211
210
|
try:
|
|
212
211
|
return ApiRequestMethod[method_type.upper()]
|
|
213
212
|
except KeyError as err:
|
|
214
|
-
logger.
|
|
213
|
+
logger.warning(f"Keyerror while fetching request method: {err}")
|
|
215
214
|
return None
|
|
216
215
|
|
|
217
216
|
def _get_request_schema(self, info: dict) -> Optional[APISchema]:
|
|
@@ -227,9 +226,9 @@ class RestSource(ApiServiceSource):
|
|
|
227
226
|
if not schema_ref:
|
|
228
227
|
logger.debug("No request schema found for the endpoint")
|
|
229
228
|
return None
|
|
230
|
-
return self.
|
|
229
|
+
return APISchema(schemaFields=self.process_schema_fields(schema_ref))
|
|
231
230
|
except Exception as err:
|
|
232
|
-
logger.
|
|
231
|
+
logger.warning(f"Error while parsing request schema: {err}")
|
|
233
232
|
return None
|
|
234
233
|
|
|
235
234
|
def _get_response_schema(self, info: dict) -> Optional[APISchema]:
|
|
@@ -246,33 +245,43 @@ class RestSource(ApiServiceSource):
|
|
|
246
245
|
if not schema_ref:
|
|
247
246
|
logger.debug("No response schema found for the endpoint")
|
|
248
247
|
return None
|
|
249
|
-
return self.
|
|
248
|
+
return APISchema(schemaFields=self.process_schema_fields(schema_ref))
|
|
250
249
|
except Exception as err:
|
|
251
|
-
logger.
|
|
250
|
+
logger.warning(f"Error while parsing response schema: {err}")
|
|
252
251
|
return None
|
|
253
252
|
|
|
254
|
-
def
|
|
255
|
-
"""process schema"""
|
|
253
|
+
def process_schema_fields(self, schema_ref: str) -> Optional[List[FieldModel]]:
|
|
256
254
|
try:
|
|
257
|
-
|
|
255
|
+
schema_name = schema_ref.split("/")[-1]
|
|
258
256
|
schema_fields = (
|
|
259
|
-
self.json_response.get("components").get("schemas").get(
|
|
257
|
+
self.json_response.get("components").get("schemas").get(schema_name)
|
|
260
258
|
)
|
|
261
259
|
|
|
262
260
|
fetched_fields = []
|
|
263
261
|
for key, val in schema_fields.get("properties", {}).items():
|
|
264
262
|
dtype = val.get("type")
|
|
265
|
-
if
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
FieldModel(
|
|
269
|
-
name=key,
|
|
270
|
-
dataType=DataTypeTopic[dtype.upper()]
|
|
263
|
+
if dtype:
|
|
264
|
+
parsed_dtype = (
|
|
265
|
+
DataTypeTopic[dtype.upper()]
|
|
271
266
|
if dtype.upper() in DataTypeTopic.__members__
|
|
272
|
-
else DataTypeTopic.UNKNOWN
|
|
267
|
+
else DataTypeTopic.UNKNOWN
|
|
273
268
|
)
|
|
274
|
-
|
|
275
|
-
|
|
269
|
+
fetched_fields.append(FieldModel(name=key, dataType=parsed_dtype))
|
|
270
|
+
else:
|
|
271
|
+
# If type of field is not defined then check for sub-schema
|
|
272
|
+
# Check if it's `object` type field
|
|
273
|
+
# check infinite recrusrion by comparing with parent(schema_ref)
|
|
274
|
+
object_children = None
|
|
275
|
+
if val.get("$ref") and val.get("$ref") != schema_ref:
|
|
276
|
+
object_children = self.process_schema_fields(val.get("$ref"))
|
|
277
|
+
fetched_fields.append(
|
|
278
|
+
FieldModel(
|
|
279
|
+
name=key,
|
|
280
|
+
dataType=DataTypeTopic.UNKNOWN,
|
|
281
|
+
children=object_children,
|
|
282
|
+
)
|
|
283
|
+
)
|
|
284
|
+
return fetched_fields
|
|
276
285
|
except Exception as err:
|
|
277
|
-
logger.
|
|
286
|
+
logger.warning(f"Error while processing schema fields: {err}")
|
|
278
287
|
return None
|
|
@@ -19,6 +19,7 @@ from metadata.ingestion.source.dashboard.lightdash.models import (
|
|
|
19
19
|
LightdashChart,
|
|
20
20
|
LightdashDashboard,
|
|
21
21
|
)
|
|
22
|
+
from metadata.utils.helpers import clean_uri
|
|
22
23
|
from metadata.utils.logger import utils_logger
|
|
23
24
|
|
|
24
25
|
logger = utils_logger()
|
|
@@ -34,7 +35,7 @@ class LightdashApiClient:
|
|
|
34
35
|
def __init__(self, config):
|
|
35
36
|
self.config = config
|
|
36
37
|
client_config = ClientConfig(
|
|
37
|
-
base_url=
|
|
38
|
+
base_url=clean_uri(self.config.hostPort),
|
|
38
39
|
api_version="",
|
|
39
40
|
access_token=self.config.apiKey.get_secret_value(),
|
|
40
41
|
auth_header="Authorization",
|
|
@@ -21,6 +21,7 @@ Notes:
|
|
|
21
21
|
"""
|
|
22
22
|
import copy
|
|
23
23
|
import os
|
|
24
|
+
import re
|
|
24
25
|
import traceback
|
|
25
26
|
from datetime import datetime
|
|
26
27
|
from pathlib import Path
|
|
@@ -39,6 +40,7 @@ from typing import (
|
|
|
39
40
|
|
|
40
41
|
import giturlparse
|
|
41
42
|
import lkml
|
|
43
|
+
import networkx as nx
|
|
42
44
|
from liquid import Template
|
|
43
45
|
from looker_sdk.sdk.api40.methods import Looker40SDK
|
|
44
46
|
from looker_sdk.sdk.api40.models import Dashboard as LookerDashboard
|
|
@@ -134,6 +136,10 @@ logger = ingestion_logger()
|
|
|
134
136
|
LIST_DASHBOARD_FIELDS = ["id", "title"]
|
|
135
137
|
IMPORTED_PROJECTS_DIR = "imported_projects"
|
|
136
138
|
|
|
139
|
+
# we need to find the derived references in the SQL query using regex
|
|
140
|
+
# https://cloud.google.com/looker/docs/derived-tables#referencing_derived_tables_in_other_derived_tables
|
|
141
|
+
DERIVED_REFERENCES = r"\${([\w\s\d_.]+)\.SQL_TABLE_NAME}"
|
|
142
|
+
|
|
137
143
|
# Here we can update the fields to get further information, such as:
|
|
138
144
|
# created_at, updated_at, last_updater_id, deleted_at, deleter_id, favorite_count, last_viewed_at
|
|
139
145
|
GET_DASHBOARD_FIELDS = [
|
|
@@ -165,6 +171,13 @@ def build_datamodel_name(model_name: str, explore_name: str) -> str:
|
|
|
165
171
|
return clean_dashboard_name(model_name + "_" + explore_name)
|
|
166
172
|
|
|
167
173
|
|
|
174
|
+
def find_derived_references(sql_query: str) -> List[str]:
|
|
175
|
+
if sql_query is None:
|
|
176
|
+
return []
|
|
177
|
+
matches = re.findall(DERIVED_REFERENCES, sql_query)
|
|
178
|
+
return matches
|
|
179
|
+
|
|
180
|
+
|
|
168
181
|
class LookerSource(DashboardServiceSource):
|
|
169
182
|
"""
|
|
170
183
|
Looker Source Class.
|
|
@@ -172,6 +185,8 @@ class LookerSource(DashboardServiceSource):
|
|
|
172
185
|
Its client uses Looker 40 from the SDK: client = looker_sdk.init40()
|
|
173
186
|
"""
|
|
174
187
|
|
|
188
|
+
# pylint: disable=too-many-instance-attributes
|
|
189
|
+
|
|
175
190
|
config: WorkflowSource
|
|
176
191
|
metadata: OpenMetadata
|
|
177
192
|
client: Looker40SDK
|
|
@@ -192,6 +207,10 @@ class LookerSource(DashboardServiceSource):
|
|
|
192
207
|
self._main__lookml_manifest: Optional[LookMLManifest] = None
|
|
193
208
|
self._view_data_model: Optional[DashboardDataModel] = None
|
|
194
209
|
|
|
210
|
+
self._parsed_views: Optional[Dict[str, str]] = {}
|
|
211
|
+
self._unparsed_views: Optional[Dict[str, str]] = {}
|
|
212
|
+
self._derived_dependencies = nx.DiGraph()
|
|
213
|
+
|
|
195
214
|
self._added_lineage: Optional[Dict] = {}
|
|
196
215
|
|
|
197
216
|
@classmethod
|
|
@@ -557,6 +576,68 @@ class LookerSource(DashboardServiceSource):
|
|
|
557
576
|
)
|
|
558
577
|
)
|
|
559
578
|
|
|
579
|
+
def replace_derived_references(self, sql_query):
|
|
580
|
+
"""
|
|
581
|
+
Replace all derived references with the parsed views sql query
|
|
582
|
+
will replace the derived references in the SQL query using regex
|
|
583
|
+
for e.g. It will replace ${view_name.SQL_TABLE_NAME} with the parsed view query for view_name
|
|
584
|
+
https://cloud.google.com/looker/docs/derived-tables#referencing_derived_tables_in_other_derived_tables
|
|
585
|
+
"""
|
|
586
|
+
try:
|
|
587
|
+
sql_query = re.sub(
|
|
588
|
+
DERIVED_REFERENCES,
|
|
589
|
+
# from `${view_name.SQL_TABLE_NAME}` we want the `view_name`.
|
|
590
|
+
# match.group(1) will give us the `view_name`
|
|
591
|
+
lambda match: f"({self._parsed_views.get(match.group(1), match.group(0))})",
|
|
592
|
+
sql_query,
|
|
593
|
+
)
|
|
594
|
+
except Exception as e:
|
|
595
|
+
logger.warning(
|
|
596
|
+
f"Something went wrong while replacing derived view references: {e}"
|
|
597
|
+
)
|
|
598
|
+
return sql_query
|
|
599
|
+
|
|
600
|
+
def build_lineage_for_unparsed_views(self) -> Iterable[Either[AddLineageRequest]]:
|
|
601
|
+
"""
|
|
602
|
+
build lineage by parsing the unparsed views containing derived references
|
|
603
|
+
"""
|
|
604
|
+
try:
|
|
605
|
+
# Doing a reversed topological sort to process the views in the right order
|
|
606
|
+
for view_name in reversed(
|
|
607
|
+
list(nx.topological_sort(self._derived_dependencies))
|
|
608
|
+
):
|
|
609
|
+
if view_name in self._parsed_views:
|
|
610
|
+
# Skip if already processed
|
|
611
|
+
continue
|
|
612
|
+
sql_query = self.replace_derived_references(
|
|
613
|
+
self._unparsed_views[view_name]
|
|
614
|
+
)
|
|
615
|
+
if view_references := find_derived_references(sql_query):
|
|
616
|
+
# There are still derived references in the view query
|
|
617
|
+
logger.debug(
|
|
618
|
+
f"Views {view_references} not found for {view_name}. Skipping."
|
|
619
|
+
)
|
|
620
|
+
continue
|
|
621
|
+
self._parsed_views[view_name] = sql_query
|
|
622
|
+
del self._unparsed_views[view_name]
|
|
623
|
+
yield from self._build_lineage_for_view(view_name, sql_query)
|
|
624
|
+
|
|
625
|
+
except Exception as err:
|
|
626
|
+
yield Either(
|
|
627
|
+
left=StackTraceError(
|
|
628
|
+
name="parse_unparsed_views",
|
|
629
|
+
error=f"Error parsing unparsed views: {err}",
|
|
630
|
+
stackTrace=traceback.format_exc(),
|
|
631
|
+
)
|
|
632
|
+
)
|
|
633
|
+
|
|
634
|
+
def _add_dependency_edge(self, view_name: str, view_references: List[str]):
|
|
635
|
+
"""
|
|
636
|
+
Add a dependency edge between the view and the derived reference
|
|
637
|
+
"""
|
|
638
|
+
for dependent_view_name in view_references:
|
|
639
|
+
self._derived_dependencies.add_edge(view_name, dependent_view_name)
|
|
640
|
+
|
|
560
641
|
def add_view_lineage(
|
|
561
642
|
self, view: LookMlView, explore: LookmlModelExplore
|
|
562
643
|
) -> Iterable[Either[AddLineageRequest]]:
|
|
@@ -589,6 +670,7 @@ class LookerSource(DashboardServiceSource):
|
|
|
589
670
|
for db_service_name in db_service_names or []:
|
|
590
671
|
dialect = self._get_db_dialect(db_service_name)
|
|
591
672
|
source_table_name = self._clean_table_name(sql_table_name, dialect)
|
|
673
|
+
self._parsed_views[view.name] = source_table_name
|
|
592
674
|
|
|
593
675
|
# View to the source is only there if we are informing the dbServiceNames
|
|
594
676
|
yield self.build_lineage_request(
|
|
@@ -601,20 +683,19 @@ class LookerSource(DashboardServiceSource):
|
|
|
601
683
|
sql_query = view.derived_table.sql
|
|
602
684
|
if not sql_query:
|
|
603
685
|
return
|
|
686
|
+
if find_derived_references(sql_query):
|
|
687
|
+
sql_query = self.replace_derived_references(sql_query)
|
|
688
|
+
# If we still have derived references, we cannot process the view
|
|
689
|
+
if view_references := find_derived_references(sql_query):
|
|
690
|
+
self._add_dependency_edge(view.name, view_references)
|
|
691
|
+
logger.warning(
|
|
692
|
+
f"Not all references are replaced for view [{view.name}]. Parsing it later."
|
|
693
|
+
)
|
|
694
|
+
return
|
|
604
695
|
logger.debug(f"Processing view [{view.name}] with SQL: \n[{sql_query}]")
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
self._get_db_dialect(db_service_name),
|
|
609
|
-
timeout_seconds=30,
|
|
610
|
-
)
|
|
611
|
-
if lineage_parser.source_tables:
|
|
612
|
-
for from_table_name in lineage_parser.source_tables:
|
|
613
|
-
yield self.build_lineage_request(
|
|
614
|
-
source=str(from_table_name),
|
|
615
|
-
db_service_name=db_service_name,
|
|
616
|
-
to_entity=self._view_data_model,
|
|
617
|
-
)
|
|
696
|
+
yield from self._build_lineage_for_view(view.name, sql_query)
|
|
697
|
+
if self._unparsed_views:
|
|
698
|
+
self.build_lineage_for_unparsed_views()
|
|
618
699
|
|
|
619
700
|
except Exception as err:
|
|
620
701
|
yield Either(
|
|
@@ -625,6 +706,27 @@ class LookerSource(DashboardServiceSource):
|
|
|
625
706
|
)
|
|
626
707
|
)
|
|
627
708
|
|
|
709
|
+
def _build_lineage_for_view(
|
|
710
|
+
self, view_name: str, sql_query: str
|
|
711
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
712
|
+
"""
|
|
713
|
+
Parse the SQL query and build lineage for the view.
|
|
714
|
+
"""
|
|
715
|
+
for db_service_name in self.get_db_service_names() or []:
|
|
716
|
+
lineage_parser = LineageParser(
|
|
717
|
+
sql_query,
|
|
718
|
+
self._get_db_dialect(db_service_name),
|
|
719
|
+
timeout_seconds=30,
|
|
720
|
+
)
|
|
721
|
+
if lineage_parser.source_tables:
|
|
722
|
+
self._parsed_views[view_name] = sql_query
|
|
723
|
+
for from_table_name in lineage_parser.source_tables:
|
|
724
|
+
yield self.build_lineage_request(
|
|
725
|
+
source=str(from_table_name),
|
|
726
|
+
db_service_name=db_service_name,
|
|
727
|
+
to_entity=self._view_data_model,
|
|
728
|
+
)
|
|
729
|
+
|
|
628
730
|
def _get_db_dialect(self, db_service_name) -> Dialect:
|
|
629
731
|
db_service = self.metadata.get_by_name(DatabaseService, db_service_name)
|
|
630
732
|
return ConnectionTypeDialectMapper.dialect_of(
|
|
@@ -678,8 +780,10 @@ class LookerSource(DashboardServiceSource):
|
|
|
678
780
|
try:
|
|
679
781
|
if dashboard_details.user_id is not None:
|
|
680
782
|
dashboard_owner = self.client.user(dashboard_details.user_id)
|
|
681
|
-
|
|
682
|
-
|
|
783
|
+
if dashboard_owner.email:
|
|
784
|
+
return self.metadata.get_reference_by_email(
|
|
785
|
+
dashboard_owner.email.lower()
|
|
786
|
+
)
|
|
683
787
|
except Exception as err:
|
|
684
788
|
logger.debug(traceback.format_exc())
|
|
685
789
|
logger.warning(f"Could not fetch owner data due to {err}")
|
|
@@ -18,6 +18,7 @@ from typing import Optional
|
|
|
18
18
|
from requests._internal_utils import to_native_string
|
|
19
19
|
|
|
20
20
|
from metadata.ingestion.ometa.client import REST, ClientConfig
|
|
21
|
+
from metadata.utils.helpers import clean_uri
|
|
21
22
|
from metadata.utils.logger import utils_logger
|
|
22
23
|
|
|
23
24
|
logger = utils_logger()
|
|
@@ -50,7 +51,7 @@ class ModeApiClient:
|
|
|
50
51
|
def __init__(self, config):
|
|
51
52
|
self.config = config
|
|
52
53
|
client_config = ClientConfig(
|
|
53
|
-
base_url=
|
|
54
|
+
base_url=clean_uri(config.hostPort),
|
|
54
55
|
api_version="api",
|
|
55
56
|
auth_header="Authorization",
|
|
56
57
|
auth_token_mode="Basic",
|