openmetadata-ingestion 1.4.0.0rc1__py3-none-any.whl → 1.4.0.0rc3__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/__version__.py +13 -0
- metadata/cli/app.py +0 -1
- metadata/cmd.py +0 -193
- metadata/data_quality/source/test_suite.py +8 -2
- metadata/examples/workflows/kafka_connect.yaml +30 -0
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/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 +4 -3
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +2 -2
- 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 +2 -2
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +2 -2
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +1 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +3 -3
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +1 -1
- metadata/generated/schema/entity/data/table.py +6 -5
- 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 +15 -5
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +5 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +4 -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 +4 -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 +2 -2
- 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 +4 -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 +4 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +4 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +7 -3
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +5 -2
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +1 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +2 -2
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +19 -19
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +2 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +2 -2
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +7 -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 +9 -10
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +1 -1
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +1 -1
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/ingestion/models/custom_properties.py +2 -0
- metadata/ingestion/models/patch_request.py +1 -1
- metadata/ingestion/ometa/mixins/patch_mixin.py +4 -2
- metadata/ingestion/ometa/mixins/server_mixin.py +9 -12
- metadata/ingestion/ometa/mixins/user_mixin.py +16 -4
- metadata/ingestion/processor/query_parser.py +29 -25
- metadata/ingestion/source/dashboard/powerbi/metadata.py +27 -2
- metadata/ingestion/source/database/athena/client.py +1 -1
- metadata/ingestion/source/database/athena/lineage.py +2 -0
- metadata/ingestion/source/database/athena/models.py +1 -1
- metadata/ingestion/source/database/athena/query_parser.py +2 -0
- metadata/ingestion/source/database/athena/usage.py +2 -0
- metadata/ingestion/source/database/bigquery/metadata.py +28 -9
- metadata/ingestion/source/database/clickhouse/metadata.py +24 -16
- metadata/ingestion/source/database/common_db_source.py +25 -19
- metadata/ingestion/source/database/database_service.py +3 -1
- metadata/ingestion/source/database/databricks/metadata.py +12 -18
- metadata/ingestion/source/database/databricks/queries.py +1 -4
- metadata/ingestion/source/database/dbt/metadata.py +8 -14
- metadata/ingestion/source/database/deltalake/connection.py +2 -2
- metadata/ingestion/source/database/deltalake/metadata.py +1 -1
- metadata/ingestion/source/database/hive/metadata.py +23 -0
- metadata/ingestion/source/database/mssql/metadata.py +6 -0
- metadata/ingestion/source/database/mysql/metadata.py +5 -0
- metadata/ingestion/source/database/oracle/metadata.py +26 -12
- metadata/ingestion/source/database/postgres/metadata.py +4 -0
- metadata/ingestion/source/database/redshift/metadata.py +8 -1
- metadata/ingestion/source/database/sample_data.py +1 -3
- metadata/ingestion/source/database/snowflake/metadata.py +4 -1
- metadata/ingestion/source/database/snowflake/queries.py +4 -0
- metadata/ingestion/source/database/snowflake/utils.py +20 -0
- metadata/ingestion/source/database/sqlalchemy_source.py +2 -2
- metadata/ingestion/source/database/trino/connection.py +13 -0
- metadata/ingestion/source/messaging/common_broker_source.py +42 -3
- metadata/ingestion/source/pipeline/dagster/queries.py +53 -82
- metadata/ingestion/source/pipeline/kafkaconnect/__init__.py +0 -0
- metadata/ingestion/source/pipeline/kafkaconnect/client.py +278 -0
- metadata/ingestion/source/pipeline/kafkaconnect/connection.py +58 -0
- metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +319 -0
- metadata/ingestion/source/pipeline/kafkaconnect/models.py +62 -0
- metadata/ingestion/source/storage/s3/connection.py +10 -1
- metadata/ingestion/source/storage/s3/metadata.py +12 -23
- metadata/ingestion/source/storage/s3/models.py +4 -4
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +1 -3
- metadata/profiler/processor/metric_filter.py +3 -1
- metadata/utils/elasticsearch.py +8 -0
- metadata/utils/messaging_utils.py +43 -0
- metadata/utils/sqlalchemy_utils.py +45 -1
- metadata/utils/tag_utils.py +2 -2
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/METADATA +288 -279
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/RECORD +608 -605
- metadata/applications/auto_tagger.py +0 -212
- metadata/cli/backup.py +0 -209
- metadata/cli/db_dump.py +0 -239
- metadata/cli/utils.py +0 -56
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.4.0.0rc1.dist-info → openmetadata_ingestion-1.4.0.0rc3.dist-info}/top_level.txt +0 -0
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
# Copyright 2021 Collate
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
-
# you may not use this file except in compliance with the License.
|
|
4
|
-
# You may obtain a copy of the License at
|
|
5
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
# See the License for the specific language governing permissions and
|
|
10
|
-
# limitations under the License.
|
|
11
|
-
"""
|
|
12
|
-
PII application
|
|
13
|
-
"""
|
|
14
|
-
import traceback
|
|
15
|
-
from typing import Iterable, List, Optional
|
|
16
|
-
|
|
17
|
-
from metadata.generated.schema.entity.applications.configuration.external.autoTaggerAppConfig import (
|
|
18
|
-
AutoTaggerAppConfig,
|
|
19
|
-
)
|
|
20
|
-
from metadata.generated.schema.entity.data.table import Column, Table, TableData
|
|
21
|
-
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
22
|
-
StackTraceError,
|
|
23
|
-
)
|
|
24
|
-
from metadata.generated.schema.metadataIngestion.application import (
|
|
25
|
-
OpenMetadataApplicationConfig,
|
|
26
|
-
)
|
|
27
|
-
from metadata.generated.schema.type.tagLabel import (
|
|
28
|
-
LabelType,
|
|
29
|
-
State,
|
|
30
|
-
TagFQN,
|
|
31
|
-
TagLabel,
|
|
32
|
-
TagSource,
|
|
33
|
-
)
|
|
34
|
-
from metadata.ingestion.models.table_metadata import ColumnTag
|
|
35
|
-
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
36
|
-
from metadata.pii.constants import PII
|
|
37
|
-
from metadata.pii.scanners.column_name_scanner import ColumnNameScanner
|
|
38
|
-
from metadata.pii.scanners.ner_scanner import NERScanner
|
|
39
|
-
from metadata.utils.logger import app_logger
|
|
40
|
-
from metadata.workflow.application import AppRunner, InvalidAppConfiguration
|
|
41
|
-
|
|
42
|
-
logger = app_logger()
|
|
43
|
-
|
|
44
|
-
DEFAULT_CONFIDENCE = 80
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class AutoTaggerApp(AppRunner):
|
|
48
|
-
"""
|
|
49
|
-
PII Application
|
|
50
|
-
You can execute it with `metadata app -c <path-to-yaml>`
|
|
51
|
-
with a YAML file like:
|
|
52
|
-
|
|
53
|
-
sourcePythonClass: metadata.applications.auto_tagger.AutoTaggerApp
|
|
54
|
-
appConfig:
|
|
55
|
-
type: AutoTagger
|
|
56
|
-
confidenceLevel: 80
|
|
57
|
-
workflowConfig:
|
|
58
|
-
loggerLevel: INFO
|
|
59
|
-
openMetadataServerConfig:
|
|
60
|
-
hostPort: http://localhost:8585/api
|
|
61
|
-
authProvider: openmetadata
|
|
62
|
-
securityConfig:
|
|
63
|
-
jwtToken: "..."
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
def __init__(self, config: OpenMetadataApplicationConfig, metadata: OpenMetadata):
|
|
67
|
-
super().__init__(config, metadata)
|
|
68
|
-
|
|
69
|
-
if not isinstance(self.app_config, AutoTaggerAppConfig):
|
|
70
|
-
raise InvalidAppConfiguration(
|
|
71
|
-
f"AutoTagger Runner expects an AutoTaggerAppConfig, we got [{config}]"
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
self._ner_scanner = None
|
|
75
|
-
self.confidence_threshold = (
|
|
76
|
-
self.app_config.confidenceLevel or DEFAULT_CONFIDENCE
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
@property
|
|
80
|
-
def name(self) -> str:
|
|
81
|
-
return "Auto Tagger"
|
|
82
|
-
|
|
83
|
-
@staticmethod
|
|
84
|
-
def build_column_tag(tag_fqn: str, column_fqn: str) -> ColumnTag:
|
|
85
|
-
"""
|
|
86
|
-
Build the tag and run the PATCH
|
|
87
|
-
"""
|
|
88
|
-
tag_label = TagLabel(
|
|
89
|
-
tagFQN=TagFQN(__root__=tag_fqn),
|
|
90
|
-
source=TagSource.Classification,
|
|
91
|
-
state=State.Suggested,
|
|
92
|
-
labelType=LabelType.Automated,
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
return ColumnTag(column_fqn=column_fqn, tag_label=tag_label)
|
|
96
|
-
|
|
97
|
-
@property
|
|
98
|
-
def ner_scanner(self) -> NERScanner:
|
|
99
|
-
"""Load the NER Scanner only if called"""
|
|
100
|
-
if self._ner_scanner is None:
|
|
101
|
-
self._ner_scanner = NERScanner()
|
|
102
|
-
|
|
103
|
-
return self._ner_scanner
|
|
104
|
-
|
|
105
|
-
def process_column(
|
|
106
|
-
self,
|
|
107
|
-
idx: int,
|
|
108
|
-
column: Column,
|
|
109
|
-
table_data: Optional[TableData],
|
|
110
|
-
confidence_threshold: float,
|
|
111
|
-
) -> Optional[List[ColumnTag]]:
|
|
112
|
-
"""
|
|
113
|
-
Tag a column with PII if we find it using our scanners
|
|
114
|
-
"""
|
|
115
|
-
|
|
116
|
-
# First, check if the column we are about to process
|
|
117
|
-
# already has PII tags or not
|
|
118
|
-
column_has_pii_tag = any(
|
|
119
|
-
(PII in tag.tagFQN.__root__ for tag in column.tags or [])
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
# If it has PII tags, we skip the processing
|
|
123
|
-
# for the column
|
|
124
|
-
if column_has_pii_tag is True:
|
|
125
|
-
return None
|
|
126
|
-
|
|
127
|
-
# Scan by column name. If no results there, check the sample data, if any
|
|
128
|
-
tag_and_confidence = ColumnNameScanner.scan(column.name.__root__) or (
|
|
129
|
-
self.ner_scanner.scan([row[idx] for row in table_data.rows])
|
|
130
|
-
if table_data
|
|
131
|
-
else None
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
tag_and_confidence
|
|
136
|
-
and tag_and_confidence.tag_fqn
|
|
137
|
-
and tag_and_confidence.confidence >= confidence_threshold / 100
|
|
138
|
-
):
|
|
139
|
-
# We support returning +1 tags for a single column in _run
|
|
140
|
-
return [
|
|
141
|
-
self.build_column_tag(
|
|
142
|
-
tag_fqn=tag_and_confidence.tag_fqn,
|
|
143
|
-
column_fqn=column.fullyQualifiedName.__root__,
|
|
144
|
-
)
|
|
145
|
-
]
|
|
146
|
-
|
|
147
|
-
return None
|
|
148
|
-
|
|
149
|
-
def process_table(self, table: Table) -> Optional[List[ColumnTag]]:
|
|
150
|
-
"""Run the patching of the table"""
|
|
151
|
-
column_tags = []
|
|
152
|
-
for idx, column in enumerate(table.columns):
|
|
153
|
-
try:
|
|
154
|
-
col_tags = self.process_column(
|
|
155
|
-
idx=idx,
|
|
156
|
-
column=column,
|
|
157
|
-
table_data=table.sampleData,
|
|
158
|
-
confidence_threshold=self.confidence_threshold,
|
|
159
|
-
)
|
|
160
|
-
if col_tags:
|
|
161
|
-
column_tags.extend(col_tags)
|
|
162
|
-
except Exception as err:
|
|
163
|
-
self.status.failed(
|
|
164
|
-
StackTraceError(
|
|
165
|
-
name=table.fullyQualifiedName.__root__,
|
|
166
|
-
error=f"Error computing PII tags for [{column}] - [{err}]",
|
|
167
|
-
stackTrace=traceback.format_exc(),
|
|
168
|
-
)
|
|
169
|
-
)
|
|
170
|
-
|
|
171
|
-
if column_tags:
|
|
172
|
-
return column_tags
|
|
173
|
-
|
|
174
|
-
return None
|
|
175
|
-
|
|
176
|
-
def patch_columns(self, table: Table, column_tags: List[ColumnTag]) -> None:
|
|
177
|
-
"""Patch columns with PII"""
|
|
178
|
-
patched = self.metadata.patch_column_tags(table=table, column_tags=column_tags)
|
|
179
|
-
if not patched:
|
|
180
|
-
self.status.failed(
|
|
181
|
-
StackTraceError(
|
|
182
|
-
name=table.fullyQualifiedName.__root__,
|
|
183
|
-
error="Error patching tags for table",
|
|
184
|
-
)
|
|
185
|
-
)
|
|
186
|
-
else:
|
|
187
|
-
self.status.scanned(table)
|
|
188
|
-
logger.debug(
|
|
189
|
-
f"Successfully patched tag {column_tags} for {table.fullyQualifiedName.__root__}"
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
def run(self) -> None:
|
|
193
|
-
"""
|
|
194
|
-
The PII Application will:
|
|
195
|
-
1. List tables
|
|
196
|
-
2. Check their column names and sample data (if any)
|
|
197
|
-
3. PATCH PII tags when needed
|
|
198
|
-
"""
|
|
199
|
-
tables: Iterable[Table] = self.metadata.list_all_entities(
|
|
200
|
-
entity=Table, fields=["sampleData", "tags"]
|
|
201
|
-
)
|
|
202
|
-
for table in tables:
|
|
203
|
-
column_tags = self.process_table(table)
|
|
204
|
-
if column_tags:
|
|
205
|
-
self.patch_columns(table=table, column_tags=column_tags)
|
|
206
|
-
else:
|
|
207
|
-
self.status.filter(
|
|
208
|
-
key=table.fullyQualifiedName.__root__, reason="No PII found"
|
|
209
|
-
)
|
|
210
|
-
|
|
211
|
-
def close(self) -> None:
|
|
212
|
-
"""Nothing to close"""
|
metadata/cli/backup.py
DELETED
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
# Copyright 2021 Collate
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
-
# you may not use this file except in compliance with the License.
|
|
4
|
-
# You may obtain a copy of the License at
|
|
5
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
# See the License for the specific language governing permissions and
|
|
10
|
-
# limitations under the License.
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
Backup utility for the metadata CLI
|
|
14
|
-
"""
|
|
15
|
-
import traceback
|
|
16
|
-
from datetime import datetime
|
|
17
|
-
from enum import Enum
|
|
18
|
-
from pathlib import Path
|
|
19
|
-
from typing import Optional, Tuple
|
|
20
|
-
|
|
21
|
-
from metadata.cli.db_dump import dump
|
|
22
|
-
from metadata.cli.utils import get_engine
|
|
23
|
-
from metadata.utils.helpers import BackupRestoreArgs
|
|
24
|
-
from metadata.utils.logger import ANSI, cli_logger, log_ansi_encoded_string
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class UploadDestinationType(Enum):
|
|
28
|
-
AWS = "AWS"
|
|
29
|
-
AZURE = "Azure"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
logger = cli_logger()
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def get_output(output: Optional[str] = None, filename: Optional[str] = None) -> Path:
|
|
36
|
-
"""
|
|
37
|
-
Helper function to prepare the output backup file
|
|
38
|
-
path and name.
|
|
39
|
-
|
|
40
|
-
It will create the output dir if it does not exist.
|
|
41
|
-
|
|
42
|
-
:param output: local path to store the backup
|
|
43
|
-
:param filename: name of the backup file
|
|
44
|
-
:return: backup file name
|
|
45
|
-
"""
|
|
46
|
-
now = datetime.now().strftime("%Y%m%d%H%M")
|
|
47
|
-
name = filename if filename else f"openmetadata_{now}_backup.sql"
|
|
48
|
-
|
|
49
|
-
if output:
|
|
50
|
-
path = Path(output).expanduser()
|
|
51
|
-
# Create the output directory if it does not exist
|
|
52
|
-
if not path.is_dir():
|
|
53
|
-
path.mkdir(parents=True, exist_ok=True)
|
|
54
|
-
|
|
55
|
-
return path / name
|
|
56
|
-
|
|
57
|
-
return Path(name)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def upload_backup_aws(endpoint: str, bucket: str, key: str, file: Path) -> None:
|
|
61
|
-
"""
|
|
62
|
-
Upload the mysqldump backup file.
|
|
63
|
-
We will use boto3 to upload the file to the endpoint
|
|
64
|
-
and the key provided.
|
|
65
|
-
|
|
66
|
-
:param endpoint: S3 endpoint
|
|
67
|
-
:param bucket: S3 bucket to upload the file to
|
|
68
|
-
:param key: S3 key to upload the backup file
|
|
69
|
-
:param file: file to upload
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
try:
|
|
73
|
-
# We just want to force boto3 install if uploading backup
|
|
74
|
-
# pylint: disable=import-outside-toplevel
|
|
75
|
-
import boto3
|
|
76
|
-
from boto3.exceptions import S3UploadFailedError
|
|
77
|
-
except ModuleNotFoundError as err:
|
|
78
|
-
logger.debug(traceback.format_exc())
|
|
79
|
-
logger.error(
|
|
80
|
-
"Trying to import boto3 to run the backup upload."
|
|
81
|
-
+ " Please install openmetadata-ingestion[backup]."
|
|
82
|
-
)
|
|
83
|
-
raise err
|
|
84
|
-
|
|
85
|
-
s3_key = Path(key) / file.name
|
|
86
|
-
log_ansi_encoded_string(
|
|
87
|
-
color=ANSI.GREEN,
|
|
88
|
-
bold=False,
|
|
89
|
-
message=f"Uploading {file} to {endpoint}/{bucket}/{str(s3_key)}...",
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
try:
|
|
93
|
-
resource = boto3.resource(service_name="s3", endpoint_url=endpoint)
|
|
94
|
-
resource.Object(bucket, str(s3_key)).upload_file(str(file.absolute()))
|
|
95
|
-
|
|
96
|
-
except ValueError as err:
|
|
97
|
-
logger.debug(traceback.format_exc())
|
|
98
|
-
logger.error("Revisit the values of --upload")
|
|
99
|
-
raise err
|
|
100
|
-
except S3UploadFailedError as err:
|
|
101
|
-
logger.debug(traceback.format_exc())
|
|
102
|
-
logger.error(
|
|
103
|
-
"Error when uploading the backup to S3. Revisit the config and permissions."
|
|
104
|
-
+ " You should have set the environment values for AWS_ACCESS_KEY_ID"
|
|
105
|
-
+ " and AWS_SECRET_ACCESS_KEY"
|
|
106
|
-
)
|
|
107
|
-
raise err
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
def upload_backup_azure(account_url: str, container: str, file: Path) -> None:
|
|
111
|
-
"""
|
|
112
|
-
Upload the mysqldump backup file.
|
|
113
|
-
|
|
114
|
-
:param account_url: Azure account url
|
|
115
|
-
:param container: Azure container to upload file to
|
|
116
|
-
:param file: file to upload
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
try:
|
|
120
|
-
# pylint: disable=import-outside-toplevel
|
|
121
|
-
from azure.identity import DefaultAzureCredential
|
|
122
|
-
from azure.storage.blob import BlobServiceClient
|
|
123
|
-
|
|
124
|
-
default_credential = DefaultAzureCredential()
|
|
125
|
-
# Create the BlobServiceClient object
|
|
126
|
-
blob_service_client = BlobServiceClient(
|
|
127
|
-
account_url, credential=default_credential
|
|
128
|
-
)
|
|
129
|
-
except ModuleNotFoundError as err:
|
|
130
|
-
logger.debug(traceback.format_exc())
|
|
131
|
-
logger.error(
|
|
132
|
-
"Trying to import DefaultAzureCredential to run the backup upload."
|
|
133
|
-
)
|
|
134
|
-
raise err
|
|
135
|
-
|
|
136
|
-
log_ansi_encoded_string(
|
|
137
|
-
color=ANSI.GREEN,
|
|
138
|
-
message=f"Uploading {file} to {account_url}/{container}...",
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
try:
|
|
142
|
-
# Create a blob client using the local file name as the name for the blob
|
|
143
|
-
blob_client = blob_service_client.get_blob_client(
|
|
144
|
-
container=container, blob=file.name
|
|
145
|
-
)
|
|
146
|
-
|
|
147
|
-
# Upload the created file
|
|
148
|
-
with open(file=file, mode="rb") as data:
|
|
149
|
-
blob_client.upload_blob(data)
|
|
150
|
-
|
|
151
|
-
except ValueError as err:
|
|
152
|
-
logger.debug(traceback.format_exc())
|
|
153
|
-
logger.error("Revisit the values of --upload")
|
|
154
|
-
raise err
|
|
155
|
-
except Exception as err:
|
|
156
|
-
logger.debug(traceback.format_exc())
|
|
157
|
-
logger.error(err)
|
|
158
|
-
raise err
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def run_backup(
|
|
162
|
-
common_backup_obj_instance: BackupRestoreArgs,
|
|
163
|
-
output: Optional[str],
|
|
164
|
-
filename: Optional[str],
|
|
165
|
-
upload_destination_type: Optional[UploadDestinationType],
|
|
166
|
-
upload: Optional[Tuple[str, str, str]],
|
|
167
|
-
) -> None:
|
|
168
|
-
"""
|
|
169
|
-
Run `mysqldump` to MySQL database and store the
|
|
170
|
-
output. Optionally, upload it to S3.
|
|
171
|
-
|
|
172
|
-
:param common_backup_obj_instance: cls instance to fetch common args
|
|
173
|
-
:param output: local path to store the backup
|
|
174
|
-
:param filename: filename to store the backup
|
|
175
|
-
:param upload_destination_type: Azure or AWS Destination Type
|
|
176
|
-
:param upload: URI to upload result file
|
|
177
|
-
|
|
178
|
-
"""
|
|
179
|
-
log_ansi_encoded_string(
|
|
180
|
-
color=ANSI.BRIGHT_RED,
|
|
181
|
-
bold=True,
|
|
182
|
-
message="WARNING: backup is deprecated starting 1.4.0. Use database native dump tools instead."
|
|
183
|
-
"For more information, please visit: "
|
|
184
|
-
"https://docs.open-metadata.org/v1.4.x/deployment/backup-restore-metadata",
|
|
185
|
-
)
|
|
186
|
-
log_ansi_encoded_string(
|
|
187
|
-
color=ANSI.GREEN,
|
|
188
|
-
bold=False,
|
|
189
|
-
message="Creating OpenMetadata backup for "
|
|
190
|
-
f"{common_backup_obj_instance.host}:{common_backup_obj_instance.port}/{common_backup_obj_instance.database}...",
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
out = get_output(output, filename)
|
|
194
|
-
|
|
195
|
-
engine = get_engine(common_args=common_backup_obj_instance)
|
|
196
|
-
dump(engine=engine, output=out, schema=common_backup_obj_instance.schema)
|
|
197
|
-
|
|
198
|
-
log_ansi_encoded_string(
|
|
199
|
-
color=ANSI.GREEN, bold=False, message=f"Backup stored locally under {out}"
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
if upload:
|
|
203
|
-
if upload_destination_type == UploadDestinationType.AWS.value:
|
|
204
|
-
endpoint, bucket, key = upload
|
|
205
|
-
upload_backup_aws(endpoint, bucket, key, out)
|
|
206
|
-
elif upload_destination_type.title() == UploadDestinationType.AZURE.value:
|
|
207
|
-
# only need two parameters from upload, key would be null
|
|
208
|
-
account_url, container, key = upload
|
|
209
|
-
upload_backup_azure(account_url, container, out)
|
metadata/cli/db_dump.py
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# Copyright 2021 Collate
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
-
# you may not use this file except in compliance with the License.
|
|
4
|
-
# You may obtain a copy of the License at
|
|
5
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
# See the License for the specific language governing permissions and
|
|
10
|
-
# limitations under the License.
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
Database Dumping utility for the metadata CLI
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
import json
|
|
17
|
-
from functools import singledispatch
|
|
18
|
-
from pathlib import Path
|
|
19
|
-
from typing import Iterable, List, Optional, Union
|
|
20
|
-
|
|
21
|
-
from sqlalchemy import inspect, text
|
|
22
|
-
from sqlalchemy.engine import Engine, Row
|
|
23
|
-
|
|
24
|
-
from metadata.utils.constants import UTF_8
|
|
25
|
-
|
|
26
|
-
TABLES_DUMP_ALL = {
|
|
27
|
-
"task_sequence",
|
|
28
|
-
"entity_usage",
|
|
29
|
-
"entity_relationship",
|
|
30
|
-
"entity_extension",
|
|
31
|
-
"field_relationship",
|
|
32
|
-
"tag_usage",
|
|
33
|
-
"openmetadata_settings",
|
|
34
|
-
"profiler_data_time_series",
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
CUSTOM_TABLES = {"entity_extension_time_series": {"exclude_columns": ["timestamp"]}}
|
|
38
|
-
NOT_MIGRATE = {"DATABASE_CHANGE_LOG", "SERVER_MIGRATION_SQL_LOGS", "SERVER_CHANGE_LOG"}
|
|
39
|
-
|
|
40
|
-
STATEMENT_JSON = "SELECT json FROM {table}"
|
|
41
|
-
STATEMENT_HASH_JSON = "SELECT json, {hash_column_name} FROM {table}"
|
|
42
|
-
STATEMENT_ALL = "SELECT * FROM {table}"
|
|
43
|
-
STATEMENT_TRUNCATE = "TRUNCATE TABLE {table};\n"
|
|
44
|
-
STATEMENT_ALL_NEW = "SELECT {cols} FROM {table}"
|
|
45
|
-
|
|
46
|
-
MYSQL_ENGINE_NAME = "mysql"
|
|
47
|
-
FQN_HASH_COLUMN = "fqnHash"
|
|
48
|
-
NAME_HASH_COLUMN = "nameHash"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def single_quote_wrap(raw: str) -> str:
|
|
52
|
-
"""
|
|
53
|
-
Add single quote wrap to string. From `str` to `'str'`
|
|
54
|
-
"""
|
|
55
|
-
return f"'{raw}'"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def clean_str(raw: str, engine: Engine) -> str:
|
|
59
|
-
"""
|
|
60
|
-
String cleaning for SQL parsing.
|
|
61
|
-
|
|
62
|
-
Logic is different between MySQL and Postgres
|
|
63
|
-
|
|
64
|
-
- descriptions/comments with single quotes, e.g., `Mysql's data`.
|
|
65
|
-
get converted to `Mysql''s data`
|
|
66
|
-
- To insert a literal backlash in MySQL you need to escape with another one. This applies for `\n` and `\"` in
|
|
67
|
-
inner JSONs for a field. This is not required for postgres
|
|
68
|
-
"""
|
|
69
|
-
quoted_str = raw.replace("'", "''")
|
|
70
|
-
|
|
71
|
-
if engine.name == MYSQL_ENGINE_NAME:
|
|
72
|
-
quoted_str = quoted_str.replace("\\", "\\\\")
|
|
73
|
-
|
|
74
|
-
return quoted_str
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
@singledispatch
|
|
78
|
-
def clean_col(column_raw: Optional[Union[dict, str]], engine: Engine) -> str:
|
|
79
|
-
return (
|
|
80
|
-
single_quote_wrap(clean_str(str(column_raw), engine))
|
|
81
|
-
if column_raw is not None
|
|
82
|
-
else "null"
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
@clean_col.register(dict)
|
|
87
|
-
@clean_col.register(list)
|
|
88
|
-
def _(column_raw: Optional[Union[dict, list]], engine: Engine) -> str:
|
|
89
|
-
"""
|
|
90
|
-
Prepare the JSON column to be inserted to MySQL
|
|
91
|
-
|
|
92
|
-
Handle:
|
|
93
|
-
- quotes
|
|
94
|
-
- True/False values
|
|
95
|
-
"""
|
|
96
|
-
return (
|
|
97
|
-
single_quote_wrap(
|
|
98
|
-
clean_str(
|
|
99
|
-
json.dumps(
|
|
100
|
-
column_raw,
|
|
101
|
-
default=str, # If we don't know how to serialize, convert to str
|
|
102
|
-
),
|
|
103
|
-
engine,
|
|
104
|
-
)
|
|
105
|
-
)
|
|
106
|
-
if column_raw is not None
|
|
107
|
-
else "null"
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
def get_hash_column_name(engine: Engine, table_name: str) -> Optional[str]:
|
|
112
|
-
"""
|
|
113
|
-
Method to get name of the hash column (fqnHash or nameHash)
|
|
114
|
-
"""
|
|
115
|
-
inspector = inspect(engine)
|
|
116
|
-
columns = inspector.get_columns(table_name)
|
|
117
|
-
for column in columns:
|
|
118
|
-
if column["name"].lower() == FQN_HASH_COLUMN.lower():
|
|
119
|
-
return column["name"]
|
|
120
|
-
if column["name"].lower() == NAME_HASH_COLUMN.lower():
|
|
121
|
-
return column["name"]
|
|
122
|
-
return None
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
def run_query_iter(engine: Engine, query: str) -> Iterable[Row]:
|
|
126
|
-
"""Return a generator of rows, one row at a time, with a limit of 100 in-mem rows"""
|
|
127
|
-
with engine.connect() as conn:
|
|
128
|
-
result = conn.execution_options(
|
|
129
|
-
stream_results=True, max_row_buffer=100
|
|
130
|
-
).execute(text(query))
|
|
131
|
-
for row in result:
|
|
132
|
-
yield row
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def dump_json(tables: List[str], engine: Engine, output: Path) -> None:
|
|
136
|
-
"""
|
|
137
|
-
Dumps JSON data.
|
|
138
|
-
|
|
139
|
-
Postgres: engine.name == "postgresql"
|
|
140
|
-
MySQL: engine.name == "mysql"
|
|
141
|
-
"""
|
|
142
|
-
with open(output, "a", encoding=UTF_8) as file:
|
|
143
|
-
for table in tables:
|
|
144
|
-
truncate = STATEMENT_TRUNCATE.format(table=table)
|
|
145
|
-
file.write(truncate)
|
|
146
|
-
|
|
147
|
-
hash_column_name = get_hash_column_name(engine=engine, table_name=table)
|
|
148
|
-
if hash_column_name:
|
|
149
|
-
query = STATEMENT_HASH_JSON.format(
|
|
150
|
-
table=table, hash_column_name=hash_column_name
|
|
151
|
-
)
|
|
152
|
-
for row in run_query_iter(engine=engine, query=query):
|
|
153
|
-
insert = f"INSERT INTO {table} (json, {hash_column_name}) VALUES ({clean_col(row.json, engine)}, {clean_col(row[1], engine)});\n" # pylint: disable=line-too-long
|
|
154
|
-
file.write(insert)
|
|
155
|
-
else:
|
|
156
|
-
res = engine.execute(text(STATEMENT_JSON.format(table=table))).all()
|
|
157
|
-
for row in res:
|
|
158
|
-
insert = f"INSERT INTO {table} (json) VALUES ({clean_col(row.json, engine)});\n"
|
|
159
|
-
file.write(insert)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
def dump_all(tables: List[str], engine: Engine, output: Path) -> None:
|
|
163
|
-
"""
|
|
164
|
-
Dump tables that need to store all data
|
|
165
|
-
"""
|
|
166
|
-
with open(output, "a", encoding=UTF_8) as file:
|
|
167
|
-
for table in tables:
|
|
168
|
-
truncate = STATEMENT_TRUNCATE.format(table=table)
|
|
169
|
-
file.write(truncate)
|
|
170
|
-
|
|
171
|
-
query = STATEMENT_ALL.format(table=table)
|
|
172
|
-
for row in run_query_iter(engine=engine, query=query):
|
|
173
|
-
data = ",".join(clean_col(col, engine) for col in row)
|
|
174
|
-
|
|
175
|
-
insert = f"INSERT INTO {table} VALUES ({data});\n"
|
|
176
|
-
file.write(insert)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
def dump_entity_custom(engine: Engine, output: Path, inspector) -> None:
|
|
180
|
-
"""
|
|
181
|
-
This function is used to dump entities with custom handling
|
|
182
|
-
"""
|
|
183
|
-
with open(output, "a", encoding=UTF_8) as file:
|
|
184
|
-
for table, data in CUSTOM_TABLES.items():
|
|
185
|
-
truncate = STATEMENT_TRUNCATE.format(table=table)
|
|
186
|
-
file.write(truncate)
|
|
187
|
-
|
|
188
|
-
columns = inspector.get_columns(table_name=table)
|
|
189
|
-
|
|
190
|
-
query = STATEMENT_ALL_NEW.format(
|
|
191
|
-
cols=",".join(
|
|
192
|
-
col["name"]
|
|
193
|
-
for col in columns
|
|
194
|
-
if col["name"] not in data["exclude_columns"]
|
|
195
|
-
),
|
|
196
|
-
table=table,
|
|
197
|
-
)
|
|
198
|
-
for row in run_query_iter(engine=engine, query=query):
|
|
199
|
-
# Let's use .format here to not add more variables
|
|
200
|
-
# pylint: disable=consider-using-f-string
|
|
201
|
-
insert = "INSERT INTO {table} ({cols}) VALUES ({data});\n".format(
|
|
202
|
-
table=table,
|
|
203
|
-
data=",".join(clean_col(col, engine) for col in row),
|
|
204
|
-
cols=",".join(
|
|
205
|
-
col["name"]
|
|
206
|
-
for col in columns
|
|
207
|
-
if col["name"] not in data["exclude_columns"]
|
|
208
|
-
),
|
|
209
|
-
)
|
|
210
|
-
file.write(insert)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
def get_lower_table_names(tables):
|
|
214
|
-
return [table.lower() for table in tables]
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
def dump(engine: Engine, output: Path, schema: str = None) -> None:
|
|
218
|
-
"""
|
|
219
|
-
Get all tables from the database and dump
|
|
220
|
-
only the JSON column for the required tables
|
|
221
|
-
"""
|
|
222
|
-
inspector = inspect(engine)
|
|
223
|
-
tables = (
|
|
224
|
-
inspector.get_table_names(schema) if schema else inspector.get_table_names()
|
|
225
|
-
)
|
|
226
|
-
lower_tables = get_lower_table_names(tables)
|
|
227
|
-
all_non_json_tables = (
|
|
228
|
-
get_lower_table_names(TABLES_DUMP_ALL)
|
|
229
|
-
+ get_lower_table_names(NOT_MIGRATE)
|
|
230
|
-
+ get_lower_table_names(CUSTOM_TABLES)
|
|
231
|
-
)
|
|
232
|
-
|
|
233
|
-
dump_json_tables = [
|
|
234
|
-
table for table in lower_tables if table not in all_non_json_tables
|
|
235
|
-
]
|
|
236
|
-
|
|
237
|
-
dump_all(tables=list(TABLES_DUMP_ALL), engine=engine, output=output)
|
|
238
|
-
dump_json(tables=dump_json_tables, engine=engine, output=output)
|
|
239
|
-
dump_entity_custom(engine=engine, output=output, inspector=inspector)
|