diff --git a/catalog-rest-service/src/main/resources/json/schema/entity/services/pipelineService.json b/catalog-rest-service/src/main/resources/json/schema/entity/services/pipelineService.json index 80faa472fa3..489da262611 100644 --- a/catalog-rest-service/src/main/resources/json/schema/entity/services/pipelineService.json +++ b/catalog-rest-service/src/main/resources/json/schema/entity/services/pipelineService.json @@ -8,7 +8,7 @@ "pipelineServiceType": { "description": "Type of pipeline service - Airflow or Prefect.", "type": "string", - "enum": ["Airflow", "Prefect", "Glue"], + "enum": ["Airflow", "Prefect", "Glue", "Generic"], "javaEnums": [ { "name": "Airflow" @@ -18,6 +18,9 @@ }, { "name": "Glue" + }, + { + "name": "Generic" } ] } diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx index c56f399dbe4..d90bfaf3e1f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx @@ -32,17 +32,21 @@ import React, { import { ONLY_NUMBER_REGEX } from '../../../constants/constants'; import { serviceTypes } from '../../../constants/services.const'; import { - DashboardServiceType, - MessagingServiceType, + // DashboardServiceType, + // MessagingServiceType, ServiceCategory, } from '../../../enums/service.enum'; import { CreateAirflowPipeline, Schema, } from '../../../generated/api/operations/pipelines/createAirflowPipeline'; +import { DashboardServiceType } from '../../../generated/entity/services/dashboardService'; // import { DashboardService } from '../../../generated/entity/services/dashboardService'; import { DatabaseService } from '../../../generated/entity/services/databaseService'; -import { MessagingService } from '../../../generated/entity/services/messagingService'; +import { + MessagingService, + MessagingServiceType, +} from '../../../generated/entity/services/messagingService'; import { PipelineService } from '../../../generated/entity/services/pipelineService'; import { PipelineType } from '../../../generated/operations/pipelines/airflowPipeline'; import { @@ -335,7 +339,7 @@ export const AddServiceModal: FunctionComponent = ({ const markdownRef = useRef(); const getBrokerUrlPlaceholder = (): string => { - return selectService === MessagingServiceType.PULSAR + return selectService === MessagingServiceType.Pulsar ? 'hostname:port' : 'hostname1:port1, hostname2:port2'; }; @@ -460,7 +464,7 @@ export const AddServiceModal: FunctionComponent = ({ dataObj = { ...dataObj, brokers: - selectService === MessagingServiceType.PULSAR + selectService === MessagingServiceType.Pulsar ? [brokers] : brokers.split(',').map((broker) => broker.trim()), schemaRegistry: schemaRegistry, @@ -471,7 +475,7 @@ export const AddServiceModal: FunctionComponent = ({ case ServiceCategory.DASHBOARD_SERVICES: { switch (selectService) { - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: { dataObj = { ...dataObj, @@ -482,7 +486,7 @@ export const AddServiceModal: FunctionComponent = ({ } break; - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: { dataObj = { ...dataObj, @@ -638,7 +642,7 @@ export const AddServiceModal: FunctionComponent = ({ case ServiceCategory.DASHBOARD_SERVICES: { switch (selectService) { - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: { setMsg = { ...setMsg, @@ -650,7 +654,7 @@ export const AddServiceModal: FunctionComponent = ({ isValid = Boolean(dashboardUrl && apiKey); break; - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: { setMsg = { ...setMsg, @@ -1010,7 +1014,7 @@ export const AddServiceModal: FunctionComponent = ({ const getDashboardFields = (): JSX.Element => { let elemFields: JSX.Element; switch (selectService) { - case DashboardServiceType.REDASH: { + case DashboardServiceType.Redash: { elemFields = ( <> @@ -1048,7 +1052,7 @@ export const AddServiceModal: FunctionComponent = ({ break; } - case DashboardServiceType.TABLEAU: { + case DashboardServiceType.Tableau: { elemFields = ( <> @@ -1358,7 +1362,7 @@ export const AddServiceModal: FunctionComponent = ({ case ServiceCategory.DASHBOARD_SERVICES: switch (selectService) { - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: data = [ { key: 'Dashboard Url', @@ -1394,7 +1398,7 @@ export const AddServiceModal: FunctionComponent = ({ break; - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: data = [ { key: 'Site Name', diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ServiceConfig/ServiceConfig.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ServiceConfig/ServiceConfig.tsx index 2068c167bfc..862f596aaac 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ServiceConfig/ServiceConfig.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ServiceConfig/ServiceConfig.tsx @@ -3,10 +3,12 @@ import { ServicesData } from 'Models'; import React, { useState } from 'react'; import { ONLY_NUMBER_REGEX } from '../../constants/constants'; import { - DashboardServiceType, - MessagingServiceType, + // DashboardServiceType, + // MessagingServiceType, ServiceCategory, } from '../../enums/service.enum'; +import { DashboardServiceType } from '../../generated/entity/services/dashboardService'; +import { MessagingServiceType } from '../../generated/entity/services/messagingService'; import useToastContext from '../../hooks/useToastContext'; import { errorMsg, requiredField } from '../../utils/CommonUtils'; import { @@ -118,7 +120,7 @@ const ServiceConfig = ({ const [env, setEnv] = useState(data?.env || ''); const getBrokerUrlPlaceholder = (): string => { - return data?.serviceType === MessagingServiceType.PULSAR + return data?.serviceType === MessagingServiceType.Pulsar ? 'hostname:port' : 'hostname1:port1, hostname2:port2'; }; @@ -215,7 +217,7 @@ const ServiceConfig = ({ case ServiceCategory.DASHBOARD_SERVICES: { switch (data?.serviceType) { - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: setShowErrorMsg({ ...showErrorMsg, dashboardUrl: !dashboardUrl, @@ -224,7 +226,7 @@ const ServiceConfig = ({ return Boolean(dashboardUrl && apiKey); - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: setShowErrorMsg({ ...showErrorMsg, dashboardUrl: !dashboardUrl, @@ -286,14 +288,14 @@ const ServiceConfig = ({ return { ...data, brokers: - data?.serviceType === MessagingServiceType.PULSAR + data?.serviceType === MessagingServiceType.Pulsar ? [brokers] : brokers.split(',').map((broker) => broker.trim()), schemaRegistry: schemaRegistry, }; case ServiceCategory.DASHBOARD_SERVICES: { switch (data?.serviceType) { - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: return { ...data, dashboardUrl: dashboardUrl, @@ -301,7 +303,7 @@ const ServiceConfig = ({ api_key: apiKey, }; - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: return { ...data, dashboardUrl: dashboardUrl, @@ -742,7 +744,7 @@ const ServiceConfig = ({ const getDashboardFields = (): JSX.Element => { let elemFields: JSX.Element; switch (data?.serviceType) { - case DashboardServiceType.REDASH: { + case DashboardServiceType.Redash: { elemFields = ( <> @@ -794,7 +796,7 @@ const ServiceConfig = ({ break; } - case DashboardServiceType.TABLEAU: { + case DashboardServiceType.Tableau: { elemFields = ( <> diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts b/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts index d1a1d5a1195..a56a6cd80ed 100644 --- a/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts +++ b/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts @@ -16,7 +16,7 @@ import noDataFound from '../assets/img/no-data-placeholder.png'; import noService from '../assets/img/no-service.png'; import airflow from '../assets/img/service-icon-airflow.png'; import athena from '../assets/img/service-icon-athena.png'; -import serviceDefault from '../assets/img/service-icon-generic.png'; +import databaseDefault from '../assets/img/service-icon-generic.png'; import glue from '../assets/img/service-icon-glue.png'; import hive from '../assets/img/service-icon-hive.png'; import kafka from '../assets/img/service-icon-kafka.png'; @@ -38,7 +38,14 @@ import superset from '../assets/img/service-icon-superset.png'; import tableau from '../assets/img/service-icon-tableau.png'; import trino from '../assets/img/service-icon-trino.png'; import vertica from '../assets/img/service-icon-vertica.png'; +import dashboardDefault from '../assets/svg/dashboard.svg'; +import pipelineDefault from '../assets/svg/pipeline.svg'; import plus from '../assets/svg/plus.svg'; +import topicDefault from '../assets/svg/topic.svg'; +import { DashboardServiceType } from '../generated/entity/services/dashboardService'; +import { DatabaseServiceType } from '../generated/entity/services/databaseService'; +import { MessagingServiceType } from '../generated/entity/services/messagingService'; +import { PipelineServiceType } from '../generated/entity/services/pipelineService'; export const NoDataFoundPlaceHolder = noDataFound; export const MYSQL = mysql; @@ -65,31 +72,19 @@ export const METABASE = metabase; export const AIRFLOW = airflow; export const PREFECT = prefect; -export const SERVICE_DEFAULT = serviceDefault; +export const DATABASE_DEFAULT = databaseDefault; +export const TOPIC_DEFAULT = topicDefault; +export const DASHBOARD_DEFAULT = dashboardDefault; +export const PIPELINE_DEFAULT = pipelineDefault; export const PLUS = plus; export const NOSERVICE = noService; export const serviceTypes: Record> = { - databaseServices: [ - 'BigQuery', - 'MySQL', - 'Redshift', - 'Snowflake', - 'Postgres', - 'MSSQL', - 'Hive', - 'Oracle', - 'Athena', - 'Presto', - 'Trino', - 'Glue', - 'MariaDB', - 'Vertica', - ], - messagingServices: ['Kafka'], - dashboardServices: ['Superset', 'Looker', 'Tableau', 'Redash', 'Metabase'], - pipelineServices: ['Airflow', 'Prefect', 'Glue'], + databaseServices: Object.values(DatabaseServiceType), + messagingServices: Object.values(MessagingServiceType), + dashboardServices: Object.values(DashboardServiceType), + pipelineServices: Object.values(PipelineServiceType), }; export const arrServiceTypes: Array = [ diff --git a/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts b/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts index 442fe6a470c..2fe58b931ce 100644 --- a/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts +++ b/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts @@ -18,41 +18,6 @@ export enum ServiceCategory { PIPELINE_SERVICES = 'pipelineServices', } -export enum DatabaseServiceType { - MYSQL = 'MySQL', - REDSHIFT = 'Redshift', - BIGQUERY = 'BigQuery', - HIVE = 'Hive', - POSTGRES = 'Postgres', - ORACLE = 'Oracle', - SNOWFLAKE = 'Snowflake', - MSSQL = 'MSSQL', - ATHENA = 'Athena', - PRESTO = 'Presto', - TRINO = 'Trino', - GLUE = 'Glue', - MARIADB = 'MariaDB', - VERTICA = 'Vertica', -} - -export enum MessagingServiceType { - KAFKA = 'Kafka', - PULSAR = 'Pulsar', -} - -export enum DashboardServiceType { - SUPERSET = 'Superset', - LOOKER = 'Looker', - TABLEAU = 'Tableau', - REDASH = 'Redash', - METABASE = 'Metabase', -} - -export enum PipelineServiceType { - AIRFLOW = 'Airflow', - PREFECT = 'Prefect', -} - export enum IngestionType { BIGQUERY = 'bigquery', BIGQUERY_USAGE = 'bigquery-usage', diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/api/services/createPipelineService.ts b/openmetadata-ui/src/main/resources/ui/src/generated/api/services/createPipelineService.ts index 95e986ca365..c586e056568 100644 --- a/openmetadata-ui/src/main/resources/ui/src/generated/api/services/createPipelineService.ts +++ b/openmetadata-ui/src/main/resources/ui/src/generated/api/services/createPipelineService.ts @@ -98,6 +98,7 @@ export interface EntityReference { */ export enum PipelineServiceType { Airflow = 'Airflow', + Generic = 'Generic', Glue = 'Glue', Prefect = 'Prefect', } diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/data/pipeline.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/data/pipeline.ts index 37e1c15d74c..fb36d5ea10f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/data/pipeline.ts +++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/data/pipeline.ts @@ -195,6 +195,7 @@ export interface EntityReference { */ export enum PipelineServiceType { Airflow = 'Airflow', + Generic = 'Generic', Glue = 'Glue', Prefect = 'Prefect', } diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/pipelineService.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/pipelineService.ts index a410db6c0c1..471395ac563 100644 --- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/pipelineService.ts +++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/pipelineService.ts @@ -178,6 +178,7 @@ export interface EntityReference { */ export enum PipelineServiceType { Airflow = 'Airflow', + Generic = 'Generic', Glue = 'Glue', Prefect = 'Prefect', } diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx index 8f2974efdba..b116d00fd07 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx @@ -269,7 +269,9 @@ const ServicesPage = () => { data.status === 'rejected' && showToast({ variant: 'error', - body: data.reason || 'Something went wrong!', + body: + data.reason?.response?.data?.message || + 'Something went wrong!', }); }); setIsModalOpen(false); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.ts index fc8bfdb2662..472f301615f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.ts @@ -28,6 +28,8 @@ import { arrServiceTypes, ATHENA, BIGQUERY, + DASHBOARD_DEFAULT, + DATABASE_DEFAULT, GLUE, HIVE, KAFKA, @@ -37,6 +39,7 @@ import { MSSQL, MYSQL, ORACLE, + PIPELINE_DEFAULT, POSTGRES, PREFECT, PRESTO, @@ -44,96 +47,105 @@ import { REDASH, REDSHIFT, serviceTypes, - SERVICE_DEFAULT, SNOWFLAKE, SUPERSET, TABLEAU, + TOPIC_DEFAULT, TRINO, VERTICA, } from '../constants/services.const'; -import { - DashboardServiceType, - DatabaseServiceType, - IngestionType, - MessagingServiceType, - PipelineServiceType, - ServiceCategory, -} from '../enums/service.enum'; +import { IngestionType, ServiceCategory } from '../enums/service.enum'; +import { DashboardServiceType } from '../generated/entity/services/dashboardService'; +import { DatabaseServiceType } from '../generated/entity/services/databaseService'; +import { MessagingServiceType } from '../generated/entity/services/messagingService'; +import { PipelineServiceType } from '../generated/entity/services/pipelineService'; import { PipelineType } from '../generated/operations/pipelines/airflowPipeline'; import { ApiData } from '../pages/services'; export const serviceTypeLogo = (type: string) => { switch (type) { - case DatabaseServiceType.MYSQL: + case DatabaseServiceType.MySQL: return MYSQL; - case DatabaseServiceType.REDSHIFT: + case DatabaseServiceType.Redshift: return REDSHIFT; - case DatabaseServiceType.BIGQUERY: + case DatabaseServiceType.BigQuery: return BIGQUERY; - case DatabaseServiceType.HIVE: + case DatabaseServiceType.Hive: return HIVE; - case DatabaseServiceType.POSTGRES: + case DatabaseServiceType.Postgres: return POSTGRES; - case DatabaseServiceType.ORACLE: + case DatabaseServiceType.Oracle: return ORACLE; - case DatabaseServiceType.SNOWFLAKE: + case DatabaseServiceType.Snowflake: return SNOWFLAKE; - case DatabaseServiceType.MSSQL: + case DatabaseServiceType.Mssql: return MSSQL; - case DatabaseServiceType.ATHENA: + case DatabaseServiceType.Athena: return ATHENA; - case DatabaseServiceType.PRESTO: + case DatabaseServiceType.Presto: return PRESTO; - case DatabaseServiceType.TRINO: + case DatabaseServiceType.Trino: return TRINO; - case DatabaseServiceType.GLUE: + case DatabaseServiceType.Glue: return GLUE; - case DatabaseServiceType.MARIADB: + case DatabaseServiceType.MariaDB: return MARIADB; - case DatabaseServiceType.VERTICA: + case DatabaseServiceType.Vertica: return VERTICA; - case MessagingServiceType.KAFKA: + case MessagingServiceType.Kafka: return KAFKA; - case MessagingServiceType.PULSAR: + case MessagingServiceType.Pulsar: return PULSAR; - case DashboardServiceType.SUPERSET: + case DashboardServiceType.Superset: return SUPERSET; - case DashboardServiceType.LOOKER: + case DashboardServiceType.Looker: return LOOKER; - case DashboardServiceType.TABLEAU: + case DashboardServiceType.Tableau: return TABLEAU; - case DashboardServiceType.REDASH: + case DashboardServiceType.Redash: return REDASH; - case DashboardServiceType.METABASE: + case DashboardServiceType.Metabase: return METABASE; - case PipelineServiceType.AIRFLOW: + case PipelineServiceType.Airflow: return AIRFLOW; - case PipelineServiceType.PREFECT: + case PipelineServiceType.Prefect: return PREFECT; - default: - return SERVICE_DEFAULT; + default: { + let logo; + if (serviceTypes.messagingServices.includes(type)) { + logo = TOPIC_DEFAULT; + } else if (serviceTypes.dashboardServices.includes(type)) { + logo = DASHBOARD_DEFAULT; + } else if (serviceTypes.pipelineServices.includes(type)) { + logo = PIPELINE_DEFAULT; + } else if (serviceTypes.databaseServices.includes(type)) { + logo = DATABASE_DEFAULT; + } + + return logo; + } } }; @@ -254,44 +266,14 @@ export const getEntityCountByService = (buckets: Array) => { pipelineCount: 0, }; buckets?.forEach((bucket) => { - switch (bucket.key) { - case DatabaseServiceType.ATHENA: - case DatabaseServiceType.BIGQUERY: - case DatabaseServiceType.HIVE: - case DatabaseServiceType.MSSQL: - case DatabaseServiceType.MYSQL: - case DatabaseServiceType.ORACLE: - case DatabaseServiceType.POSTGRES: - case DatabaseServiceType.PRESTO: - case DatabaseServiceType.TRINO: - case DatabaseServiceType.GLUE: - case DatabaseServiceType.MARIADB: - case DatabaseServiceType.VERTICA: - case DatabaseServiceType.REDSHIFT: - case DatabaseServiceType.SNOWFLAKE: - entityCounts.tableCount += bucket.doc_count; - - break; - case MessagingServiceType.KAFKA: - case MessagingServiceType.PULSAR: - entityCounts.topicCount += bucket.doc_count; - - break; - case DashboardServiceType.SUPERSET: - case DashboardServiceType.LOOKER: - case DashboardServiceType.TABLEAU: - case DashboardServiceType.REDASH: - case DashboardServiceType.METABASE: - entityCounts.dashboardCount += bucket.doc_count; - - break; - case PipelineServiceType.AIRFLOW: - case PipelineServiceType.PREFECT: - entityCounts.pipelineCount += bucket.doc_count; - - break; - default: - break; + if (serviceTypes.databaseServices.includes(bucket.key)) { + entityCounts.tableCount += bucket.doc_count; + } else if (serviceTypes.messagingServices.includes(bucket.key)) { + entityCounts.topicCount += bucket.doc_count; + } else if (serviceTypes.dashboardServices.includes(bucket.key)) { + entityCounts.dashboardCount += bucket.doc_count; + } else if (serviceTypes.pipelineServices.includes(bucket.key)) { + entityCounts.pipelineCount += bucket.doc_count; } }); @@ -313,52 +295,52 @@ export const getIngestionTypeList = ( ): Array | undefined => { let ingestionType: Array | undefined; switch (serviceType) { - case DatabaseServiceType.BIGQUERY: + case DatabaseServiceType.BigQuery: ingestionType = onlyMetaData ? [IngestionType.BIGQUERY] : [IngestionType.BIGQUERY, IngestionType.BIGQUERY_USAGE]; break; - case DatabaseServiceType.HIVE: + case DatabaseServiceType.Hive: ingestionType = [IngestionType.HIVE]; break; - case DatabaseServiceType.MSSQL: + case DatabaseServiceType.Mssql: ingestionType = [IngestionType.MSSQL]; break; - case DatabaseServiceType.MYSQL: + case DatabaseServiceType.MySQL: ingestionType = [IngestionType.MYSQL]; break; - case DatabaseServiceType.POSTGRES: + case DatabaseServiceType.Postgres: ingestionType = [IngestionType.POSTGRES]; break; - case DatabaseServiceType.REDSHIFT: + case DatabaseServiceType.Redshift: ingestionType = onlyMetaData ? [IngestionType.REDSHIFT] : [IngestionType.REDSHIFT, IngestionType.REDSHIFT_USAGE]; break; - case DatabaseServiceType.TRINO: + case DatabaseServiceType.Trino: ingestionType = [IngestionType.TRINO]; break; - case DatabaseServiceType.SNOWFLAKE: + case DatabaseServiceType.Snowflake: ingestionType = onlyMetaData ? [IngestionType.SNOWFLAKE] : [IngestionType.SNOWFLAKE, IngestionType.SNOWFLAKE_USAGE]; break; - case DatabaseServiceType.VERTICA: + case DatabaseServiceType.Vertica: ingestionType = [IngestionType.VERTICA]; break; @@ -378,17 +360,17 @@ export const getAirflowPipelineTypes = ( return [PipelineType.Metadata]; } switch (serviceType) { - case DatabaseServiceType.REDSHIFT: - case DatabaseServiceType.BIGQUERY: - case DatabaseServiceType.SNOWFLAKE: + case DatabaseServiceType.Redshift: + case DatabaseServiceType.BigQuery: + case DatabaseServiceType.Snowflake: return [PipelineType.Metadata, PipelineType.QueryUsage]; - case DatabaseServiceType.HIVE: - case DatabaseServiceType.MSSQL: - case DatabaseServiceType.MYSQL: - case DatabaseServiceType.POSTGRES: - case DatabaseServiceType.TRINO: - case DatabaseServiceType.VERTICA: + case DatabaseServiceType.Hive: + case DatabaseServiceType.Mssql: + case DatabaseServiceType.MySQL: + case DatabaseServiceType.Postgres: + case DatabaseServiceType.Trino: + case DatabaseServiceType.Vertica: return [PipelineType.Metadata]; default: