Commit 818aea90 authored by heyang's avatar heyang

[Fix-426][metadata]修复clickhouse元数据不显示问题

parent 3306f269
...@@ -6,21 +6,17 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; ...@@ -6,21 +6,17 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.Token; import com.alibaba.druid.sql.parser.Token;
import com.dlink.assertion.Asserts;
import com.dlink.metadata.ast.Clickhouse20CreateTableStatement; import com.dlink.metadata.ast.Clickhouse20CreateTableStatement;
import com.dlink.metadata.convert.ClickHouseTypeConvert; import com.dlink.metadata.convert.ClickHouseTypeConvert;
import com.dlink.metadata.convert.ITypeConvert; import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.parser.Clickhouse20StatementParser; import com.dlink.metadata.parser.Clickhouse20StatementParser;
import com.dlink.metadata.query.ClickHouseQuery; import com.dlink.metadata.query.ClickHouseQuery;
import com.dlink.metadata.query.IDBQuery; import com.dlink.metadata.query.IDBQuery;
import com.dlink.model.Schema;
import com.dlink.model.Table; import com.dlink.model.Table;
import com.dlink.result.SqlExplainResult; import com.dlink.result.SqlExplainResult;
import com.dlink.utils.LogUtil; import com.dlink.utils.LogUtil;
import java.sql.PreparedStatement; import java.sql.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -38,7 +34,8 @@ public class ClickHouseDriver extends AbstractJdbcDriver { ...@@ -38,7 +34,8 @@ public class ClickHouseDriver extends AbstractJdbcDriver {
@Override @Override
String getDriverClass() { String getDriverClass() {
return "com.clickhouse.jdbc.ClickHouseDriver"; // return "com.clickhouse.jdbc.ClickHouseDriver";
return "ru.yandex.clickhouse.ClickHouseDriver";
} }
@Override @Override
...@@ -61,56 +58,6 @@ public class ClickHouseDriver extends AbstractJdbcDriver { ...@@ -61,56 +58,6 @@ public class ClickHouseDriver extends AbstractJdbcDriver {
return "ClickHouse OLAP 数据库"; return "ClickHouse OLAP 数据库";
} }
@Override
public List<Schema> listSchemas() {
List<Schema> schemas = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet results = null;
String schemasSql = getDBQuery().schemaAllSql();
try {
preparedStatement = conn.prepareStatement(schemasSql);
results = preparedStatement.executeQuery();
while (results.next()) {
String schemaName= results.getMetaData().getSchemaName(0);
if (Asserts.isNotNullString(schemaName)) {
Schema schema = new Schema(schemaName);
schemas.add(schema);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(preparedStatement, results);
}
return schemas;
}
@Override
public List<Table> listTables(String schemaName) {
List<Table> tableList = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet results = null;
String sql = getDBQuery().tablesSql(schemaName);
try {
preparedStatement = conn.prepareStatement(sql);
results = preparedStatement.executeQuery();
while (results.next()) {
String tableName = results.getString(getDBQuery().tableName());
if (Asserts.isNotNullString(tableName)) {
Table tableInfo = new Table();
tableInfo.setName(tableName);
tableInfo.setSchema(schemaName);
tableList.add(tableInfo);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(preparedStatement, results);
}
return tableList;
}
@Override @Override
public List<SqlExplainResult> explain(String sql) { public List<SqlExplainResult> explain(String sql) {
String initialSql = sql; String initialSql = sql;
......
...@@ -9,23 +9,35 @@ package com.dlink.metadata.query; ...@@ -9,23 +9,35 @@ package com.dlink.metadata.query;
public class ClickHouseQuery extends AbstractDBQuery { public class ClickHouseQuery extends AbstractDBQuery {
@Override @Override
public String schemaAllSql() { public String schemaAllSql() {
return "SELECT currentDatabase()"; return "show databases";
} }
/**
* 获取模式名称下的所有表,从元数据表中获取获取
*
* @param schemaName 模式名称
* @return String
*/
@Override @Override
public String tablesSql(String schemaName) { public String tablesSql(String schemaName) {
return "show tables"; return "select name from system.tables where 1=1 and database='" + schemaName + "'";
} }
/**
* 从元数据表中获取表字段信息
*
* @param schemaName 模式名称
* @param tableName 表名
* @return String
*/
@Override @Override
public String columnsSql(String schemaName, String tableName) { public String columnsSql(String schemaName, String tableName) {
return "desc `" + tableName + "`"; return "select * from system.columns where 1=1 and database='" + schemaName + "' and table='" + tableName + "'";
} }
@Override @Override
public String schemaName() { public String schemaName() {
return "database"; return "name";
} }
@Override @Override
...@@ -55,16 +67,21 @@ public class ClickHouseQuery extends AbstractDBQuery { ...@@ -55,16 +67,21 @@ public class ClickHouseQuery extends AbstractDBQuery {
@Override @Override
public String columnKey() { public String columnKey() {
return "KEY"; return "is_in_primary_key";
} }
@Override @Override
public String isNullable() { public String isNullable() {
return "NULL"; return "NULL";
} }
@Override @Override
public String createTableName() { public String createTableName() {
return "statement"; return "statement";
} }
@Override
public String isPK() {
return "1";
}
} }
package com.dlink.metadata;
import com.dlink.metadata.driver.ClickHouseDriver;
import com.dlink.metadata.driver.Driver;
import com.dlink.metadata.driver.DriverConfig;
import com.dlink.metadata.result.JdbcSelectResult;
import com.dlink.model.Column;
import com.dlink.model.Schema;
import com.dlink.utils.JSONUtil;
import com.fasterxml.jackson.databind.util.JSONPObject;
import org.junit.Test;
import java.util.List;
/**
* ClickhouseTest
*
* @author heyang
* @since 2022/4/21 1:06
**/
public class ClickHouseTest {
private static final String IP = "127.0.0.1";
private static String url="jdbc:clickhouse://"+IP+":8123/default";
private ClickHouseDriver clickHouseDriver = new ClickHouseDriver();
public Driver getDriver() {
DriverConfig config = new DriverConfig();
config.setType(clickHouseDriver.getType());
config.setName(clickHouseDriver.getName());
config.setIp(IP);
config.setPort(8123);
// config.setUsername(null);
// config.setPassword(null);
config.setUrl(url);
return Driver.build(config);
}
@Test
public void connectTest() {
String test = getDriver().test();
System.out.println(test);
System.out.println("end...");
}
@Test
public void schemaTest() {
List<Schema> schemasAndTables = getDriver().getSchemasAndTables();
System.out.println(JSONUtil.toJsonString(schemasAndTables));
System.out.println("end...");
}
@Test
public void columnTest() {
Driver driver = getDriver();
List<Column> columns = driver.listColumns("xxx", "xxx");
System.out.println(JSONUtil.toJsonString(columns));
System.out.println("end...");
}
@Test
public void queryTest() {
Driver driver = getDriver();
JdbcSelectResult query = driver.query("select * from xxx", 10);
System.out.println(JSONUtil.toJsonString(query));
System.out.println("end...");
}
}
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