Commit 62516d56 authored by wenmo's avatar wenmo

新增 元数据生成 FlinkSQL 和 SQL

parent 27fe9b3b
...@@ -71,6 +71,7 @@ Dinky(原 Dlink): ...@@ -71,6 +71,7 @@ Dinky(原 Dlink):
| | | 新增 条形图图的渲染 | 0.5.0 | | | | 新增 条形图图的渲染 | 0.5.0 |
| | | 新增 饼图的渲染 | 0.5.0 | | | | 新增 饼图的渲染 | 0.5.0 |
| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | | | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 |
| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 |
| | 归档 | 新增 执行与提交历史 | 0.4.0 | | | 归档 | 新增 执行与提交历史 | 0.4.0 |
| 运维中心 | 暂无 | 暂无 | 0.4.0 | | 运维中心 | 暂无 | 暂无 | 0.4.0 |
| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 | | 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 |
......
...@@ -147,10 +147,10 @@ public class DataBaseController { ...@@ -147,10 +147,10 @@ public class DataBaseController {
} }
/** /**
* 获取 FlinkTableSql * 获取 SqlGeneration
*/ */
@GetMapping("/getFlinkTableSql") @GetMapping("/getSqlGeneration")
public Result getFlinkTableSql(@RequestParam Integer id,@RequestParam String schemaName,@RequestParam String tableName) { public Result getSqlGeneration(@RequestParam Integer id,@RequestParam String schemaName,@RequestParam String tableName) {
return Result.succeed(databaseService.getFlinkTableSql(id,schemaName,tableName),"获取成功"); return Result.succeed(databaseService.getSqlGeneration(id,schemaName,tableName),"获取成功");
} }
} }
\ No newline at end of file
package com.dlink.model;
/**
* SqlGeneration
*
* @author wenmo
* @since 2022/1/29 16:13
*/
public class SqlGeneration {
private String flinkSqlCreate;
private String sqlSelect;
private String sqlCreate;
public SqlGeneration() {
}
public SqlGeneration(String flinkSqlCreate, String sqlSelect, String sqlCreate) {
this.flinkSqlCreate = flinkSqlCreate;
this.sqlSelect = sqlSelect;
this.sqlCreate = sqlCreate;
}
public String getFlinkSqlCreate() {
return flinkSqlCreate;
}
public void setFlinkSqlCreate(String flinkSqlCreate) {
this.flinkSqlCreate = flinkSqlCreate;
}
public String getSqlSelect() {
return sqlSelect;
}
public void setSqlSelect(String sqlSelect) {
this.sqlSelect = sqlSelect;
}
public String getSqlCreate() {
return sqlCreate;
}
public void setSqlCreate(String sqlCreate) {
this.sqlCreate = sqlCreate;
}
}
...@@ -4,6 +4,7 @@ import com.dlink.db.service.ISuperService; ...@@ -4,6 +4,7 @@ import com.dlink.db.service.ISuperService;
import com.dlink.model.Column; import com.dlink.model.Column;
import com.dlink.model.DataBase; import com.dlink.model.DataBase;
import com.dlink.model.Schema; import com.dlink.model.Schema;
import com.dlink.model.SqlGeneration;
import java.util.List; import java.util.List;
...@@ -28,4 +29,10 @@ public interface DataBaseService extends ISuperService<DataBase> { ...@@ -28,4 +29,10 @@ public interface DataBaseService extends ISuperService<DataBase> {
List<Column> listColumns(Integer id, String schemaName, String tableName); List<Column> listColumns(Integer id, String schemaName, String tableName);
String getFlinkTableSql(Integer id, String schemaName, String tableName); String getFlinkTableSql(Integer id, String schemaName, String tableName);
String getSqlSelect(Integer id, String schemaName, String tableName);
String getSqlCreate(Integer id, String schemaName, String tableName);
SqlGeneration getSqlGeneration(Integer id, String schemaName, String tableName);
} }
...@@ -7,10 +7,7 @@ import com.dlink.db.service.impl.SuperServiceImpl; ...@@ -7,10 +7,7 @@ import com.dlink.db.service.impl.SuperServiceImpl;
import com.dlink.mapper.DataBaseMapper; import com.dlink.mapper.DataBaseMapper;
import com.dlink.metadata.driver.Driver; import com.dlink.metadata.driver.Driver;
import com.dlink.metadata.driver.DriverConfig; import com.dlink.metadata.driver.DriverConfig;
import com.dlink.model.Column; import com.dlink.model.*;
import com.dlink.model.DataBase;
import com.dlink.model.Schema;
import com.dlink.model.Table;
import com.dlink.service.DataBaseService; import com.dlink.service.DataBaseService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -101,4 +98,38 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa ...@@ -101,4 +98,38 @@ public class DataBaseServiceImpl extends SuperServiceImpl<DataBaseMapper, DataBa
Table table = Table.build(tableName, schemaName, columns); Table table = Table.build(tableName, schemaName, columns);
return table.getFlinkTableSql(dataBase.getName(),driver.getFlinkColumnTypeConversion(),dataBase.getFlinkConfig()); return table.getFlinkTableSql(dataBase.getName(),driver.getFlinkColumnTypeConversion(),dataBase.getFlinkConfig());
} }
@Override
public String getSqlSelect(Integer id, String schemaName, String tableName) {
DataBase dataBase = getById(id);
Asserts.checkNotNull(dataBase,"该数据源不存在!");
Driver driver = Driver.build(dataBase.getDriverConfig()).connect();
List<Column> columns = driver.listColumns(schemaName, tableName);
Table table = Table.build(tableName, schemaName, columns);
return table.getSqlSelect(dataBase.getName());
}
@Override
public String getSqlCreate(Integer id, String schemaName, String tableName) {
DataBase dataBase = getById(id);
Asserts.checkNotNull(dataBase,"该数据源不存在!");
Driver driver = Driver.build(dataBase.getDriverConfig()).connect();
List<Column> columns = driver.listColumns(schemaName, tableName);
Table table = Table.build(tableName, schemaName, columns);
return driver.getCreateTableSql(table);
}
@Override
public SqlGeneration getSqlGeneration(Integer id, String schemaName, String tableName) {
DataBase dataBase = getById(id);
Asserts.checkNotNull(dataBase,"该数据源不存在!");
Driver driver = Driver.build(dataBase.getDriverConfig()).connect();
List<Column> columns = driver.listColumns(schemaName, tableName);
Table table = Table.build(tableName, schemaName, columns);
SqlGeneration sqlGeneration = new SqlGeneration();
sqlGeneration.setFlinkSqlCreate(table.getFlinkTableSql(dataBase.getName(),driver.getFlinkColumnTypeConversion(),dataBase.getFlinkConfig()));
sqlGeneration.setSqlSelect(table.getSqlSelect(dataBase.getName()));
sqlGeneration.setSqlCreate(driver.getCreateTableSql(table));
return sqlGeneration;
}
} }
...@@ -71,7 +71,7 @@ public class Table implements Serializable, Comparable<Table> { ...@@ -71,7 +71,7 @@ public class Table implements Serializable, Comparable<Table> {
return tableWithSql; return tableWithSql;
} }
public String getFlinkTableSql(String catalogName, Map<String, String> typeConversion,String flinkConfig) { public String getFlinkTableSql(String catalogName, Map<String, String> typeConversion, String flinkConfig) {
StringBuilder sb = new StringBuilder("CREATE TABLE "); StringBuilder sb = new StringBuilder("CREATE TABLE ");
sb.append(catalogName + "." + schema + "." + name + " (\n"); sb.append(catalogName + "." + schema + "." + name + " (\n");
List<String> pks = new ArrayList<>(); List<String> pks = new ArrayList<>();
...@@ -101,7 +101,20 @@ public class Table implements Serializable, Comparable<Table> { ...@@ -101,7 +101,20 @@ public class Table implements Serializable, Comparable<Table> {
} }
sb.append(") WITH (\n"); sb.append(") WITH (\n");
sb.append(getFlinkTableWith(flinkConfig)); sb.append(getFlinkTableWith(flinkConfig));
sb.append(");\n"); sb.append("\n);\n");
return sb.toString();
}
public String getSqlSelect(String catalogName) {
StringBuilder sb = new StringBuilder("SELECT\n");
for (int i = 0; i < columns.size(); i++) {
sb.append(" ");
if (i > 0) {
sb.append(",");
}
sb.append(columns.get(i).getName() + "\n");
}
sb.append(" FROM " + catalogName + "." + schema + "." + name + ";\n");
return sb.toString(); return sb.toString();
} }
} }
...@@ -10,7 +10,7 @@ import { ...@@ -10,7 +10,7 @@ import {
TableOutlined, TableOutlined,
DatabaseOutlined, DatabaseOutlined,
DownOutlined, DownOutlined,
OrderedListOutlined, FireOutlined OrderedListOutlined, CodepenOutlined
} from '@ant-design/icons'; } from '@ant-design/icons';
import React from "react"; import React from "react";
import {showMetaDataTable} from "@/components/Studio/StudioEvent/DDL"; import {showMetaDataTable} from "@/components/Studio/StudioEvent/DDL";
...@@ -21,6 +21,7 @@ import { ...@@ -21,6 +21,7 @@ import {
import Columns from "@/pages/DataBase/Columns"; import Columns from "@/pages/DataBase/Columns";
import Tables from "@/pages/DataBase/Tables"; import Tables from "@/pages/DataBase/Tables";
import {TreeDataNode} from "@/components/Studio/StudioTree/Function"; import {TreeDataNode} from "@/components/Studio/StudioTree/Function";
import Generation from "@/pages/DataBase/Generation";
const { DirectoryTree } = Tree; const { DirectoryTree } = Tree;
const {Option} = Select; const {Option} = Select;
...@@ -137,7 +138,7 @@ const StudioMetaData = (props: any) => { ...@@ -137,7 +138,7 @@ const StudioMetaData = (props: any) => {
<TabPane <TabPane
tab={ tab={
<span> <span>
<OrderedListOutlined /> <CodepenOutlined />
字段信息 字段信息
</span> </span>
} }
...@@ -145,6 +146,17 @@ const StudioMetaData = (props: any) => { ...@@ -145,6 +146,17 @@ const StudioMetaData = (props: any) => {
> >
{row? <Columns dbId={databaseId} schema={row.schema} table={row.table}/> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />} {row? <Columns dbId={databaseId} schema={row.schema} table={row.table}/> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
</TabPane> </TabPane>
<TabPane
tab={
<span>
<OrderedListOutlined />
SQL 生成
</span>
}
key="sqlGeneration"
>
{row? <Generation dbId={databaseId} schema={row.schema} table={row.table}/> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
</TabPane>
</Tabs> </Tabs>
</ModalForm> </ModalForm>
</> </>
......
import {Typography,Tabs} from 'antd';
import {useEffect, useState} from "react";
import {getData} from "@/components/Common/crud";
const {Paragraph} = Typography;
const { TabPane } = Tabs;
type SqlGeneration = {
flinkSqlCreate?: string;
sqlSelect?: string;
sqlCreate?: string;
}
const Generation = (props: any) => {
const {dbId,table,schema} = props;
const [sqlGeneration, setSqlGeneration] = useState<SqlGeneration>({});
const getSqlGeneration = async () => {
const msg = await getData('api/database/getSqlGeneration', {id:dbId,schemaName:schema,tableName:table});
setSqlGeneration(msg.datas);
};
useEffect(() => {
getSqlGeneration();
}, []);
return (<>
<Paragraph>
<Tabs defaultActiveKey="FlinkDDL" size="small" tabPosition="left" >
<TabPane
tab={
<span>
FlinkDDL
</span>
}
key="FlinkDDL"
>
<Paragraph copyable={{text: sqlGeneration.flinkSqlCreate}}></Paragraph>
<pre style={{height: '300px'}}>{sqlGeneration.flinkSqlCreate}</pre>
</TabPane>
<TabPane
tab={
<span>
SELECT
</span>
}
key="SQLSelect"
>
<Paragraph copyable={{text: sqlGeneration.sqlSelect}}></Paragraph>
<pre style={{height: '300px'}}>{sqlGeneration.sqlSelect}</pre>
</TabPane>
<TabPane
tab={
<span>
SQLDDL
</span>
}
key="SQLDDL"
>
<Paragraph copyable={{text: sqlGeneration.sqlCreate}}></Paragraph>
<pre style={{height: '300px'}}>{sqlGeneration.sqlCreate}</pre>
</TabPane>
</Tabs>
</Paragraph></>)
};
export default Generation;
...@@ -635,6 +635,9 @@ export default (): React.ReactNode => { ...@@ -635,6 +635,9 @@ export default (): React.ReactNode => {
<li> <li>
<Link>扩展 Doris、SqlServer、Oracle 数据源注册、元数据、查询和执行</Link> <Link>扩展 Doris、SqlServer、Oracle 数据源注册、元数据、查询和执行</Link>
</li> </li>
<li>
<Link>新增 元数据生成 FlinkSQL 和 SQL</Link>
</li>
</ul> </ul>
</Paragraph> </Paragraph>
</Timeline.Item> </Timeline.Item>
......
...@@ -109,6 +109,7 @@ Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对 ...@@ -109,6 +109,7 @@ Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对
| | | 新增 条形图图的渲染 | 0.5.0 | | | | 新增 条形图图的渲染 | 0.5.0 |
| | | 新增 饼图的渲染 | 0.5.0 | | | | 新增 饼图的渲染 | 0.5.0 |
| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | | | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 |
| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 |
| | 归档 | 新增 执行与提交历史 | 0.4.0 | | | 归档 | 新增 执行与提交历史 | 0.4.0 |
| 运维中心 | 暂无 | 暂无 | 0.4.0 | | 运维中心 | 暂无 | 暂无 | 0.4.0 |
| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 | | 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 |
......
...@@ -109,6 +109,7 @@ Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对 ...@@ -109,6 +109,7 @@ Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对
| | | 新增 条形图图的渲染 | 0.5.0 | | | | 新增 条形图图的渲染 | 0.5.0 |
| | | 新增 饼图的渲染 | 0.5.0 | | | | 新增 饼图的渲染 | 0.5.0 |
| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | | | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 |
| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 |
| | 归档 | 新增 执行与提交历史 | 0.4.0 | | | 归档 | 新增 执行与提交历史 | 0.4.0 |
| 运维中心 | 暂无 | 暂无 | 0.4.0 | | 运维中心 | 暂无 | 暂无 | 0.4.0 |
| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 | | 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 |
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment