From 2ca8aee5908833d3648def94cdc563219ed57ed0 Mon Sep 17 00:00:00 2001 From: zixi0825 Date: Tue, 31 Mar 2026 18:25:03 +0800 Subject: [PATCH] [Feature][Connector] Support parse sql scripts to lineage --- .../plugin/ClickHouseConnectorFactory.java | 6 ++ .../plugin/DatabendConnectorFactory.java | 6 ++ .../connector/plugin/DmConnectorFactory.java | 6 ++ .../plugin/DorisConnectorFactory.java | 6 ++ .../plugin/HiveConnectorFactory.java | 6 ++ .../plugin/ImpalaConnectorFactory.java | 7 ++ .../plugin/MysqlConnectorFactory.java | 6 ++ .../plugin/OracleConnectorFactory.java | 6 ++ .../plugin/PostgreSqlConnectorFactory.java | 6 ++ .../plugin/PrestoConnectorFactory.java | 6 ++ .../plugin/SqlServerConnectorFactory.java | 6 ++ .../plugin/StarRocksConnectorFactory.java | 6 ++ .../plugin/TrinoConnectorFactory.java | 6 ++ .../components/Lineage/AddLineageModal.tsx | 77 +------------------ 14 files changed, 81 insertions(+), 75 deletions(-) diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-clickhouse/src/main/java/io/datavines/connector/plugin/ClickHouseConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-clickhouse/src/main/java/io/datavines/connector/plugin/ClickHouseConnectorFactory.java index 310478a7..5f026f23 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-clickhouse/src/main/java/io/datavines/connector/plugin/ClickHouseConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-clickhouse/src/main/java/io/datavines/connector/plugin/ClickHouseConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class ClickHouseConnectorFactory extends AbstractJdbcConnectorFactory { @@ -55,6 +56,11 @@ public TypeConverter getTypeConverter() { return new ClickHouseTypeConverter(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.clickhouse); + } + @Override public String getPluginName() { return "clickhouse"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-databend/src/main/java/io/datavines/connector/plugin/DatabendConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-databend/src/main/java/io/datavines/connector/plugin/DatabendConnectorFactory.java index ff623481..a872f792 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-databend/src/main/java/io/datavines/connector/plugin/DatabendConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-databend/src/main/java/io/datavines/connector/plugin/DatabendConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class DatabendConnectorFactory extends AbstractJdbcConnectorFactory { @@ -45,6 +46,11 @@ public ConfigBuilder getConfigBuilder() { return new DatabendConfigBuilder(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.mysql); + } + @Override public String getPluginName() { return "databend"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-dm/src/main/java/io/datavines/connector/plugin/DmConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-dm/src/main/java/io/datavines/connector/plugin/DmConnectorFactory.java index e4fd5c5e..d16cba30 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-dm/src/main/java/io/datavines/connector/plugin/DmConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-dm/src/main/java/io/datavines/connector/plugin/DmConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class DmConnectorFactory extends AbstractJdbcConnectorFactory { @@ -45,6 +46,11 @@ public ConfigBuilder getConfigBuilder() { return new DmConfigBuilder(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.dm); + } + @Override public String getPluginName() { return "dm"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-doris/src/main/java/io/datavines/connector/plugin/DorisConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-doris/src/main/java/io/datavines/connector/plugin/DorisConnectorFactory.java index 181e8f53..619c05e3 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-doris/src/main/java/io/datavines/connector/plugin/DorisConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-doris/src/main/java/io/datavines/connector/plugin/DorisConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class DorisConnectorFactory extends AbstractJdbcConnectorFactory { @@ -45,6 +46,11 @@ public ConfigBuilder getConfigBuilder() { return new DorisConfigBuilder(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.mysql); + } + @Override public String getPluginName() { return "doris"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-hive/src/main/java/io/datavines/connector/plugin/HiveConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-hive/src/main/java/io/datavines/connector/plugin/HiveConnectorFactory.java index de96357a..39201ba1 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-hive/src/main/java/io/datavines/connector/plugin/HiveConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-hive/src/main/java/io/datavines/connector/plugin/HiveConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class HiveConnectorFactory extends AbstractJdbcConnectorFactory { @@ -55,6 +56,11 @@ public DataSourceClient getDataSourceClient() { return new HiveDataSourceClient(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.hive); + } + @Override public String getPluginName() { return "hive"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-impala/src/main/java/io/datavines/connector/plugin/ImpalaConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-impala/src/main/java/io/datavines/connector/plugin/ImpalaConnectorFactory.java index a39381f6..b079af0e 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-impala/src/main/java/io/datavines/connector/plugin/ImpalaConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-impala/src/main/java/io/datavines/connector/plugin/ImpalaConnectorFactory.java @@ -16,10 +16,12 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.Connector; import io.datavines.connector.api.ParameterConverter; import io.datavines.connector.api.Dialect; import io.datavines.connector.api.Executor; +import io.datavines.connector.api.StatementParser; public class ImpalaConnectorFactory extends AbstractJdbcConnectorFactory { @@ -43,6 +45,11 @@ public Executor getExecutor() { return new ImpalaExecutor(getDataSourceClient()); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.hive); + } + @Override public String getPluginName() { return "impala"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java index c5547245..a6afc299 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class MysqlConnectorFactory extends AbstractJdbcConnectorFactory { @@ -50,6 +51,11 @@ public MetricScript getMetricScript() { return new MysqlMetricScript(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.mysql); + } + @Override public String getPluginName() { return "mysql"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-oracle/src/main/java/io/datavines/connector/plugin/OracleConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-oracle/src/main/java/io/datavines/connector/plugin/OracleConnectorFactory.java index fa691fca..b2823ef8 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-oracle/src/main/java/io/datavines/connector/plugin/OracleConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-oracle/src/main/java/io/datavines/connector/plugin/OracleConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class OracleConnectorFactory extends AbstractJdbcConnectorFactory{ @@ -55,6 +56,11 @@ public MetricScript getMetricScript() { return new OracleMetricScript(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.oracle); + } + @Override public String getPluginName() { return "oracle"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnectorFactory.java index 75686b96..debb6165 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class PostgreSqlConnectorFactory extends AbstractJdbcConnectorFactory { @@ -55,6 +56,11 @@ public MetricScript getMetricScript() { return new PostgreSqlMetricScript(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.postgresql); + } + @Override public String getPluginName() { return "postgresql"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-presto/src/main/java/io/datavines/connector/plugin/PrestoConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-presto/src/main/java/io/datavines/connector/plugin/PrestoConnectorFactory.java index 7d4bdd45..ff2a4a5a 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-presto/src/main/java/io/datavines/connector/plugin/PrestoConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-presto/src/main/java/io/datavines/connector/plugin/PrestoConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class PrestoConnectorFactory extends AbstractJdbcConnectorFactory { @@ -50,6 +51,11 @@ public DataSourceClient getDataSourceClient() { return new PrestoDataSourceClient(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.presto); + } + @Override public String getPluginName() { return "presto"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-sqlserver/src/main/java/io/datavines/connector/plugin/SqlServerConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-sqlserver/src/main/java/io/datavines/connector/plugin/SqlServerConnectorFactory.java index f05001f4..0eabac7c 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-sqlserver/src/main/java/io/datavines/connector/plugin/SqlServerConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-sqlserver/src/main/java/io/datavines/connector/plugin/SqlServerConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class SqlServerConnectorFactory extends AbstractJdbcConnectorFactory { @@ -50,6 +51,11 @@ public MetricScript getMetricScript() { return new SqlServerMetricScript(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.sqlserver); + } + @Override public String getPluginName() { return "sqlserver"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-starrocks/src/main/java/io/datavines/connector/plugin/StarRocksConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-starrocks/src/main/java/io/datavines/connector/plugin/StarRocksConnectorFactory.java index 3b8dc9b3..168e0839 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-starrocks/src/main/java/io/datavines/connector/plugin/StarRocksConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-starrocks/src/main/java/io/datavines/connector/plugin/StarRocksConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class StarRocksConnectorFactory extends AbstractJdbcConnectorFactory { @@ -45,6 +46,11 @@ public ConfigBuilder getConfigBuilder() { return new StarRocksConfigBuilder(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.mysql); + } + @Override public String getPluginName() { return "starrocks"; diff --git a/datavines-connector/datavines-connector-plugins/datavines-connector-trino/src/main/java/io/datavines/connector/plugin/TrinoConnectorFactory.java b/datavines-connector/datavines-connector-plugins/datavines-connector-trino/src/main/java/io/datavines/connector/plugin/TrinoConnectorFactory.java index 3d6b66fa..f0f89dde 100644 --- a/datavines-connector/datavines-connector-plugins/datavines-connector-trino/src/main/java/io/datavines/connector/plugin/TrinoConnectorFactory.java +++ b/datavines-connector/datavines-connector-plugins/datavines-connector-trino/src/main/java/io/datavines/connector/plugin/TrinoConnectorFactory.java @@ -16,6 +16,7 @@ */ package io.datavines.connector.plugin; +import com.alibaba.druid.DbType; import io.datavines.connector.api.*; public class TrinoConnectorFactory extends AbstractJdbcConnectorFactory { @@ -50,6 +51,11 @@ public DataSourceClient getDataSourceClient() { return new TrinoDataSourceClient(); } + @Override + public StatementParser getStatementParser() { + return new DefaultStatementParser(DbType.presto); + } + @Override public String getPluginName() { return "trino"; diff --git a/datavines-ui/Editor/components/Lineage/AddLineageModal.tsx b/datavines-ui/Editor/components/Lineage/AddLineageModal.tsx index 7e835fa7..c6235b5e 100644 --- a/datavines-ui/Editor/components/Lineage/AddLineageModal.tsx +++ b/datavines-ui/Editor/components/Lineage/AddLineageModal.tsx @@ -1,11 +1,9 @@ import React, { useState, useEffect } from 'react'; import { - Modal, Form, Select, Divider, Button, Space, Typography, message, + Modal, Form, Select, Divider, Typography, message, } from 'antd'; -import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons'; import { useIntl } from 'react-intl'; import useRequest from '../../hooks/useRequest'; -import { CatalogEntityInstanceInfo } from './useLineageData'; const { Text } = Typography; @@ -27,10 +25,8 @@ const AddLineageModal: React.FC = ({ // Cascade data const [fromDatabases, setFromDatabases] = useState([]); const [fromTables, setFromTables] = useState([]); - const [fromColumns, setFromColumns] = useState([]); const [toDatabases, setToDatabases] = useState([]); const [toTables, setToTables] = useState([]); - const [toColumns, setToColumns] = useState([]); const loadDatabases = async (dsUuid: string, setFn: (v: any[]) => void) => { try { @@ -46,32 +42,17 @@ const AddLineageModal: React.FC = ({ } catch { setFn([]); } }; - const loadColumns = async (tableUuid: string, setFn: (v: any[]) => void) => { - try { - const res = await $http.get(`/catalog/list/column/${tableUuid}`); - setFn(res || []); - } catch { setFn([]); } - }; - const handleSubmit = async () => { try { const values = await form.validateFields(); setSubmitting(true); - const columnMappings = values.columnMappings || []; - const childRelDetailList = columnMappings - .filter((m: any) => m?.fromColumn && m?.toColumn) - .map((m: any) => ({ - fromChildren: [{ uuid: m.fromColumn }], - toChild: { uuid: m.toColumn }, - })); - const payload = { fromEntity: { uuid: values.fromTable }, toEntity: { uuid: values.toTable }, lineageDetail: { sourceType: 'MANUAL', - childRelDetailList, + childRelDetailList: [], }, }; @@ -91,10 +72,8 @@ const AddLineageModal: React.FC = ({ form.resetFields(); setFromDatabases([]); setFromTables([]); - setFromColumns([]); setToDatabases([]); setToTables([]); - setToColumns([]); } }, [visible]); @@ -125,7 +104,6 @@ const AddLineageModal: React.FC = ({ loadDatabases(val, setFromDatabases); form.setFieldsValue({ fromDatabase: undefined, fromTable: undefined }); setFromTables([]); - setFromColumns([]); }} /> @@ -142,7 +120,6 @@ const AddLineageModal: React.FC = ({ onChange={(val) => { loadTables(val, setFromTables); form.setFieldsValue({ fromTable: undefined }); - setFromColumns([]); }} /> @@ -156,9 +133,6 @@ const AddLineageModal: React.FC = ({ options={fromTables.map((t: any) => ({ label: t.name, value: t.uuid, }))} - onChange={(val) => { - loadColumns(val, setFromColumns); - }} /> @@ -181,7 +155,6 @@ const AddLineageModal: React.FC = ({ loadDatabases(val, setToDatabases); form.setFieldsValue({ toDatabase: undefined, toTable: undefined }); setToTables([]); - setToColumns([]); }} /> @@ -198,7 +171,6 @@ const AddLineageModal: React.FC = ({ onChange={(val) => { loadTables(val, setToTables); form.setFieldsValue({ toTable: undefined }); - setToColumns([]); }} /> @@ -212,54 +184,9 @@ const AddLineageModal: React.FC = ({ options={toTables.map((t: any) => ({ label: t.name, value: t.uuid, }))} - onChange={(val) => { - loadColumns(val, setToColumns); - }} /> - - - - {intl.formatMessage({ id: 'lineage_column_mapping' })} ({intl.formatMessage({ id: 'lineage_optional' })}) - - {(fields, { add, remove }) => ( - <> - {fields.map(({ key, name, ...restField }) => ( -
- - ({ - label: c.name, value: c.uuid, - }))} - /> - - remove(name)} /> -
- ))} - - - )} -
);