openmetadata-ingestion 1.10.0.0__py3-none-any.whl → 1.10.2.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/aws_client.py +4 -0
- metadata/examples/workflows/confluent_cdc.yaml +70 -0
- metadata/examples/workflows/confluent_cdc_cloud.yaml +86 -0
- metadata/examples/workflows/confluent_cdc_local.yaml +120 -0
- metadata/examples/workflows/kinesisfirehose.yaml +99 -0
- metadata/examples/workflows/my_confluent_cloud.yaml +49 -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/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/createTagWithRecognizers.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/configuration/__init__.py +1 -1
- metadata/generated/schema/api/configuration/rdfConfiguration.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/createDataContract.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/createDirectory.py +1 -1
- metadata/generated/schema/api/data/createEntityProfile.py +1 -1
- metadata/generated/schema/api/data/createFile.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/createQueryCostRecord.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createSpreadsheet.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/createWorksheet.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/data/updateColumn.py +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/entityRelationship/__init__.py +1 -1
- metadata/generated/schema/api/entityRelationship/entityRelationshipDirection.py +1 -1
- metadata/generated/schema/api/entityRelationship/esEntityRelationshipData.py +1 -1
- metadata/generated/schema/api/entityRelationship/relationshipRef.py +1 -1
- metadata/generated/schema/api/entityRelationship/searchEntityRelationshipRequest.py +1 -1
- metadata/generated/schema/api/entityRelationship/searchEntityRelationshipResult.py +1 -1
- metadata/generated/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.py +1 -1
- metadata/generated/schema/api/events/__init__.py +1 -1
- metadata/generated/schema/api/events/createNotificationTemplate.py +1 -1
- metadata/generated/schema/api/events/notificationTemplateValidationRequest.py +1 -1
- metadata/generated/schema/api/events/notificationTemplateValidationResponse.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/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/lineage/entityCountLineageRequest.py +1 -1
- metadata/generated/schema/api/lineage/esLineageData.py +1 -1
- metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
- metadata/generated/schema/api/lineage/lineagePaginationInfo.py +1 -1
- metadata/generated/schema/api/lineage/nodeInformation.py +1 -1
- metadata/generated/schema/api/lineage/searchLineageRequest.py +1 -1
- metadata/generated/schema/api/lineage/searchLineageResult.py +1 -1
- metadata/generated/schema/api/mcp/__init__.py +1 -1
- metadata/generated/schema/api/mcp/mcpSearchResponse.py +1 -1
- metadata/generated/schema/api/mcp/mcpToolDefinition.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/rdf/__init__.py +1 -1
- metadata/generated/schema/api/rdf/sparqlQuery.py +1 -1
- metadata/generated/schema/api/rdf/sparqlResponse.py +1 -1
- metadata/generated/schema/api/scim/__init__.py +1 -1
- metadata/generated/schema/api/scim/scimGroup.py +1 -1
- metadata/generated/schema/api/scim/scimPatchOp.py +1 -1
- metadata/generated/schema/api/scim/scimUser.py +1 -1
- metadata/generated/schema/api/search/__init__.py +1 -1
- metadata/generated/schema/api/search/previewSearchRequest.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/createDriveService.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/createSecurityService.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/tests/moveGlossaryTermRequest.py +1 -1
- metadata/generated/schema/api/validateGlossaryTagsRequest.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/supportToken.py +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/aiPlatformConfiguration.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -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/cacheConfiguration.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/entityRulesSettings.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/logStorageConfiguration.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/openMetadataBaseUrlConfiguration.py +1 -1
- metadata/generated/schema/configuration/opertionalConfiguration.py +1 -1
- metadata/generated/schema/configuration/opsConfig.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/securityConfiguration.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 +1 -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 +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/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +1 -1
- metadata/generated/schema/entity/applications/appExtension.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/addCustomProperties.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.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/addTermsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.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/propagationStopConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDataProductAction.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/removeTermsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTestCaseAction.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/collateAIAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/bigQueryConnection.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/databricksConnection.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/metadataExporterConnectors/snowflakeConnection.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/autoPilotAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/collateAIQualityAgentAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/collateAITierAgentAppConfig.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/helloPipelinesConfiguration.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/__init__.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/configuration/private/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/limits.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/queryRunnerRequest.py +1 -1
- metadata/generated/schema/entity/automations/response/__init__.py +1 -1
- metadata/generated/schema/entity/automations/response/queryRunnerResponse.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/testSparkEngineConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +1 -1
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +1 -1
- metadata/generated/schema/entity/data/apiEndpoint.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/dataContract.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/directory.py +1 -1
- metadata/generated/schema/entity/data/file.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/metric.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/queryCostRecord.py +1 -1
- metadata/generated/schema/entity/data/queryCostSearchResult.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/spreadsheet.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +1 -1
- metadata/generated/schema/entity/data/table.py +1 -1
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/data/worksheet.py +1 -1
- metadata/generated/schema/entity/datacontract/__init__.py +1 -1
- metadata/generated/schema/entity/datacontract/dataContractResult.py +1 -1
- metadata/generated/schema/entity/datacontract/qualityValidation.py +1 -1
- metadata/generated/schema/entity/datacontract/schemaValidation.py +1 -1
- metadata/generated/schema/entity/datacontract/semanticsValidation.py +1 -1
- metadata/generated/schema/entity/datacontract/slaValidation.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/notificationTemplate.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +1 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/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/grafanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/hexConnection.py +76 -0
- 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/dashboard/thoughtSpotConnection.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/cassandra/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cassandra/cloudConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cassandraConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cockroachConnection.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/databricks/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricks/azureAdSetup.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricks/databricksOAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricks/personalAccessToken.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/epicConnection.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/serviceNowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/ssasConnection.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/timescaleConnection.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/drive/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/drive/customDriveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/drive/googleDriveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/drive/sharePointConnection.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/kinesisFirehoseConnection.py +58 -0
- metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.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/snowplowConnection.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/ssisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.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/security/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/security/ranger/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/security/ranger/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/security/rangerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +4 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/driveService.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/reverseIngestionResponse.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 +4 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/securityService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +1 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/api/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 +1 -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/createAndRunIngestionPipelineTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.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/gateway/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/gateway/parallelGateway.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/noOpTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -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 +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/driveServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/engine/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/engine/nativeEngineConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/engine/sparkEngineConfig.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/reverseIngestionPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/ownerConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/tagsConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/securityServiceMetadataPipeline.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/scim/__init__.py +1 -1
- metadata/generated/schema/scim/scimConfiguration.py +1 -1
- metadata/generated/schema/search/__init__.py +1 -1
- metadata/generated/schema/search/aggregationRequest.py +1 -1
- metadata/generated/schema/search/searchRequest.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/credentials/kubernetesCredentials.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/securityValidationResponse.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/navigationItem.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/ui/tab.py +1 -1
- metadata/generated/schema/system/ui/uiCustomization.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +1 -1
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/assetCertification.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/changeSummaryMap.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/contextRecognizer.py +1 -1
- metadata/generated/schema/type/contractExecutionStatus.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/customRecognizer.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/denyListRecognizer.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/entityProfile.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship/__init__.py +1 -1
- metadata/generated/schema/type/entityRelationship/nodeInformation.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/layerPaging.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/patternRecognizer.py +1 -1
- metadata/generated/schema/type/personaPreferences.py +1 -1
- metadata/generated/schema/type/piiEntity.py +1 -1
- metadata/generated/schema/type/predefinedRecognizer.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/recognizer.py +1 -1
- metadata/generated/schema/type/recognizerFeedback.py +1 -1
- metadata/generated/schema/type/recognizers/__init__.py +1 -1
- metadata/generated/schema/type/recognizers/patterns.py +1 -1
- metadata/generated/schema/type/recognizers/regexFlags.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/status.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/ometa/mixins/es_mixin.py +5 -1
- metadata/ingestion/source/dashboard/grafana/models.py +1 -1
- metadata/ingestion/source/dashboard/hex/client.py +104 -0
- metadata/ingestion/source/dashboard/hex/connection.py +60 -0
- metadata/ingestion/source/dashboard/hex/metadata.py +363 -0
- metadata/ingestion/source/dashboard/hex/models.py +143 -0
- metadata/ingestion/source/dashboard/hex/query_fetcher.py +503 -0
- metadata/ingestion/source/dashboard/hex/service_spec.py +18 -0
- metadata/ingestion/source/dashboard/hex/warehouse_queries.py +225 -0
- metadata/ingestion/source/dashboard/powerbi/databricks_parser.py +102 -0
- metadata/ingestion/source/dashboard/powerbi/metadata.py +285 -90
- metadata/ingestion/source/dashboard/tableau/client.py +8 -4
- metadata/ingestion/source/database/bigquery/metadata.py +0 -8
- metadata/ingestion/source/database/databricks/client.py +120 -0
- metadata/ingestion/source/database/redshift/utils.py +2 -1
- metadata/ingestion/source/database/snowflake/lineage.py +44 -21
- metadata/ingestion/source/database/snowflake/queries.py +2 -0
- metadata/ingestion/source/database/snowflake/query_parser.py +12 -2
- metadata/ingestion/source/database/snowflake/usage.py +97 -0
- metadata/ingestion/source/database/unitycatalog/client.py +1 -1
- metadata/ingestion/source/database/unitycatalog/lineage.py +180 -5
- metadata/ingestion/source/database/unitycatalog/models.py +18 -2
- metadata/ingestion/source/pipeline/databrickspipeline/connection.py +1 -0
- metadata/ingestion/source/pipeline/databrickspipeline/kafka_parser.py +501 -0
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +905 -36
- metadata/ingestion/source/pipeline/databrickspipeline/models.py +19 -3
- metadata/ingestion/source/pipeline/kafkaconnect/client.py +362 -30
- metadata/ingestion/source/pipeline/kafkaconnect/metadata.py +1666 -62
- metadata/ingestion/source/pipeline/kafkaconnect/models.py +35 -1
- metadata/ingestion/source/storage/s3/metadata.py +9 -2
- metadata/parsers/json_schema_parser.py +41 -1
- metadata/utils/deprecation.py +9 -6
- metadata/utils/fqn.py +59 -2
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/METADATA +550 -550
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/RECORD +854 -838
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.10.0.0.dist-info → openmetadata_ingestion-1.10.2.0.dist-info}/top_level.txt +0 -0
|
@@ -28,6 +28,7 @@ from metadata.generated.schema.entity.data.pipeline import (
|
|
|
28
28
|
TaskStatus,
|
|
29
29
|
)
|
|
30
30
|
from metadata.generated.schema.entity.data.table import Table
|
|
31
|
+
from metadata.generated.schema.entity.data.topic import Topic
|
|
31
32
|
from metadata.generated.schema.entity.services.connections.pipeline.databricksPipelineConnection import (
|
|
32
33
|
DatabricksPipelineConnection,
|
|
33
34
|
)
|
|
@@ -56,6 +57,10 @@ from metadata.ingestion.api.steps import InvalidSourceException
|
|
|
56
57
|
from metadata.ingestion.lineage.sql_lineage import get_column_fqn
|
|
57
58
|
from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
|
|
58
59
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
60
|
+
from metadata.ingestion.source.pipeline.databrickspipeline.kafka_parser import (
|
|
61
|
+
extract_dlt_table_dependencies,
|
|
62
|
+
extract_kafka_sources,
|
|
63
|
+
)
|
|
59
64
|
from metadata.ingestion.source.pipeline.databrickspipeline.models import (
|
|
60
65
|
DataBrickPipelineDetails,
|
|
61
66
|
DBRun,
|
|
@@ -86,6 +91,12 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
86
91
|
Pipeline metadata from Databricks Jobs API
|
|
87
92
|
"""
|
|
88
93
|
|
|
94
|
+
def __init__(self, config, metadata):
|
|
95
|
+
super().__init__(config, metadata)
|
|
96
|
+
# Cache for Databricks services to avoid repeated API calls
|
|
97
|
+
self._databricks_services_cached = False
|
|
98
|
+
self._databricks_services: List[str] = []
|
|
99
|
+
|
|
89
100
|
@classmethod
|
|
90
101
|
def create(
|
|
91
102
|
cls, config_dict, metadata: OpenMetadata, pipeline_name: Optional[str] = None
|
|
@@ -105,14 +116,30 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
105
116
|
yield DataBrickPipelineDetails(**workflow)
|
|
106
117
|
except Exception as exc:
|
|
107
118
|
logger.debug(traceback.format_exc())
|
|
108
|
-
logger.error(f"Failed to get
|
|
119
|
+
logger.error(f"Failed to get jobs list due to : {exc}")
|
|
120
|
+
|
|
121
|
+
# Fetch DLT pipelines directly (new)
|
|
122
|
+
try:
|
|
123
|
+
for pipeline in self.client.list_pipelines() or []:
|
|
124
|
+
try:
|
|
125
|
+
yield DataBrickPipelineDetails(**pipeline)
|
|
126
|
+
except Exception as exc:
|
|
127
|
+
logger.debug(f"Error creating DLT pipeline details: {exc}")
|
|
128
|
+
logger.debug(traceback.format_exc())
|
|
129
|
+
continue
|
|
130
|
+
except Exception as exc:
|
|
131
|
+
logger.debug(traceback.format_exc())
|
|
132
|
+
logger.warning(f"Failed to get DLT pipelines list due to : {exc}")
|
|
133
|
+
|
|
109
134
|
return None
|
|
110
135
|
|
|
111
136
|
def get_pipeline_name(
|
|
112
137
|
self, pipeline_details: DataBrickPipelineDetails
|
|
113
138
|
) -> Optional[str]:
|
|
114
139
|
try:
|
|
115
|
-
|
|
140
|
+
if pipeline_details.pipeline_id:
|
|
141
|
+
return pipeline_details.name
|
|
142
|
+
return pipeline_details.settings.name if pipeline_details.settings else None
|
|
116
143
|
except Exception as exc:
|
|
117
144
|
logger.debug(traceback.format_exc())
|
|
118
145
|
logger.error(f"Failed to get pipeline name due to : {exc}")
|
|
@@ -124,17 +151,35 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
124
151
|
) -> Iterable[Either[CreatePipelineRequest]]:
|
|
125
152
|
"""Method to Get Pipeline Entity"""
|
|
126
153
|
try:
|
|
127
|
-
|
|
154
|
+
if pipeline_details.pipeline_id:
|
|
155
|
+
description = None
|
|
156
|
+
display_name = pipeline_details.name
|
|
157
|
+
entity_name = str(pipeline_details.pipeline_id)
|
|
158
|
+
schedule_interval = None
|
|
159
|
+
else:
|
|
160
|
+
description = (
|
|
161
|
+
pipeline_details.settings.description
|
|
162
|
+
if pipeline_details.settings
|
|
163
|
+
else None
|
|
164
|
+
)
|
|
165
|
+
display_name = (
|
|
166
|
+
pipeline_details.settings.name
|
|
167
|
+
if pipeline_details.settings
|
|
168
|
+
else None
|
|
169
|
+
)
|
|
170
|
+
entity_name = str(pipeline_details.job_id)
|
|
171
|
+
schedule_interval = (
|
|
172
|
+
str(pipeline_details.settings.schedule.cron)
|
|
173
|
+
if pipeline_details.settings and pipeline_details.settings.schedule
|
|
174
|
+
else None
|
|
175
|
+
)
|
|
176
|
+
|
|
128
177
|
pipeline_request = CreatePipelineRequest(
|
|
129
|
-
name=EntityName(
|
|
130
|
-
displayName=
|
|
178
|
+
name=EntityName(entity_name),
|
|
179
|
+
displayName=display_name,
|
|
131
180
|
description=Markdown(description) if description else None,
|
|
132
181
|
tasks=self.get_tasks(pipeline_details),
|
|
133
|
-
scheduleInterval=
|
|
134
|
-
str(pipeline_details.settings.schedule.cron)
|
|
135
|
-
if pipeline_details.settings.schedule
|
|
136
|
-
else None
|
|
137
|
-
),
|
|
182
|
+
scheduleInterval=schedule_interval,
|
|
138
183
|
service=FullyQualifiedEntityName(self.context.get().pipeline_service),
|
|
139
184
|
)
|
|
140
185
|
yield Either(right=pipeline_request)
|
|
@@ -170,31 +215,25 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
170
215
|
|
|
171
216
|
def get_tasks(self, pipeline_details: DataBrickPipelineDetails) -> List[Task]:
|
|
172
217
|
try:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
downstreamTasks=[
|
|
190
|
-
depend_task.name
|
|
191
|
-
for depend_task in task.depends_on or []
|
|
192
|
-
],
|
|
193
|
-
)
|
|
194
|
-
for task in run.tasks or []
|
|
195
|
-
]
|
|
218
|
+
if not pipeline_details.settings or not pipeline_details.settings.tasks:
|
|
219
|
+
return None
|
|
220
|
+
|
|
221
|
+
job_url = f"https://{self.service_connection.hostPort}/#job/{pipeline_details.job_id}"
|
|
222
|
+
|
|
223
|
+
return [
|
|
224
|
+
Task(
|
|
225
|
+
name=str(task.name),
|
|
226
|
+
taskType=pipeline_details.settings.task_type,
|
|
227
|
+
sourceUrl=SourceUrl(job_url),
|
|
228
|
+
description=(
|
|
229
|
+
Markdown(task.description) if task.description else None
|
|
230
|
+
),
|
|
231
|
+
downstreamTasks=[
|
|
232
|
+
depend_task.name for depend_task in task.depends_on or []
|
|
233
|
+
],
|
|
196
234
|
)
|
|
197
|
-
|
|
235
|
+
for task in pipeline_details.settings.tasks
|
|
236
|
+
]
|
|
198
237
|
except Exception as exc:
|
|
199
238
|
logger.debug(traceback.format_exc())
|
|
200
239
|
logger.warning(f"Failed to get tasks list due to : {exc}")
|
|
@@ -204,6 +243,9 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
204
243
|
self, pipeline_details: DataBrickPipelineDetails
|
|
205
244
|
) -> Iterable[OMetaPipelineStatus]:
|
|
206
245
|
try:
|
|
246
|
+
if not pipeline_details.job_id:
|
|
247
|
+
return
|
|
248
|
+
|
|
207
249
|
for run in self.client.get_job_runs(job_id=pipeline_details.job_id) or []:
|
|
208
250
|
run = DBRun(**run)
|
|
209
251
|
task_status = [
|
|
@@ -241,7 +283,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
241
283
|
except Exception as exc:
|
|
242
284
|
yield Either(
|
|
243
285
|
left=StackTraceError(
|
|
244
|
-
name=pipeline_details.
|
|
286
|
+
name=pipeline_details.id,
|
|
245
287
|
error=f"Failed to yield pipeline status: {exc}",
|
|
246
288
|
stackTrace=traceback.format_exc(),
|
|
247
289
|
)
|
|
@@ -300,6 +342,826 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
300
342
|
)
|
|
301
343
|
return processed_column_lineage or []
|
|
302
344
|
|
|
345
|
+
def _get_databricks_services(self) -> List[str]:
|
|
346
|
+
"""
|
|
347
|
+
Get list of all Databricks/Unity Catalog database service names from OpenMetadata
|
|
348
|
+
|
|
349
|
+
Caches the result to avoid repeated API calls during lineage extraction.
|
|
350
|
+
Returns list of service names that are of type Databricks or UnityCatalog.
|
|
351
|
+
"""
|
|
352
|
+
# Return cached services if already fetched
|
|
353
|
+
if self._databricks_services_cached:
|
|
354
|
+
logger.debug(
|
|
355
|
+
f"Using cached Databricks services: {self._databricks_services}"
|
|
356
|
+
)
|
|
357
|
+
return self._databricks_services
|
|
358
|
+
|
|
359
|
+
try:
|
|
360
|
+
from metadata.generated.schema.entity.services.databaseService import (
|
|
361
|
+
DatabaseService,
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
logger.info("Fetching Databricks/Unity Catalog database services...")
|
|
365
|
+
|
|
366
|
+
# List all database services
|
|
367
|
+
services = self.metadata.list_all_entities(
|
|
368
|
+
entity=DatabaseService, fields=["serviceType"]
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
databricks_services = []
|
|
372
|
+
for service in services or []:
|
|
373
|
+
try:
|
|
374
|
+
service_type = (
|
|
375
|
+
service.serviceType.value
|
|
376
|
+
if hasattr(service, "serviceType")
|
|
377
|
+
else None
|
|
378
|
+
)
|
|
379
|
+
service_name = (
|
|
380
|
+
service.name.root
|
|
381
|
+
if hasattr(service.name, "root")
|
|
382
|
+
else service.name
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
logger.debug(f" Service: {service_name}, Type: {service_type}")
|
|
386
|
+
|
|
387
|
+
# Check if it's a Databricks or Unity Catalog service
|
|
388
|
+
if service_type and service_type.lower() in [
|
|
389
|
+
"databricks",
|
|
390
|
+
"unitycatalog",
|
|
391
|
+
]:
|
|
392
|
+
databricks_services.append(service_name)
|
|
393
|
+
logger.debug(
|
|
394
|
+
f" ✓ Databricks/Unity Catalog service: {service_name}"
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
except Exception as exc:
|
|
398
|
+
logger.debug(f" Error processing service: {exc}")
|
|
399
|
+
continue
|
|
400
|
+
|
|
401
|
+
# Cache the results
|
|
402
|
+
self._databricks_services = databricks_services
|
|
403
|
+
self._databricks_services_cached = True
|
|
404
|
+
|
|
405
|
+
logger.info(
|
|
406
|
+
f"Found {len(databricks_services)} Databricks/Unity Catalog service(s): {databricks_services}"
|
|
407
|
+
)
|
|
408
|
+
return databricks_services
|
|
409
|
+
|
|
410
|
+
except Exception as exc:
|
|
411
|
+
logger.warning(f"Error fetching Databricks services: {exc}")
|
|
412
|
+
logger.debug(traceback.format_exc())
|
|
413
|
+
# Cache empty list to avoid repeated failures
|
|
414
|
+
self._databricks_services = []
|
|
415
|
+
self._databricks_services_cached = True
|
|
416
|
+
return []
|
|
417
|
+
|
|
418
|
+
def _find_dlt_table(
|
|
419
|
+
self, table_name: str, catalog: Optional[str], schema: Optional[str]
|
|
420
|
+
) -> Optional[Table]:
|
|
421
|
+
"""
|
|
422
|
+
Find DLT table in OpenMetadata by iterating through Databricks services
|
|
423
|
+
|
|
424
|
+
DLT pipelines only write to Databricks/Unity Catalog Delta tables.
|
|
425
|
+
Uses catalog.schema.table_name from DLT spec to build FQN for each Databricks service.
|
|
426
|
+
|
|
427
|
+
Args:
|
|
428
|
+
table_name: Table name extracted from notebook code
|
|
429
|
+
catalog: Catalog name from DLT pipeline spec (database in OpenMetadata)
|
|
430
|
+
schema: Schema name from DLT pipeline spec
|
|
431
|
+
|
|
432
|
+
Returns:
|
|
433
|
+
Table entity if found, None otherwise
|
|
434
|
+
"""
|
|
435
|
+
try:
|
|
436
|
+
logger.debug(
|
|
437
|
+
f"Searching for DLT table: catalog={catalog}, schema={schema}, table={table_name}"
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
# Get all Databricks/Unity Catalog services (uses cache)
|
|
441
|
+
databricks_services = self._get_databricks_services()
|
|
442
|
+
|
|
443
|
+
if not databricks_services:
|
|
444
|
+
logger.warning(
|
|
445
|
+
"No Databricks/Unity Catalog services found in OpenMetadata"
|
|
446
|
+
)
|
|
447
|
+
# Fall back to configured dbServiceNames if available
|
|
448
|
+
databricks_services = self.get_db_service_names() or []
|
|
449
|
+
if databricks_services:
|
|
450
|
+
logger.info(
|
|
451
|
+
f"Using configured database services: {databricks_services}"
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
if not databricks_services:
|
|
455
|
+
return None
|
|
456
|
+
|
|
457
|
+
logger.debug(f"Trying {len(databricks_services)} Databricks service(s)")
|
|
458
|
+
|
|
459
|
+
# Try each Databricks service with exact case
|
|
460
|
+
for service_name in databricks_services:
|
|
461
|
+
try:
|
|
462
|
+
# Build FQN: service.catalog.schema.table
|
|
463
|
+
table_fqn = fqn.build(
|
|
464
|
+
metadata=self.metadata,
|
|
465
|
+
entity_type=Table,
|
|
466
|
+
service_name=service_name,
|
|
467
|
+
database_name=catalog,
|
|
468
|
+
schema_name=schema,
|
|
469
|
+
table_name=table_name,
|
|
470
|
+
)
|
|
471
|
+
|
|
472
|
+
logger.debug(f" Trying FQN: {table_fqn}")
|
|
473
|
+
|
|
474
|
+
# Try to get table
|
|
475
|
+
table = self.metadata.get_by_name(entity=Table, fqn=table_fqn)
|
|
476
|
+
if table:
|
|
477
|
+
logger.info(f"Found DLT table with FQN: {table_fqn}")
|
|
478
|
+
return table
|
|
479
|
+
|
|
480
|
+
except Exception as exc:
|
|
481
|
+
logger.debug(f" Error checking service {service_name}: {exc}")
|
|
482
|
+
continue
|
|
483
|
+
|
|
484
|
+
# If no exact match found, try case-insensitive (Unity Catalog lowercases table names)
|
|
485
|
+
logger.debug("Exact match not found, trying lowercase variants...")
|
|
486
|
+
for service_name in databricks_services:
|
|
487
|
+
try:
|
|
488
|
+
table_fqn = fqn.build(
|
|
489
|
+
metadata=self.metadata,
|
|
490
|
+
entity_type=Table,
|
|
491
|
+
service_name=service_name,
|
|
492
|
+
database_name=catalog.lower() if catalog else None,
|
|
493
|
+
schema_name=schema.lower() if schema else None,
|
|
494
|
+
table_name=table_name.lower(),
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
logger.debug(f" Trying lowercase FQN: {table_fqn}")
|
|
498
|
+
|
|
499
|
+
table = self.metadata.get_by_name(entity=Table, fqn=table_fqn)
|
|
500
|
+
if table:
|
|
501
|
+
logger.info(
|
|
502
|
+
f"Found DLT table with FQN (lowercase): {table_fqn}"
|
|
503
|
+
)
|
|
504
|
+
return table
|
|
505
|
+
|
|
506
|
+
except Exception as exc:
|
|
507
|
+
logger.debug(
|
|
508
|
+
f" Error checking service {service_name} (lowercase): {exc}"
|
|
509
|
+
)
|
|
510
|
+
continue
|
|
511
|
+
|
|
512
|
+
except Exception as exc:
|
|
513
|
+
logger.debug(f"Could not find DLT table {table_name}: {exc}")
|
|
514
|
+
logger.debug(traceback.format_exc())
|
|
515
|
+
|
|
516
|
+
logger.warning(
|
|
517
|
+
f"DLT table not found: {catalog}.{schema}.{table_name}. "
|
|
518
|
+
f"Ensure the table is ingested from a Databricks/Unity Catalog database service."
|
|
519
|
+
)
|
|
520
|
+
return None
|
|
521
|
+
|
|
522
|
+
def _find_kafka_topic(self, topic_name: str) -> Optional[Topic]:
|
|
523
|
+
"""
|
|
524
|
+
Find Kafka topic in OpenMetadata using Elasticsearch search
|
|
525
|
+
|
|
526
|
+
Handles topic names with dots (e.g., "dev.ern.cashout.moneyRequest_v1")
|
|
527
|
+
by searching with wildcard pattern: *.topic_name
|
|
528
|
+
|
|
529
|
+
Topic FQN format: MessagingServiceName.TopicName
|
|
530
|
+
When TopicName has dots, it's quoted: MessagingServiceName."dev.ern.topic"
|
|
531
|
+
"""
|
|
532
|
+
try:
|
|
533
|
+
logger.debug(
|
|
534
|
+
f"Searching for topic {topic_name} across all messaging services"
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
# Use ES search with wildcard pattern to find topic regardless of service
|
|
538
|
+
# Pattern: *.topic_name or *."topic.with.dots"
|
|
539
|
+
from metadata.utils.elasticsearch import ES_INDEX_MAP
|
|
540
|
+
|
|
541
|
+
# Quote the topic name if it contains dots
|
|
542
|
+
search_topic_name = f'"{topic_name}"' if "." in topic_name else topic_name
|
|
543
|
+
search_pattern = f"*.{search_topic_name}"
|
|
544
|
+
|
|
545
|
+
logger.debug(f"Using search pattern: {search_pattern}")
|
|
546
|
+
|
|
547
|
+
# Search using ES field query for FQN pattern matching
|
|
548
|
+
query_string = f"/search/fieldQuery?fieldName=fullyQualifiedName&fieldValue={search_pattern}&from=0&size=10&index={ES_INDEX_MAP['Topic']}&deleted=false"
|
|
549
|
+
|
|
550
|
+
try:
|
|
551
|
+
response = self.metadata.client.get(query_string)
|
|
552
|
+
if response and response.get("hits", {}).get("hits"):
|
|
553
|
+
# Get the first matching topic
|
|
554
|
+
hit = response["hits"]["hits"][0]
|
|
555
|
+
topic_fqn = hit["_source"]["fullyQualifiedName"]
|
|
556
|
+
|
|
557
|
+
# Fetch full topic entity
|
|
558
|
+
topic = self.metadata.get_by_name(entity=Topic, fqn=topic_fqn)
|
|
559
|
+
if topic:
|
|
560
|
+
logger.info(f"Found topic {topic_name} with FQN: {topic_fqn}")
|
|
561
|
+
return topic
|
|
562
|
+
except Exception as search_exc:
|
|
563
|
+
logger.debug(f"ES search error: {search_exc}")
|
|
564
|
+
logger.debug(traceback.format_exc())
|
|
565
|
+
|
|
566
|
+
except Exception as exc:
|
|
567
|
+
logger.debug(f"Could not find topic {topic_name}: {exc}")
|
|
568
|
+
logger.debug(traceback.format_exc())
|
|
569
|
+
|
|
570
|
+
logger.warning(
|
|
571
|
+
f"Topic {topic_name} not found in OpenMetadata. "
|
|
572
|
+
f"Ensure the topic is ingested from a messaging service."
|
|
573
|
+
)
|
|
574
|
+
return None
|
|
575
|
+
|
|
576
|
+
def _yield_kafka_lineage(
|
|
577
|
+
self, pipeline_details: DataBrickPipelineDetails, pipeline_entity: Pipeline
|
|
578
|
+
) -> Iterable[Either[AddLineageRequest]]:
|
|
579
|
+
"""
|
|
580
|
+
Extract and yield Kafka topic lineage from DLT pipeline source code
|
|
581
|
+
Only processes DLT pipelines (with pipeline_id), not regular jobs
|
|
582
|
+
Creates lineage: Kafka topic -> DLT table (with pipeline in lineageDetails)
|
|
583
|
+
"""
|
|
584
|
+
try:
|
|
585
|
+
logger.info("=" * 80)
|
|
586
|
+
logger.info(f"KAFKA LINEAGE EXTRACTION STARTED")
|
|
587
|
+
logger.info(
|
|
588
|
+
f"Pipeline: {pipeline_details.name if hasattr(pipeline_details, 'name') else 'N/A'}"
|
|
589
|
+
)
|
|
590
|
+
logger.info(f"Job ID: {pipeline_details.job_id}")
|
|
591
|
+
logger.info(f"Pipeline ID: {pipeline_details.pipeline_id}")
|
|
592
|
+
logger.info("=" * 80)
|
|
593
|
+
|
|
594
|
+
# Only process DLT pipelines - check for pipeline_id
|
|
595
|
+
# For pure DLT pipelines, pipeline_id is set directly
|
|
596
|
+
pipeline_id = pipeline_details.pipeline_id
|
|
597
|
+
|
|
598
|
+
# For jobs with DLT pipeline tasks, check settings
|
|
599
|
+
if not pipeline_id and pipeline_details.settings:
|
|
600
|
+
try:
|
|
601
|
+
tasks = pipeline_details.settings.tasks
|
|
602
|
+
logger.debug(
|
|
603
|
+
f"Checking for DLT pipeline in job {pipeline_details.job_id}: "
|
|
604
|
+
f"{len(tasks) if tasks else 0} tasks found"
|
|
605
|
+
)
|
|
606
|
+
|
|
607
|
+
if tasks:
|
|
608
|
+
for task in tasks:
|
|
609
|
+
logger.debug(
|
|
610
|
+
f"Task: {task.name}, has pipeline_task: {task.pipeline_task is not None}"
|
|
611
|
+
)
|
|
612
|
+
# Check for direct DLT pipeline task
|
|
613
|
+
if task.pipeline_task and task.pipeline_task.pipeline_id:
|
|
614
|
+
pipeline_id = task.pipeline_task.pipeline_id
|
|
615
|
+
logger.info(
|
|
616
|
+
f"✓ Found DLT pipeline_id from job task: {pipeline_id} for job {pipeline_details.job_id}"
|
|
617
|
+
)
|
|
618
|
+
break
|
|
619
|
+
except Exception as exc:
|
|
620
|
+
logger.debug(f"Error checking for pipeline tasks: {exc}")
|
|
621
|
+
logger.debug(traceback.format_exc())
|
|
622
|
+
|
|
623
|
+
# Only process if we have a DLT pipeline_id
|
|
624
|
+
if not pipeline_id:
|
|
625
|
+
logger.info(
|
|
626
|
+
f"⊗ No DLT pipeline_id found - skipping Kafka lineage extraction"
|
|
627
|
+
)
|
|
628
|
+
logger.info(f" Job ID: {pipeline_details.job_id}")
|
|
629
|
+
logger.info(f" Pipeline ID: {pipeline_details.pipeline_id}")
|
|
630
|
+
logger.info("=" * 80)
|
|
631
|
+
return
|
|
632
|
+
|
|
633
|
+
logger.info(f"✓ Processing Kafka lineage for DLT pipeline: {pipeline_id}")
|
|
634
|
+
|
|
635
|
+
# Get pipeline configuration and extract target catalog/schema
|
|
636
|
+
target_catalog = None
|
|
637
|
+
target_schema = None
|
|
638
|
+
notebook_paths = []
|
|
639
|
+
try:
|
|
640
|
+
logger.info(f"⟳ Fetching pipeline configuration for {pipeline_id}...")
|
|
641
|
+
pipeline_config = self.client.get_pipeline_details(pipeline_id)
|
|
642
|
+
if not pipeline_config:
|
|
643
|
+
logger.warning(
|
|
644
|
+
f"✗ Could not fetch pipeline config for {pipeline_id}"
|
|
645
|
+
)
|
|
646
|
+
logger.info("=" * 80)
|
|
647
|
+
return
|
|
648
|
+
|
|
649
|
+
logger.debug(f"✓ Pipeline config fetched successfully")
|
|
650
|
+
logger.debug(f" Config keys: {list(pipeline_config.keys())}")
|
|
651
|
+
|
|
652
|
+
# Extract spec for detailed configuration
|
|
653
|
+
spec = pipeline_config.get("spec", {})
|
|
654
|
+
logger.info(f"✓ Pipeline spec extracted")
|
|
655
|
+
logger.info(f" Spec keys: {list(spec.keys()) if spec else 'None'}")
|
|
656
|
+
|
|
657
|
+
# Extract target catalog and schema for DLT tables
|
|
658
|
+
target_catalog = spec.get("catalog") if spec else None
|
|
659
|
+
# Schema can be in 'target' or 'schema' field
|
|
660
|
+
target_schema = (
|
|
661
|
+
spec.get("target") or spec.get("schema") if spec else None
|
|
662
|
+
)
|
|
663
|
+
logger.info(f"✓ DLT Target Location:")
|
|
664
|
+
logger.info(f" Catalog: {target_catalog or 'NOT SET'}")
|
|
665
|
+
logger.info(f" Schema: {target_schema or 'NOT SET'}")
|
|
666
|
+
|
|
667
|
+
# Extract notebook/file paths from libraries in spec
|
|
668
|
+
notebook_paths = []
|
|
669
|
+
if spec and "libraries" in spec:
|
|
670
|
+
libraries = spec["libraries"]
|
|
671
|
+
logger.info(
|
|
672
|
+
f"⟳ Extracting notebook paths from {len(libraries)} libraries..."
|
|
673
|
+
)
|
|
674
|
+
for idx, lib in enumerate(libraries):
|
|
675
|
+
logger.debug(f" Library {idx + 1}: {lib}")
|
|
676
|
+
# Library can be dict or have different structures
|
|
677
|
+
if isinstance(lib, dict):
|
|
678
|
+
# Check for notebook path
|
|
679
|
+
if "notebook" in lib and lib["notebook"]:
|
|
680
|
+
notebook = lib["notebook"]
|
|
681
|
+
if isinstance(notebook, dict):
|
|
682
|
+
path = notebook.get("path")
|
|
683
|
+
else:
|
|
684
|
+
path = notebook
|
|
685
|
+
if path:
|
|
686
|
+
notebook_paths.append(path)
|
|
687
|
+
logger.info(f" ✓ Found notebook: {path}")
|
|
688
|
+
# Check for glob pattern
|
|
689
|
+
elif "glob" in lib and lib["glob"]:
|
|
690
|
+
glob_pattern = lib["glob"]
|
|
691
|
+
if isinstance(glob_pattern, dict):
|
|
692
|
+
include_pattern = glob_pattern.get("include")
|
|
693
|
+
if include_pattern:
|
|
694
|
+
# Convert glob pattern to directory path
|
|
695
|
+
# e.g., "/path/**" -> "/path/"
|
|
696
|
+
base_path = include_pattern.replace(
|
|
697
|
+
"/**", "/"
|
|
698
|
+
).replace("**", "")
|
|
699
|
+
notebook_paths.append(base_path)
|
|
700
|
+
logger.info(
|
|
701
|
+
f" ✓ Found glob pattern, using base path: {base_path}"
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
# Also check for source path in spec configuration
|
|
705
|
+
if not notebook_paths and spec:
|
|
706
|
+
source_path = None
|
|
707
|
+
|
|
708
|
+
# Check spec.configuration for source path
|
|
709
|
+
if "configuration" in spec:
|
|
710
|
+
config = spec["configuration"]
|
|
711
|
+
source_path = config.get("source_path") or config.get("source")
|
|
712
|
+
|
|
713
|
+
# Check development settings
|
|
714
|
+
if not source_path and "development" in spec:
|
|
715
|
+
source_path = spec["development"].get("source_path")
|
|
716
|
+
|
|
717
|
+
if source_path:
|
|
718
|
+
logger.info(
|
|
719
|
+
f" ✓ Found source_path in pipeline spec: {source_path}"
|
|
720
|
+
)
|
|
721
|
+
notebook_paths.append(source_path)
|
|
722
|
+
|
|
723
|
+
logger.info(f"✓ Total notebook paths found: {len(notebook_paths)}")
|
|
724
|
+
for idx, path in enumerate(notebook_paths):
|
|
725
|
+
logger.info(f" {idx + 1}. {path}")
|
|
726
|
+
except Exception as exc:
|
|
727
|
+
logger.error(
|
|
728
|
+
f"✗ Failed to fetch pipeline config for {pipeline_id}: {exc}"
|
|
729
|
+
)
|
|
730
|
+
logger.debug(traceback.format_exc())
|
|
731
|
+
logger.info("=" * 80)
|
|
732
|
+
return
|
|
733
|
+
|
|
734
|
+
if not notebook_paths:
|
|
735
|
+
logger.warning(f"✗ No notebook paths found for pipeline {pipeline_id}")
|
|
736
|
+
logger.info(
|
|
737
|
+
" Cannot extract Kafka lineage without notebook source code"
|
|
738
|
+
)
|
|
739
|
+
logger.info("=" * 80)
|
|
740
|
+
return
|
|
741
|
+
|
|
742
|
+
# Expand directories to individual notebook files
|
|
743
|
+
logger.info(f"⟳ Expanding directory paths to individual notebooks...")
|
|
744
|
+
expanded_paths = []
|
|
745
|
+
for path in notebook_paths:
|
|
746
|
+
# If path ends with /, it's a directory - list all notebooks in it
|
|
747
|
+
if path.endswith("/"):
|
|
748
|
+
try:
|
|
749
|
+
logger.debug(f" Listing directory: {path}")
|
|
750
|
+
# List workspace directory to get all notebooks
|
|
751
|
+
objects = self.client.list_workspace_objects(path)
|
|
752
|
+
if objects:
|
|
753
|
+
for obj in objects:
|
|
754
|
+
obj_type = obj.get("object_type")
|
|
755
|
+
if obj_type in ("NOTEBOOK", "FILE"):
|
|
756
|
+
notebook_path = obj.get("path")
|
|
757
|
+
if notebook_path:
|
|
758
|
+
expanded_paths.append(notebook_path)
|
|
759
|
+
logger.info(
|
|
760
|
+
f" ✓ Found {obj_type.lower()}: {notebook_path}"
|
|
761
|
+
)
|
|
762
|
+
if not expanded_paths:
|
|
763
|
+
logger.debug(f" ⊗ No notebooks found in directory {path}")
|
|
764
|
+
except Exception as exc:
|
|
765
|
+
logger.warning(f" ✗ Could not list directory {path}: {exc}")
|
|
766
|
+
logger.debug(traceback.format_exc())
|
|
767
|
+
else:
|
|
768
|
+
expanded_paths.append(path)
|
|
769
|
+
logger.debug(f" Direct path: {path}")
|
|
770
|
+
|
|
771
|
+
logger.info(f"✓ Total notebooks to process: {len(expanded_paths)}")
|
|
772
|
+
|
|
773
|
+
# Process each notebook to extract Kafka sources and DLT tables
|
|
774
|
+
logger.info("-" * 80)
|
|
775
|
+
logger.info(f"PROCESSING NOTEBOOKS FOR KAFKA LINEAGE")
|
|
776
|
+
logger.info("-" * 80)
|
|
777
|
+
|
|
778
|
+
for idx, lib_path in enumerate(expanded_paths, 1):
|
|
779
|
+
try:
|
|
780
|
+
logger.info(f"\n📓 Notebook {idx}/{len(expanded_paths)}: {lib_path}")
|
|
781
|
+
logger.info(f"⟳ Exporting notebook source code...")
|
|
782
|
+
|
|
783
|
+
source_code = self.client.export_notebook_source(lib_path)
|
|
784
|
+
if not source_code:
|
|
785
|
+
logger.warning(f"✗ Could not export source for {lib_path}")
|
|
786
|
+
continue
|
|
787
|
+
|
|
788
|
+
logger.info(
|
|
789
|
+
f"✓ Source code exported ({len(source_code)} characters)"
|
|
790
|
+
)
|
|
791
|
+
|
|
792
|
+
# Log full source code for debugging
|
|
793
|
+
logger.debug(f" ===== FULL NOTEBOOK SOURCE CODE =====")
|
|
794
|
+
for i, line in enumerate(source_code.split("\n"), 1):
|
|
795
|
+
logger.debug(f" {i:3d}: {line}")
|
|
796
|
+
logger.debug(f" ===== END OF SOURCE CODE =====")
|
|
797
|
+
|
|
798
|
+
# Extract Kafka topics
|
|
799
|
+
logger.info(f"⟳ Parsing Kafka sources from notebook...")
|
|
800
|
+
logger.debug(f" Looking for patterns:")
|
|
801
|
+
logger.debug(
|
|
802
|
+
f" - Kafka: .format('kafka')...option('subscribe', 'topic')"
|
|
803
|
+
)
|
|
804
|
+
logger.debug(f" - DLT: @dlt.table(name='table_name')")
|
|
805
|
+
kafka_sources = extract_kafka_sources(source_code)
|
|
806
|
+
if kafka_sources:
|
|
807
|
+
topics_found = [t for ks in kafka_sources for t in ks.topics]
|
|
808
|
+
logger.info(
|
|
809
|
+
f"✓ Found {len(kafka_sources)} Kafka source(s) with {len(topics_found)} topic(s):"
|
|
810
|
+
)
|
|
811
|
+
for ks_idx, ks in enumerate(kafka_sources, 1):
|
|
812
|
+
logger.info(f" Kafka Source {ks_idx}:")
|
|
813
|
+
logger.info(f" Topics: {ks.topics}")
|
|
814
|
+
logger.info(
|
|
815
|
+
f" Bootstrap Servers: {ks.bootstrap_servers or 'NOT SET'}"
|
|
816
|
+
)
|
|
817
|
+
logger.info(
|
|
818
|
+
f" Group ID Prefix: {ks.group_id_prefix or 'NOT SET'}"
|
|
819
|
+
)
|
|
820
|
+
else:
|
|
821
|
+
logger.info(f"⊗ No Kafka sources found in notebook")
|
|
822
|
+
|
|
823
|
+
# Extract DLT table dependencies
|
|
824
|
+
logger.info(f"⟳ Parsing DLT table dependencies from notebook...")
|
|
825
|
+
dlt_dependencies = extract_dlt_table_dependencies(source_code)
|
|
826
|
+
if dlt_dependencies:
|
|
827
|
+
logger.info(
|
|
828
|
+
f"✓ Found {len(dlt_dependencies)} DLT table(s) with dependencies"
|
|
829
|
+
)
|
|
830
|
+
for dep in dlt_dependencies:
|
|
831
|
+
s3_info = (
|
|
832
|
+
f", reads_from_s3={dep.reads_from_s3}, s3_locations={dep.s3_locations}"
|
|
833
|
+
if dep.reads_from_s3
|
|
834
|
+
else ""
|
|
835
|
+
)
|
|
836
|
+
logger.info(
|
|
837
|
+
f" - {dep.table_name}: depends_on={dep.depends_on}, "
|
|
838
|
+
f"reads_from_kafka={dep.reads_from_kafka}{s3_info}"
|
|
839
|
+
)
|
|
840
|
+
else:
|
|
841
|
+
logger.info(f"⊗ No DLT table dependencies found in notebook")
|
|
842
|
+
|
|
843
|
+
# Check if we have anything to process
|
|
844
|
+
has_kafka = kafka_sources and len(kafka_sources) > 0
|
|
845
|
+
has_s3 = any(dep.reads_from_s3 for dep in dlt_dependencies)
|
|
846
|
+
has_tables = dlt_dependencies and len(dlt_dependencies) > 0
|
|
847
|
+
|
|
848
|
+
if not dlt_dependencies:
|
|
849
|
+
logger.warning(
|
|
850
|
+
f"⊗ Skipping lineage for this notebook - no DLT tables found"
|
|
851
|
+
)
|
|
852
|
+
continue
|
|
853
|
+
|
|
854
|
+
if not has_kafka and not has_s3:
|
|
855
|
+
logger.info(
|
|
856
|
+
f"⊗ No external sources (Kafka or S3) found in this notebook - only table-to-table lineage will be created"
|
|
857
|
+
)
|
|
858
|
+
|
|
859
|
+
logger.info(f"✓ Notebook has DLT tables - creating lineage...")
|
|
860
|
+
if has_kafka:
|
|
861
|
+
logger.info(f" Kafka sources: {len(kafka_sources)}")
|
|
862
|
+
if has_s3:
|
|
863
|
+
s3_count = sum(
|
|
864
|
+
len(dep.s3_locations)
|
|
865
|
+
for dep in dlt_dependencies
|
|
866
|
+
if dep.reads_from_s3
|
|
867
|
+
)
|
|
868
|
+
logger.info(f" S3 sources: {s3_count} location(s)")
|
|
869
|
+
|
|
870
|
+
# Create lineage edges based on dependencies
|
|
871
|
+
logger.info(f"\n⟳ Creating lineage edges...")
|
|
872
|
+
lineage_created = 0
|
|
873
|
+
|
|
874
|
+
# Step 1: Create Kafka topic -> DLT table lineage
|
|
875
|
+
# Build a map to identify which tables/views read from external sources (Kafka/S3)
|
|
876
|
+
external_sources_map = {}
|
|
877
|
+
for dep in dlt_dependencies:
|
|
878
|
+
if dep.reads_from_kafka or dep.reads_from_s3:
|
|
879
|
+
external_sources_map[dep.table_name] = True
|
|
880
|
+
|
|
881
|
+
for kafka_config in kafka_sources:
|
|
882
|
+
for topic_name in kafka_config.topics:
|
|
883
|
+
try:
|
|
884
|
+
logger.info(
|
|
885
|
+
f"\n 🔍 Processing Kafka topic: {topic_name}"
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
kafka_topic = self._find_kafka_topic(topic_name)
|
|
889
|
+
if not kafka_topic:
|
|
890
|
+
logger.warning(
|
|
891
|
+
f" ✗ Kafka topic '{topic_name}' not found in OpenMetadata"
|
|
892
|
+
)
|
|
893
|
+
continue
|
|
894
|
+
|
|
895
|
+
logger.info(
|
|
896
|
+
f" ✓ Topic found: {kafka_topic.fullyQualifiedName.root if hasattr(kafka_topic.fullyQualifiedName, 'root') else kafka_topic.fullyQualifiedName}"
|
|
897
|
+
)
|
|
898
|
+
|
|
899
|
+
# Find tables that read directly from Kafka OR from an external source view
|
|
900
|
+
for dep in dlt_dependencies:
|
|
901
|
+
is_kafka_consumer = dep.reads_from_kafka or any(
|
|
902
|
+
src in external_sources_map
|
|
903
|
+
for src in dep.depends_on
|
|
904
|
+
)
|
|
905
|
+
|
|
906
|
+
if is_kafka_consumer:
|
|
907
|
+
logger.info(
|
|
908
|
+
f" 🔍 Processing table: {dep.table_name}"
|
|
909
|
+
)
|
|
910
|
+
|
|
911
|
+
target_table = self._find_dlt_table(
|
|
912
|
+
table_name=dep.table_name,
|
|
913
|
+
catalog=target_catalog,
|
|
914
|
+
schema=target_schema,
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
if target_table:
|
|
918
|
+
table_fqn = (
|
|
919
|
+
target_table.fullyQualifiedName.root
|
|
920
|
+
if hasattr(
|
|
921
|
+
target_table.fullyQualifiedName,
|
|
922
|
+
"root",
|
|
923
|
+
)
|
|
924
|
+
else target_table.fullyQualifiedName
|
|
925
|
+
)
|
|
926
|
+
logger.info(
|
|
927
|
+
f" ✅ Creating lineage: {topic_name} -> {table_fqn}"
|
|
928
|
+
)
|
|
929
|
+
|
|
930
|
+
yield Either(
|
|
931
|
+
right=AddLineageRequest(
|
|
932
|
+
edge=EntitiesEdge(
|
|
933
|
+
fromEntity=EntityReference(
|
|
934
|
+
id=kafka_topic.id,
|
|
935
|
+
type="topic",
|
|
936
|
+
),
|
|
937
|
+
toEntity=EntityReference(
|
|
938
|
+
id=target_table.id.root
|
|
939
|
+
if hasattr(
|
|
940
|
+
target_table.id, "root"
|
|
941
|
+
)
|
|
942
|
+
else target_table.id,
|
|
943
|
+
type="table",
|
|
944
|
+
),
|
|
945
|
+
lineageDetails=LineageDetails(
|
|
946
|
+
pipeline=EntityReference(
|
|
947
|
+
id=pipeline_entity.id.root,
|
|
948
|
+
type="pipeline",
|
|
949
|
+
),
|
|
950
|
+
source=LineageSource.PipelineLineage,
|
|
951
|
+
),
|
|
952
|
+
)
|
|
953
|
+
)
|
|
954
|
+
)
|
|
955
|
+
lineage_created += 1
|
|
956
|
+
else:
|
|
957
|
+
logger.warning(
|
|
958
|
+
f" ✗ Table '{dep.table_name}' not found"
|
|
959
|
+
)
|
|
960
|
+
|
|
961
|
+
except Exception as exc:
|
|
962
|
+
logger.error(
|
|
963
|
+
f" ✗ Failed to process topic {topic_name}: {exc}"
|
|
964
|
+
)
|
|
965
|
+
logger.debug(traceback.format_exc())
|
|
966
|
+
continue
|
|
967
|
+
|
|
968
|
+
# Step 2: Create table-to-table lineage for downstream dependencies
|
|
969
|
+
for dep in dlt_dependencies:
|
|
970
|
+
if dep.depends_on:
|
|
971
|
+
for source_table_name in dep.depends_on:
|
|
972
|
+
try:
|
|
973
|
+
logger.info(
|
|
974
|
+
f"\n 🔍 Processing table dependency: {source_table_name} -> {dep.table_name}"
|
|
975
|
+
)
|
|
976
|
+
|
|
977
|
+
# Check if source is a view/table that reads from S3
|
|
978
|
+
source_dep = next(
|
|
979
|
+
(
|
|
980
|
+
d
|
|
981
|
+
for d in dlt_dependencies
|
|
982
|
+
if d.table_name == source_table_name
|
|
983
|
+
),
|
|
984
|
+
None,
|
|
985
|
+
)
|
|
986
|
+
|
|
987
|
+
# If source reads from S3, create container → table lineage
|
|
988
|
+
if (
|
|
989
|
+
source_dep
|
|
990
|
+
and source_dep.reads_from_s3
|
|
991
|
+
and source_dep.s3_locations
|
|
992
|
+
):
|
|
993
|
+
target_table = self._find_dlt_table(
|
|
994
|
+
table_name=dep.table_name,
|
|
995
|
+
catalog=target_catalog,
|
|
996
|
+
schema=target_schema,
|
|
997
|
+
)
|
|
998
|
+
|
|
999
|
+
if target_table:
|
|
1000
|
+
for s3_location in source_dep.s3_locations:
|
|
1001
|
+
logger.info(
|
|
1002
|
+
f" 🔍 Looking for S3 container: {s3_location}"
|
|
1003
|
+
)
|
|
1004
|
+
# Search for container by S3 path
|
|
1005
|
+
storage_location = s3_location.rstrip(
|
|
1006
|
+
"/"
|
|
1007
|
+
)
|
|
1008
|
+
container_entity = self.metadata.es_search_container_by_path(
|
|
1009
|
+
full_path=storage_location
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
if (
|
|
1013
|
+
container_entity
|
|
1014
|
+
and container_entity[0]
|
|
1015
|
+
):
|
|
1016
|
+
logger.info(
|
|
1017
|
+
f" ✅ Creating lineage: {container_entity[0].fullyQualifiedName.root if hasattr(container_entity[0].fullyQualifiedName, 'root') else container_entity[0].fullyQualifiedName} -> {target_table.fullyQualifiedName.root if hasattr(target_table.fullyQualifiedName, 'root') else target_table.fullyQualifiedName}"
|
|
1018
|
+
)
|
|
1019
|
+
|
|
1020
|
+
yield Either(
|
|
1021
|
+
right=AddLineageRequest(
|
|
1022
|
+
edge=EntitiesEdge(
|
|
1023
|
+
fromEntity=EntityReference(
|
|
1024
|
+
id=container_entity[
|
|
1025
|
+
0
|
|
1026
|
+
].id,
|
|
1027
|
+
type="container",
|
|
1028
|
+
),
|
|
1029
|
+
toEntity=EntityReference(
|
|
1030
|
+
id=target_table.id.root
|
|
1031
|
+
if hasattr(
|
|
1032
|
+
target_table.id,
|
|
1033
|
+
"root",
|
|
1034
|
+
)
|
|
1035
|
+
else target_table.id,
|
|
1036
|
+
type="table",
|
|
1037
|
+
),
|
|
1038
|
+
lineageDetails=LineageDetails(
|
|
1039
|
+
pipeline=EntityReference(
|
|
1040
|
+
id=pipeline_entity.id.root,
|
|
1041
|
+
type="pipeline",
|
|
1042
|
+
),
|
|
1043
|
+
source=LineageSource.PipelineLineage,
|
|
1044
|
+
),
|
|
1045
|
+
)
|
|
1046
|
+
)
|
|
1047
|
+
)
|
|
1048
|
+
lineage_created += 1
|
|
1049
|
+
else:
|
|
1050
|
+
logger.warning(
|
|
1051
|
+
f" ✗ S3 container not found for path: {storage_location}"
|
|
1052
|
+
)
|
|
1053
|
+
logger.info(
|
|
1054
|
+
f" Make sure the S3 container is ingested in OpenMetadata"
|
|
1055
|
+
)
|
|
1056
|
+
else:
|
|
1057
|
+
logger.warning(
|
|
1058
|
+
f" ✗ Target table '{dep.table_name}' not found"
|
|
1059
|
+
)
|
|
1060
|
+
continue
|
|
1061
|
+
|
|
1062
|
+
# Otherwise, create table → table lineage
|
|
1063
|
+
source_table = self._find_dlt_table(
|
|
1064
|
+
table_name=source_table_name,
|
|
1065
|
+
catalog=target_catalog,
|
|
1066
|
+
schema=target_schema,
|
|
1067
|
+
)
|
|
1068
|
+
target_table = self._find_dlt_table(
|
|
1069
|
+
table_name=dep.table_name,
|
|
1070
|
+
catalog=target_catalog,
|
|
1071
|
+
schema=target_schema,
|
|
1072
|
+
)
|
|
1073
|
+
|
|
1074
|
+
if source_table and target_table:
|
|
1075
|
+
source_fqn = (
|
|
1076
|
+
source_table.fullyQualifiedName.root
|
|
1077
|
+
if hasattr(
|
|
1078
|
+
source_table.fullyQualifiedName, "root"
|
|
1079
|
+
)
|
|
1080
|
+
else source_table.fullyQualifiedName
|
|
1081
|
+
)
|
|
1082
|
+
target_fqn = (
|
|
1083
|
+
target_table.fullyQualifiedName.root
|
|
1084
|
+
if hasattr(
|
|
1085
|
+
target_table.fullyQualifiedName, "root"
|
|
1086
|
+
)
|
|
1087
|
+
else target_table.fullyQualifiedName
|
|
1088
|
+
)
|
|
1089
|
+
logger.info(
|
|
1090
|
+
f" ✅ Creating lineage: {source_fqn} -> {target_fqn}"
|
|
1091
|
+
)
|
|
1092
|
+
|
|
1093
|
+
yield Either(
|
|
1094
|
+
right=AddLineageRequest(
|
|
1095
|
+
edge=EntitiesEdge(
|
|
1096
|
+
fromEntity=EntityReference(
|
|
1097
|
+
id=source_table.id.root
|
|
1098
|
+
if hasattr(
|
|
1099
|
+
source_table.id, "root"
|
|
1100
|
+
)
|
|
1101
|
+
else source_table.id,
|
|
1102
|
+
type="table",
|
|
1103
|
+
),
|
|
1104
|
+
toEntity=EntityReference(
|
|
1105
|
+
id=target_table.id.root
|
|
1106
|
+
if hasattr(
|
|
1107
|
+
target_table.id, "root"
|
|
1108
|
+
)
|
|
1109
|
+
else target_table.id,
|
|
1110
|
+
type="table",
|
|
1111
|
+
),
|
|
1112
|
+
lineageDetails=LineageDetails(
|
|
1113
|
+
pipeline=EntityReference(
|
|
1114
|
+
id=pipeline_entity.id.root,
|
|
1115
|
+
type="pipeline",
|
|
1116
|
+
),
|
|
1117
|
+
source=LineageSource.PipelineLineage,
|
|
1118
|
+
),
|
|
1119
|
+
)
|
|
1120
|
+
)
|
|
1121
|
+
)
|
|
1122
|
+
lineage_created += 1
|
|
1123
|
+
else:
|
|
1124
|
+
if not source_table:
|
|
1125
|
+
logger.warning(
|
|
1126
|
+
f" ✗ Source table '{source_table_name}' not found"
|
|
1127
|
+
)
|
|
1128
|
+
if not target_table:
|
|
1129
|
+
logger.warning(
|
|
1130
|
+
f" ✗ Target table '{dep.table_name}' not found"
|
|
1131
|
+
)
|
|
1132
|
+
|
|
1133
|
+
except Exception as exc:
|
|
1134
|
+
logger.error(
|
|
1135
|
+
f" ✗ Failed to process dependency {source_table_name} -> {dep.table_name}: {exc}"
|
|
1136
|
+
)
|
|
1137
|
+
logger.debug(traceback.format_exc())
|
|
1138
|
+
continue
|
|
1139
|
+
|
|
1140
|
+
logger.info(
|
|
1141
|
+
f"\n✓ Lineage edges created for this notebook: {lineage_created}"
|
|
1142
|
+
)
|
|
1143
|
+
except Exception as exc:
|
|
1144
|
+
logger.error(f"✗ Failed to process notebook {lib_path}: {exc}")
|
|
1145
|
+
logger.debug(traceback.format_exc())
|
|
1146
|
+
logger.info(f" Continuing with next notebook...")
|
|
1147
|
+
continue
|
|
1148
|
+
|
|
1149
|
+
logger.info("\n" + "=" * 80)
|
|
1150
|
+
logger.info(f"KAFKA LINEAGE EXTRACTION COMPLETED")
|
|
1151
|
+
logger.info(
|
|
1152
|
+
f"Pipeline: {pipeline_details.name if hasattr(pipeline_details, 'name') else 'N/A'}"
|
|
1153
|
+
)
|
|
1154
|
+
logger.info("=" * 80)
|
|
1155
|
+
|
|
1156
|
+
except Exception as exc:
|
|
1157
|
+
logger.error(f"✗ Unexpected error in Kafka lineage extraction: {exc}")
|
|
1158
|
+
logger.error(f" Job ID: {pipeline_details.job_id}")
|
|
1159
|
+
logger.error(
|
|
1160
|
+
f" Pipeline ID: {pipeline_details.pipeline_id if hasattr(pipeline_details, 'pipeline_id') else 'N/A'}"
|
|
1161
|
+
)
|
|
1162
|
+
logger.debug(traceback.format_exc())
|
|
1163
|
+
logger.info("=" * 80)
|
|
1164
|
+
|
|
303
1165
|
def yield_pipeline_lineage_details(
|
|
304
1166
|
self, pipeline_details: DataBrickPipelineDetails
|
|
305
1167
|
) -> Iterable[Either[AddLineageRequest]]:
|
|
@@ -315,6 +1177,13 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
315
1177
|
entity=Pipeline, fqn=pipeline_fqn
|
|
316
1178
|
)
|
|
317
1179
|
|
|
1180
|
+
# Extract Kafka topic lineage from source code
|
|
1181
|
+
# Works automatically - no configuration required!
|
|
1182
|
+
yield from self._yield_kafka_lineage(pipeline_details, pipeline_entity)
|
|
1183
|
+
|
|
1184
|
+
if not pipeline_details.job_id:
|
|
1185
|
+
return
|
|
1186
|
+
|
|
318
1187
|
table_lineage_list = self.client.get_table_lineage(
|
|
319
1188
|
job_id=pipeline_details.job_id
|
|
320
1189
|
)
|
|
@@ -409,7 +1278,7 @@ class DatabrickspipelineSource(PipelineServiceSource):
|
|
|
409
1278
|
except Exception as exc:
|
|
410
1279
|
yield Either(
|
|
411
1280
|
left=StackTraceError(
|
|
412
|
-
name=pipeline_details.
|
|
1281
|
+
name=pipeline_details.id,
|
|
413
1282
|
error=f"Wild error ingesting pipeline lineage {pipeline_details} - {exc}",
|
|
414
1283
|
stackTrace=traceback.format_exc(),
|
|
415
1284
|
)
|