mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package com.tencent.supersonic.chat.server.persistence.dataobject;
|
package com.tencent.supersonic.chat.server.persistence.dataobject;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
@@ -7,9 +10,10 @@ import java.util.Date;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ToString
|
@ToString
|
||||||
|
@TableName("s2_chat_config")
|
||||||
public class ChatConfigDO {
|
public class ChatConfigDO {
|
||||||
|
|
||||||
/** database auto-increment primary key */
|
@TableId(type = IdType.AUTO)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
private Long modelId;
|
private Long modelId;
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
package com.tencent.supersonic.chat.server.persistence.dataobject;
|
package com.tencent.supersonic.chat.server.persistence.dataobject;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@TableName("s2_chat_context")
|
||||||
public class ChatContextDO implements Serializable {
|
public class ChatContextDO implements Serializable {
|
||||||
|
|
||||||
|
@TableId
|
||||||
private Integer chatId;
|
private Integer chatId;
|
||||||
private Instant modifiedAt;
|
private Instant modifiedAt;
|
||||||
|
@TableField("query_user")
|
||||||
private String user;
|
private String user;
|
||||||
private String queryText;
|
private String queryText;
|
||||||
private String semanticParse;
|
private String semanticParse;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.tencent.supersonic.chat.server.persistence.mapper;
|
package com.tencent.supersonic.chat.server.persistence.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.tencent.supersonic.chat.server.config.ChatConfigFilterInternal;
|
import com.tencent.supersonic.chat.server.config.ChatConfigFilterInternal;
|
||||||
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO;
|
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -7,11 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface ChatConfigMapper {
|
public interface ChatConfigMapper extends BaseMapper<ChatConfigDO> {
|
||||||
|
|
||||||
Long addConfig(ChatConfigDO chaConfigPO);
|
|
||||||
|
|
||||||
Long editConfig(ChatConfigDO chaConfigPO);
|
|
||||||
|
|
||||||
List<ChatConfigDO> search(ChatConfigFilterInternal filterInternal);
|
List<ChatConfigDO> search(ChatConfigFilterInternal filterInternal);
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
package com.tencent.supersonic.chat.server.persistence.mapper;
|
package com.tencent.supersonic.chat.server.persistence.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO;
|
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface ChatContextMapper {
|
public interface ChatContextMapper extends BaseMapper<ChatContextDO> {
|
||||||
|
|
||||||
ChatContextDO getContextByChatId(Integer chatId);
|
ChatContextDO getContextByChatId(Integer chatId);
|
||||||
|
|
||||||
int updateContext(ChatContextDO contextDO);
|
|
||||||
|
|
||||||
int addContext(ChatContextDO contextDO);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,15 +32,15 @@ public class ChatConfigRepositoryImpl implements ChatConfigRepository {
|
|||||||
@Override
|
@Override
|
||||||
public Long createConfig(ChatConfig chaConfig) {
|
public Long createConfig(ChatConfig chaConfig) {
|
||||||
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
|
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
|
||||||
chatConfigMapper.addConfig(chaConfigDO);
|
chatConfigMapper.insert(chaConfigDO);
|
||||||
return chaConfigDO.getId();
|
return chaConfigDO.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long updateConfig(ChatConfig chaConfig) {
|
public Long updateConfig(ChatConfig chaConfig) {
|
||||||
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
|
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
|
||||||
|
chatConfigMapper.updateById(chaConfigDO);
|
||||||
return chatConfigMapper.editConfig(chaConfigDO);
|
return chaConfigDO.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -35,12 +35,7 @@ public class ChatContextRepositoryImpl implements ChatContextRepository {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateContext(ChatContext chatCtx) {
|
public void updateContext(ChatContext chatCtx) {
|
||||||
ChatContextDO context = cast(chatCtx);
|
chatContextMapper.insertOrUpdate(cast(chatCtx));
|
||||||
if (chatContextMapper.getContextByChatId(chatCtx.getChatId()) == null) {
|
|
||||||
chatContextMapper.addContext(context);
|
|
||||||
} else {
|
|
||||||
chatContextMapper.updateContext(context);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ChatContext cast(ChatContextDO contextDO) {
|
private ChatContext cast(ChatContextDO contextDO) {
|
||||||
|
|||||||
@@ -20,54 +20,6 @@
|
|||||||
<result column="updated_at" property="updatedAt"/>
|
<result column="updated_at" property="updatedAt"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<insert id="addConfig"
|
|
||||||
parameterType="com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO"
|
|
||||||
useGeneratedKeys="true" keyProperty="id">
|
|
||||||
insert into s2_chat_config
|
|
||||||
(
|
|
||||||
model_id, `chat_detail_config`, chat_agg_config, recommended_questions, status, llm_examples, created_by, updated_by, created_at, updated_at
|
|
||||||
)
|
|
||||||
values
|
|
||||||
(
|
|
||||||
#{modelId}, #{chatDetailConfig}, #{chatAggConfig}, #{recommendedQuestions}, #{status}, #{llmExamples}, #{createdBy}, #{updatedBy}, #{createdAt}, #{updatedAt}
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
|
|
||||||
<update id="editConfig">
|
|
||||||
update s2_chat_config
|
|
||||||
<set>
|
|
||||||
`updated_at` = #{updatedAt} ,
|
|
||||||
<if test="chatDetailConfig != null and chatDetailConfig != ''">
|
|
||||||
`chat_detail_config` = #{chatDetailConfig} ,
|
|
||||||
</if>
|
|
||||||
<if test="chatAggConfig != null and chatAggConfig != ''">
|
|
||||||
chat_agg_config = #{chatAggConfig} ,
|
|
||||||
</if>
|
|
||||||
<if test="recommendedQuestions != null and recommendedQuestions != ''">
|
|
||||||
recommended_questions = #{recommendedQuestions} ,
|
|
||||||
</if>
|
|
||||||
<if test="status != null and status != ''">
|
|
||||||
status = #{status} ,
|
|
||||||
</if>
|
|
||||||
<if test="updatedBy != null and updatedBy != ''">
|
|
||||||
updated_by = #{updatedBy} ,
|
|
||||||
</if>
|
|
||||||
<if test="llmExamples != null and llmExamples != ''">
|
|
||||||
llm_examples = #{llmExamples} ,
|
|
||||||
</if>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<where>
|
|
||||||
<if test="id != null and id != ''">
|
|
||||||
id = #{id}
|
|
||||||
</if>
|
|
||||||
<if test="modelId != null and modelId != ''">
|
|
||||||
and model_id = #{modelId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
</update>
|
|
||||||
|
|
||||||
<select id="search" resultMap="chaConfigDO">
|
<select id="search" resultMap="chaConfigDO">
|
||||||
select *
|
select *
|
||||||
from s2_chat_config
|
from s2_chat_config
|
||||||
|
|||||||
@@ -20,11 +20,4 @@
|
|||||||
from s2_chat_context where chat_id=#{chatId} limit 1
|
from s2_chat_context where chat_id=#{chatId} limit 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="addContext" parameterType="com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO" >
|
|
||||||
insert into s2_chat_context (chat_id,user,query_text,semantic_parse) values (#{chatId}, #{user},#{queryText}, #{semanticParse})
|
|
||||||
</insert>
|
|
||||||
<update id="updateContext">
|
|
||||||
update s2_chat_context set query_text=#{queryText},semantic_parse=#{semanticParse} where chat_id=#{chatId}
|
|
||||||
</update>
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -38,14 +38,14 @@ public class EmbeddingStoreParameterConfig extends ParameterConfig {
|
|||||||
new Parameter("s2.embedding.store.timeout", "60", "超时时间(秒)", "", "number", MODULE_NAME);
|
new Parameter("s2.embedding.store.timeout", "60", "超时时间(秒)", "", "number", MODULE_NAME);
|
||||||
|
|
||||||
public static final Parameter EMBEDDING_STORE_DIMENSION =
|
public static final Parameter EMBEDDING_STORE_DIMENSION =
|
||||||
new Parameter("s2.embedding.store.dimension", "", "纬度", "", "number", MODULE_NAME, null,
|
new Parameter("s2.embedding.store.dimension", "", "向量维度", "", "number", MODULE_NAME, null,
|
||||||
getDimensionDependency());
|
getDimensionDependency());
|
||||||
public static final Parameter EMBEDDING_STORE_DATABASE_NAME =
|
public static final Parameter EMBEDDING_STORE_DATABASE_NAME =
|
||||||
new Parameter("s2.embedding.store.databaseName", "", "DatabaseName", "", "string",
|
new Parameter("s2.embedding.store.databaseName", "", "DatabaseName", "", "string",
|
||||||
MODULE_NAME, null, getDatabaseNameDependency());
|
MODULE_NAME, null, getDatabaseNameDependency());
|
||||||
|
|
||||||
public static final Parameter EMBEDDING_STORE_POST = new Parameter("s2.embedding.store.post",
|
public static final Parameter EMBEDDING_STORE_POST = new Parameter("s2.embedding.store.port",
|
||||||
"", "端口", "", "number", MODULE_NAME, null, getPostDependency());
|
"", "端口", "", "number", MODULE_NAME, null, getPortDependency());
|
||||||
|
|
||||||
public static final Parameter EMBEDDING_STORE_USER = new Parameter("s2.embedding.store.user",
|
public static final Parameter EMBEDDING_STORE_USER = new Parameter("s2.embedding.store.user",
|
||||||
"", "用户名", "", "string", MODULE_NAME, null, getUserDependency());
|
"", "用户名", "", "string", MODULE_NAME, null, getUserDependency());
|
||||||
@@ -100,11 +100,7 @@ public class EmbeddingStoreParameterConfig extends ParameterConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static List<Parameter.Dependency> getApiKeyDependency() {
|
private static List<Parameter.Dependency> getApiKeyDependency() {
|
||||||
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
|
return Lists.newArrayList();
|
||||||
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
|
||||||
EmbeddingStoreType.PGVECTOR.name()),
|
|
||||||
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), DEMO,
|
|
||||||
EmbeddingStoreType.PGVECTOR.name(), DEMO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Parameter.Dependency> getPathDependency() {
|
private static List<Parameter.Dependency> getPathDependency() {
|
||||||
@@ -118,7 +114,7 @@ public class EmbeddingStoreParameterConfig extends ParameterConfig {
|
|||||||
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
||||||
EmbeddingStoreType.PGVECTOR.name()),
|
EmbeddingStoreType.PGVECTOR.name()),
|
||||||
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "384",
|
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "384",
|
||||||
EmbeddingStoreType.PGVECTOR.name(), "768"));
|
EmbeddingStoreType.PGVECTOR.name(), "512"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Parameter.Dependency> getDatabaseNameDependency() {
|
private static List<Parameter.Dependency> getDatabaseNameDependency() {
|
||||||
@@ -129,7 +125,7 @@ public class EmbeddingStoreParameterConfig extends ParameterConfig {
|
|||||||
EmbeddingStoreType.PGVECTOR.name(), "postgres"));
|
EmbeddingStoreType.PGVECTOR.name(), "postgres"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Parameter.Dependency> getPostDependency() {
|
private static List<Parameter.Dependency> getPortDependency() {
|
||||||
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
|
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
|
||||||
Lists.newArrayList(EmbeddingStoreType.PGVECTOR.name()),
|
Lists.newArrayList(EmbeddingStoreType.PGVECTOR.name()),
|
||||||
ImmutableMap.of(EmbeddingStoreType.PGVECTOR.name(), "54333"));
|
ImmutableMap.of(EmbeddingStoreType.PGVECTOR.name(), "54333"));
|
||||||
@@ -140,12 +136,14 @@ public class EmbeddingStoreParameterConfig extends ParameterConfig {
|
|||||||
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
||||||
EmbeddingStoreType.PGVECTOR.name()),
|
EmbeddingStoreType.PGVECTOR.name()),
|
||||||
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus",
|
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus",
|
||||||
EmbeddingStoreType.PGVECTOR.name(), "pgvector"));
|
EmbeddingStoreType.PGVECTOR.name(), "postgres"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Parameter.Dependency> getPasswordDependency() {
|
private static List<Parameter.Dependency> getPasswordDependency() {
|
||||||
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
|
return getDependency(EMBEDDING_STORE_PROVIDER.getName(),
|
||||||
Lists.newArrayList(EmbeddingStoreType.MILVUS.name()),
|
Lists.newArrayList(EmbeddingStoreType.MILVUS.name(),
|
||||||
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus"));
|
EmbeddingStoreType.PGVECTOR.name()),
|
||||||
|
ImmutableMap.of(EmbeddingStoreType.MILVUS.name(), "milvus",
|
||||||
|
EmbeddingStoreType.PGVECTOR.name(), "postgres"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ public class SqlValidHelper {
|
|||||||
CCJSqlParserUtil.parse(sql);
|
CCJSqlParserUtil.parse(sql);
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("isValidSQL parse:{}", e);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ public enum EngineType {
|
|||||||
KAFKA(4, "kafka"),
|
KAFKA(4, "kafka"),
|
||||||
H2(5, "h2"),
|
H2(5, "h2"),
|
||||||
POSTGRESQL(6, "postgresql"),
|
POSTGRESQL(6, "postgresql"),
|
||||||
OTHER(7, "other");
|
OTHER(7, "other"),
|
||||||
|
DUCKDB(8, "duckdb");
|
||||||
|
|
||||||
private Integer code;
|
private Integer code;
|
||||||
|
|
||||||
|
|||||||
@@ -17,5 +17,7 @@ public class DbSchema {
|
|||||||
|
|
||||||
private String sql;
|
private String sql;
|
||||||
|
|
||||||
|
private String ddl;
|
||||||
|
|
||||||
private List<DBColumn> dbColumns;
|
private List<DBColumn> dbColumns;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ public enum DataType {
|
|||||||
|
|
||||||
TDENGINE("TAOS", "TAOS", "com.taosdata.jdbc.TSDBDriver", "'", "'", "\"", "\""),
|
TDENGINE("TAOS", "TAOS", "com.taosdata.jdbc.TSDBDriver", "'", "'", "\"", "\""),
|
||||||
|
|
||||||
POSTGRESQL("postgresql", "postgresql", "org.postgresql.Driver", "'", "'", "\"", "\"");
|
POSTGRESQL("postgresql", "postgresql", "org.postgresql.Driver", "'", "'", "\"", "\""),
|
||||||
|
DUCKDB("duckdb", "duckdb", "org.duckdb.DuckDBDriver", "'", "'", "\"", "\"");
|
||||||
|
|
||||||
private String feature;
|
private String feature;
|
||||||
private String desc;
|
private String desc;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.tencent.supersonic.headless.api.pojo.request;
|
package com.tencent.supersonic.headless.api.pojo.request;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.ChatModelConfig;
|
import com.tencent.supersonic.common.pojo.ChatModelConfig;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.DbSchema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -10,12 +11,16 @@ public class ModelBuildReq {
|
|||||||
|
|
||||||
private Long databaseId;
|
private Long databaseId;
|
||||||
|
|
||||||
|
private Long domainId;
|
||||||
|
|
||||||
private String sql;
|
private String sql;
|
||||||
|
|
||||||
private String db;
|
private String db;
|
||||||
|
|
||||||
private List<String> tables;
|
private List<String> tables;
|
||||||
|
|
||||||
|
private List<DbSchema> dbSchemas;
|
||||||
|
|
||||||
private boolean buildByLLM;
|
private boolean buildByLLM;
|
||||||
|
|
||||||
private Integer chatModelId;
|
private Integer chatModelId;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class ClickHouseAdaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String functionNameCorrector(String sql) {
|
public String rewriteSql(String sql) {
|
||||||
Map<String, String> functionMap = new HashMap<>();
|
Map<String, String> functionMap = new HashMap<>();
|
||||||
functionMap.put("MONTH".toLowerCase(), "toMonth");
|
functionMap.put("MONTH".toLowerCase(), "toMonth");
|
||||||
functionMap.put("DAY".toLowerCase(), "toDayOfMonth");
|
functionMap.put("DAY".toLowerCase(), "toDayOfMonth");
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public interface DbAdaptor {
|
|||||||
|
|
||||||
String getDateFormat(String dateType, String dateFormat, String column);
|
String getDateFormat(String dateType, String dateFormat, String column);
|
||||||
|
|
||||||
String functionNameCorrector(String sql);
|
String rewriteSql(String sql);
|
||||||
|
|
||||||
List<String> getDBs(ConnectInfo connectInfo) throws SQLException;
|
List<String> getDBs(ConnectInfo connectInfo) throws SQLException;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public class DbAdaptorFactory {
|
|||||||
dbAdaptorMap.put(EngineType.H2.getName(), new H2Adaptor());
|
dbAdaptorMap.put(EngineType.H2.getName(), new H2Adaptor());
|
||||||
dbAdaptorMap.put(EngineType.POSTGRESQL.getName(), new PostgresqlAdaptor());
|
dbAdaptorMap.put(EngineType.POSTGRESQL.getName(), new PostgresqlAdaptor());
|
||||||
dbAdaptorMap.put(EngineType.OTHER.getName(), new DefaultDbAdaptor());
|
dbAdaptorMap.put(EngineType.OTHER.getName(), new DefaultDbAdaptor());
|
||||||
|
dbAdaptorMap.put(EngineType.DUCKDB.getName(), new DuckdbAdaptor());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DbAdaptor getEngineAdaptor(String engineType) {
|
public static DbAdaptor getEngineAdaptor(String engineType) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class DefaultDbAdaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String functionNameCorrector(String sql) {
|
public String rewriteSql(String sql) {
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.tencent.supersonic.headless.core.adaptor.db;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.DBColumn;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.FieldType;
|
||||||
|
import com.tencent.supersonic.headless.core.pojo.ConnectInfo;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class DuckdbAdaptor extends DefaultDbAdaptor {
|
||||||
|
|
||||||
|
protected ResultSet getResultSet(String schemaName, DatabaseMetaData metaData)
|
||||||
|
throws SQLException {
|
||||||
|
return metaData.getTables(schemaName, null, null, new String[] {"TABLE", "VIEW"});
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DBColumn> getColumns(ConnectInfo connectInfo, String schemaName, String tableName)
|
||||||
|
throws SQLException {
|
||||||
|
List<DBColumn> dbColumns = Lists.newArrayList();
|
||||||
|
DatabaseMetaData metaData = getDatabaseMetaData(connectInfo);
|
||||||
|
ResultSet columns = metaData.getColumns(schemaName, null, tableName, null);
|
||||||
|
while (columns.next()) {
|
||||||
|
String columnName = columns.getString("COLUMN_NAME");
|
||||||
|
String dataType = columns.getString("TYPE_NAME");
|
||||||
|
String remarks = columns.getString("REMARKS");
|
||||||
|
FieldType fieldType = classifyColumnType(dataType);
|
||||||
|
dbColumns.add(new DBColumn(columnName, dataType, remarks, fieldType));
|
||||||
|
}
|
||||||
|
return dbColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String rewriteSql(String sql) {
|
||||||
|
return sql.replaceAll("`", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -62,7 +62,7 @@ public class H2Adaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String functionNameCorrector(String sql) {
|
public String rewriteSql(String sql) {
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class MysqlAdaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String functionNameCorrector(String sql) {
|
public String rewriteSql(String sql) {
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class PostgresqlAdaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String functionNameCorrector(String sql) {
|
public String rewriteSql(String sql) {
|
||||||
Map<String, String> functionMap = new HashMap<>();
|
Map<String, String> functionMap = new HashMap<>();
|
||||||
functionMap.put("MONTH".toLowerCase(), "TO_CHAR");
|
functionMap.put("MONTH".toLowerCase(), "TO_CHAR");
|
||||||
functionMap.put("DAY".toLowerCase(), "TO_CHAR");
|
functionMap.put("DAY".toLowerCase(), "TO_CHAR");
|
||||||
@@ -78,7 +78,9 @@ public class PostgresqlAdaptor extends BaseDbAdaptor {
|
|||||||
}
|
}
|
||||||
return o;
|
return o;
|
||||||
});
|
});
|
||||||
return SqlReplaceHelper.replaceFunction(sql, functionMap, functionCall);
|
sql = SqlReplaceHelper.replaceFunction(sql, functionMap, functionCall);
|
||||||
|
sql = sql.replaceAll("`", "\"");
|
||||||
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getTables(ConnectInfo connectionInfo, String schemaName)
|
public List<String> getTables(ConnectInfo connectionInfo, String schemaName)
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package com.tencent.supersonic.headless.core.executor;
|
|||||||
import com.tencent.supersonic.common.calcite.Configuration;
|
import com.tencent.supersonic.common.calcite.Configuration;
|
||||||
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
||||||
import com.tencent.supersonic.headless.core.pojo.Materialization;
|
import com.tencent.supersonic.headless.core.pojo.Materialization;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.TimeRange;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteTable;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteTable;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteTable.Builder;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteTable.Builder;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.SchemaBuilder;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.SchemaBuilder;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.TimeRange;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.adapter.enumerable.EnumerableRules;
|
import org.apache.calcite.adapter.enumerable.EnumerableRules;
|
||||||
import org.apache.calcite.config.CalciteConnectionConfigImpl;
|
import org.apache.calcite.config.CalciteConnectionConfigImpl;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.tencent.supersonic.headless.core.pojo;
|
package com.tencent.supersonic.headless.core.pojo;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Ontology;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.tuple.Triple;
|
import org.apache.commons.lang3.tuple.Triple;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator;
|
package com.tencent.supersonic.headless.core.translator;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.calcite.SqlMergeWithUtils;
|
import com.tencent.supersonic.common.calcite.SqlMergeWithUtils;
|
||||||
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
|
||||||
import com.tencent.supersonic.headless.core.translator.converter.QueryConverter;
|
import com.tencent.supersonic.headless.core.translator.converter.QueryConverter;
|
||||||
|
import com.tencent.supersonic.headless.core.translator.optimizer.QueryOptimizer;
|
||||||
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -40,10 +40,6 @@ public class DefaultSemanticTranslator implements SemanticTranslator {
|
|||||||
if (StringUtils.isBlank(queryStatement.getSql())) {
|
if (StringUtils.isBlank(queryStatement.getSql())) {
|
||||||
throw new RuntimeException("parse exception: " + queryStatement.getErrMsg());
|
throw new RuntimeException("parse exception: " + queryStatement.getErrMsg());
|
||||||
}
|
}
|
||||||
if (!SqlSelectHelper.hasLimit(queryStatement.getSql())) {
|
|
||||||
queryStatement
|
|
||||||
.setSql(queryStatement.getSql() + " limit " + queryStatement.getLimit());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (QueryOptimizer queryOptimizer : ComponentFactory.getQueryOptimizers()) {
|
for (QueryOptimizer queryOptimizer : ComponentFactory.getQueryOptimizers()) {
|
||||||
queryOptimizer.rewrite(queryStatement);
|
queryOptimizer.rewrite(queryStatement);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import com.tencent.supersonic.common.jsqlparser.SqlAddHelper;
|
|||||||
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
||||||
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
|
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.sf.jsqlparser.expression.Expression;
|
import net.sf.jsqlparser.expression.Expression;
|
||||||
import net.sf.jsqlparser.expression.StringValue;
|
import net.sf.jsqlparser.expression.StringValue;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import com.tencent.supersonic.headless.core.pojo.Database;
|
|||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|||||||
@@ -12,11 +12,9 @@ import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
|
import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
|
||||||
import com.tencent.supersonic.headless.api.pojo.enums.MetricType;
|
import com.tencent.supersonic.headless.api.pojo.enums.MetricType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.*;
|
import com.tencent.supersonic.headless.api.pojo.response.*;
|
||||||
import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptor;
|
|
||||||
import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptorFactory;
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -40,7 +38,6 @@ public class SqlQueryConverter implements QueryConverter {
|
|||||||
@Override
|
@Override
|
||||||
public void convert(QueryStatement queryStatement) throws Exception {
|
public void convert(QueryStatement queryStatement) throws Exception {
|
||||||
convertNameToBizName(queryStatement);
|
convertNameToBizName(queryStatement);
|
||||||
rewriteFunction(queryStatement);
|
|
||||||
rewriteOrderBy(queryStatement);
|
rewriteOrderBy(queryStatement);
|
||||||
|
|
||||||
// fill sqlQuery
|
// fill sqlQuery
|
||||||
@@ -245,22 +242,6 @@ public class SqlQueryConverter implements QueryConverter {
|
|||||||
queryStatement.getSqlQueryParam().setSql(newSql);
|
queryStatement.getSqlQueryParam().setSql(newSql);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rewriteFunction(QueryStatement queryStatement) {
|
|
||||||
SemanticSchemaResp semanticSchemaResp = queryStatement.getSemanticSchemaResp();
|
|
||||||
DatabaseResp database = semanticSchemaResp.getDatabaseResp();
|
|
||||||
String sql = queryStatement.getSqlQueryParam().getSql();
|
|
||||||
if (Objects.isNull(database) || Objects.isNull(database.getType())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String type = database.getType();
|
|
||||||
DbAdaptor engineAdaptor = DbAdaptorFactory.getEngineAdaptor(type.toLowerCase());
|
|
||||||
if (Objects.nonNull(engineAdaptor)) {
|
|
||||||
String functionNameCorrector = engineAdaptor.functionNameCorrector(sql);
|
|
||||||
queryStatement.getSqlQueryParam().setSql(functionNameCorrector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected Map<String, String> getFieldNameToBizNameMap(SemanticSchemaResp semanticSchemaResp) {
|
protected Map<String, String> getFieldNameToBizNameMap(SemanticSchemaResp semanticSchemaResp) {
|
||||||
// support fieldName and field alias to bizName
|
// support fieldName and field alias to bizName
|
||||||
Map<String, String> dimensionResults = semanticSchemaResp.getDimensions().stream().flatMap(
|
Map<String, String> dimensionResults = semanticSchemaResp.getDimensions().stream().flatMap(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.tencent.supersonic.headless.api.pojo.enums.ModelDefineType;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
|
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils;
|
import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.core.pojo.Database;
|
|||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.SqlQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.tencent.supersonic.headless.core.translator.optimizer;
|
||||||
|
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||||
|
import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptor;
|
||||||
|
import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptorFactory;
|
||||||
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component("DbDialectOptimizer")
|
||||||
|
public class DbDialectOptimizer implements QueryOptimizer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rewrite(QueryStatement queryStatement) {
|
||||||
|
SemanticSchemaResp semanticSchemaResp = queryStatement.getSemanticSchemaResp();
|
||||||
|
DatabaseResp database = semanticSchemaResp.getDatabaseResp();
|
||||||
|
String sql = queryStatement.getSql();
|
||||||
|
if (Objects.isNull(database) || Objects.isNull(database.getType())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String type = database.getType();
|
||||||
|
DbAdaptor engineAdaptor = DbAdaptorFactory.getEngineAdaptor(type.toLowerCase());
|
||||||
|
if (Objects.nonNull(engineAdaptor)) {
|
||||||
|
String adaptedSql = engineAdaptor.rewriteSql(sql);
|
||||||
|
queryStatement.setSql(adaptedSql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator;
|
package com.tencent.supersonic.headless.core.translator.optimizer;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
import com.tencent.supersonic.headless.core.pojo.StructQueryParam;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator;
|
package com.tencent.supersonic.headless.core.translator.optimizer;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.tencent.supersonic.headless.core.translator.optimizer;
|
||||||
|
|
||||||
|
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
||||||
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component("ResultLimitOptimizer")
|
||||||
|
public class ResultLimitOptimizer implements QueryOptimizer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rewrite(QueryStatement queryStatement) {
|
||||||
|
if (!SqlSelectHelper.hasLimit(queryStatement.getSql())) {
|
||||||
|
queryStatement.setSql(queryStatement.getSql() + " limit " + queryStatement.getLimit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator;
|
package com.tencent.supersonic.headless.core.translator.parser;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
|
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.QueryParser;
|
import com.tencent.supersonic.headless.core.translator.parser.QueryParser;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Ontology;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.RuntimeOptions;
|
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.SqlBuilder;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import org.apache.calcite.plan.RelOptRuleCall;
|
import org.apache.calcite.plan.RelOptRuleCall;
|
||||||
import org.apache.calcite.plan.RelRule;
|
import org.apache.calcite.plan.RelRule;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.JoinRelation;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Ontology;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.calcite.schema.Schema;
|
import org.apache.calcite.schema.Schema;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import org.apache.calcite.DataContext;
|
import org.apache.calcite.DataContext;
|
||||||
import org.apache.calcite.linq4j.Enumerable;
|
import org.apache.calcite.linq4j.Enumerable;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import org.apache.calcite.rel.type.RelDataTypeFactory;
|
import org.apache.calcite.rel.type.RelDataTypeFactory;
|
||||||
import org.apache.calcite.sql.SqlOperatorTable;
|
import org.apache.calcite.sql.SqlOperatorTable;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.calcite.Configuration;
|
import com.tencent.supersonic.common.calcite.Configuration;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.calcite.Configuration;
|
import com.tencent.supersonic.common.calcite.Configuration;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
|
import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
|
||||||
import com.tencent.supersonic.headless.core.pojo.Database;
|
import com.tencent.supersonic.headless.core.pojo.Database;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.DataModelNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.render.FilterRender;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataModelNode;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.render.OutputRender;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.render.Renderer;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.render.FilterRender;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.render.SourceRender;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.render.OutputRender;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.render.Renderer;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.render.SourceRender;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.parser.SqlParser;
|
import org.apache.calcite.sql.parser.SqlParser;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.calcite.sql.SqlBasicCall;
|
import org.apache.calcite.sql.SqlBasicCall;
|
||||||
import org.apache.calcite.sql.SqlKind;
|
import org.apache.calcite.sql.SqlKind;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.common.calcite.Configuration;
|
import com.tencent.supersonic.common.calcite.Configuration;
|
||||||
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.*;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.SchemaBuilder;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.SchemaBuilder;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.sql.*;
|
import org.apache.calcite.sql.*;
|
||||||
import org.apache.calcite.sql.parser.SqlParser;
|
import org.apache.calcite.sql.parser.SqlParser;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import org.apache.calcite.sql.SqlCall;
|
import org.apache.calcite.sql.SqlCall;
|
||||||
import org.apache.calcite.sql.SqlInternalOperator;
|
import org.apache.calcite.sql.SqlInternalOperator;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import org.apache.calcite.sql.SqlBasicCall;
|
import org.apache.calcite.sql.SqlBasicCall;
|
||||||
import org.apache.calcite.sql.SqlIdentifier;
|
import org.apache.calcite.sql.SqlIdentifier;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Identify;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import org.apache.calcite.linq4j.Ord;
|
import org.apache.calcite.linq4j.Ord;
|
||||||
import org.apache.calcite.sql.SqlCall;
|
import org.apache.calcite.sql.SqlCall;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Measure;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.node;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.node;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.calcite.Configuration;
|
import com.tencent.supersonic.common.calcite.Configuration;
|
||||||
import com.tencent.supersonic.common.calcite.SemanticSqlDialect;
|
import com.tencent.supersonic.common.calcite.SemanticSqlDialect;
|
||||||
import com.tencent.supersonic.common.calcite.SqlDialectFactory;
|
import com.tencent.supersonic.common.calcite.SqlDialectFactory;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.FilterToGroupScanRule;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.FilterToGroupScanRule;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.plan.RelOptPlanner;
|
import org.apache.calcite.plan.RelOptPlanner;
|
||||||
import org.apache.calcite.plan.hep.HepPlanner;
|
import org.apache.calcite.plan.hep.HepPlanner;
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.render;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.render;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.TableView;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.FilterNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MetricNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import org.apache.calcite.sql.SqlIdentifier;
|
import org.apache.calcite.sql.SqlIdentifier;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.parser.SqlParserPos;
|
import org.apache.calcite.sql.parser.SqlParserPos;
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.render;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.render;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.TableView;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.AggFunctionNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.DataModelNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.FilterNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.IdentifyNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MetricNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.AggFunctionNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataModelNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Identify;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.JoinRelation;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.IdentifyNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Materialization;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.sql.JoinConditionType;
|
import org.apache.calcite.sql.JoinConditionType;
|
||||||
import org.apache.calcite.sql.SqlBasicCall;
|
import org.apache.calcite.sql.SqlBasicCall;
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.render;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.render;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.ColumnOrder;
|
import com.tencent.supersonic.common.pojo.ColumnOrder;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.TableView;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MetricNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.SqlNodeList;
|
import org.apache.calcite.sql.SqlNodeList;
|
||||||
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
|
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.render;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.render;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.TableView;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MeasureNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MetricNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Identify;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MeasureNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Measure;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.sql.render;
|
package com.tencent.supersonic.headless.core.translator.parser.calcite.render;
|
||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataModel;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.TableView;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.DataModelNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.DimensionNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.FilterNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.IdentifyNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.MetricNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.node.SemanticNode;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.DataModel;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataModelNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Dimension;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DimensionNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Identify;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Materialization;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.IdentifyNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Measure;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Metric;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.calcite.sql.SqlNode;
|
import org.apache.calcite.sql.SqlNode;
|
||||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||||
@@ -34,7 +34,7 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants.DIMENSION_DELIMITER;
|
import static com.tencent.supersonic.headless.core.translator.parser.s2sql.Constants.DIMENSION_DELIMITER;
|
||||||
|
|
||||||
/** process the table dataSet from the defined data model schema */
|
/** process the table dataSet from the defined data model schema */
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.core.pojo.Database;
|
import com.tencent.supersonic.headless.core.pojo.Database;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.tencent.supersonic.common.pojo.ColumnOrder;
|
import com.tencent.supersonic.common.pojo.ColumnOrder;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
public interface SemanticItem {
|
public interface SemanticItem {
|
||||||
String getName();
|
String getName();
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.headless.core.translator.calcite.s2sql;
|
package com.tencent.supersonic.headless.core.translator.parser.s2sql;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -4,9 +4,9 @@ import com.tencent.supersonic.common.util.ContextUtils;
|
|||||||
import com.tencent.supersonic.headless.core.cache.QueryCache;
|
import com.tencent.supersonic.headless.core.cache.QueryCache;
|
||||||
import com.tencent.supersonic.headless.core.executor.QueryAccelerator;
|
import com.tencent.supersonic.headless.core.executor.QueryAccelerator;
|
||||||
import com.tencent.supersonic.headless.core.executor.QueryExecutor;
|
import com.tencent.supersonic.headless.core.executor.QueryExecutor;
|
||||||
import com.tencent.supersonic.headless.core.translator.QueryOptimizer;
|
|
||||||
import com.tencent.supersonic.headless.core.translator.QueryParser;
|
|
||||||
import com.tencent.supersonic.headless.core.translator.converter.QueryConverter;
|
import com.tencent.supersonic.headless.core.translator.converter.QueryConverter;
|
||||||
|
import com.tencent.supersonic.headless.core.translator.optimizer.QueryOptimizer;
|
||||||
|
import com.tencent.supersonic.headless.core.translator.parser.QueryParser;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.core.io.support.SpringFactoriesLoader;
|
import org.springframework.core.io.support.SpringFactoriesLoader;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.core.parser.aggregate;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.CalciteQueryParser;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.CalciteQueryParser;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import com.tencent.supersonic.common.pojo.ModelRela;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
|
import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.*;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization.TimePartType;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.*;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.Materialization.TimePartType;
|
||||||
import com.tencent.supersonic.headless.server.pojo.yaml.*;
|
import com.tencent.supersonic.headless.server.pojo.yaml.*;
|
||||||
import com.tencent.supersonic.headless.server.service.SchemaService;
|
import com.tencent.supersonic.headless.server.service.SchemaService;
|
||||||
import com.tencent.supersonic.headless.server.utils.DatabaseConverter;
|
import com.tencent.supersonic.headless.server.utils.DatabaseConverter;
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package com.tencent.supersonic.headless.server.persistence.dataobject;
|
package com.tencent.supersonic.headless.server.persistence.dataobject;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@TableName("s2_available_date_info")
|
||||||
public class DateInfoDO {
|
public class DateInfoDO {
|
||||||
|
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
private Long id;
|
private Long id;
|
||||||
private String type;
|
private String type;
|
||||||
private Long itemId;
|
private Long itemId;
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package com.tencent.supersonic.headless.server.persistence.dataobject;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName("s2_query_stat_info")
|
||||||
|
public class QueryStatDO {
|
||||||
|
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
private String traceId;
|
||||||
|
private Long modelId;
|
||||||
|
private Long dataSetId;
|
||||||
|
@TableField("query_user")
|
||||||
|
private String user;
|
||||||
|
private String createdAt;
|
||||||
|
/** corresponding type, such as sql, struct, etc */
|
||||||
|
private String queryType;
|
||||||
|
/** NORMAL, PRE_FLUSH */
|
||||||
|
private Integer queryTypeBack;
|
||||||
|
private String querySqlCmd;
|
||||||
|
@TableField("sql_cmd_md5")
|
||||||
|
private String querySqlCmdMd5;
|
||||||
|
private String queryStructCmd;
|
||||||
|
@TableField("struct_cmd_md5")
|
||||||
|
private String queryStructCmdMd5;
|
||||||
|
private String sql;
|
||||||
|
private String sqlMd5;
|
||||||
|
private String queryEngine;
|
||||||
|
// private Long startTime;
|
||||||
|
private Long elapsedMs;
|
||||||
|
private String queryState;
|
||||||
|
private Boolean nativeQuery;
|
||||||
|
private String startDate;
|
||||||
|
private String endDate;
|
||||||
|
private String dimensions;
|
||||||
|
private String metrics;
|
||||||
|
private String selectCols;
|
||||||
|
private String aggCols;
|
||||||
|
private String filterCols;
|
||||||
|
private String groupByCols;
|
||||||
|
private String orderByCols;
|
||||||
|
private Boolean useResultCache;
|
||||||
|
private Boolean useSqlCache;
|
||||||
|
private String sqlCacheKey;
|
||||||
|
private String resultCacheKey;
|
||||||
|
private String queryOptMode;
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.tencent.supersonic.headless.server.persistence.mapper;
|
package com.tencent.supersonic.headless.server.persistence.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.tencent.supersonic.headless.api.pojo.ItemDateFilter;
|
import com.tencent.supersonic.headless.api.pojo.ItemDateFilter;
|
||||||
import com.tencent.supersonic.headless.server.persistence.dataobject.DateInfoDO;
|
import com.tencent.supersonic.headless.server.persistence.dataobject.DateInfoDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -7,9 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface DateInfoMapper {
|
public interface DateInfoMapper extends BaseMapper<DateInfoDO> {
|
||||||
|
|
||||||
Boolean upsertDateInfo(DateInfoDO dateInfoDO);
|
|
||||||
|
|
||||||
List<DateInfoDO> getDateInfos(ItemDateFilter itemDateFilter);
|
List<DateInfoDO> getDateInfos(ItemDateFilter itemDateFilter);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package com.tencent.supersonic.headless.server.persistence.mapper;
|
package com.tencent.supersonic.headless.server.persistence.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.tencent.supersonic.headless.api.pojo.QueryStat;
|
import com.tencent.supersonic.headless.api.pojo.QueryStat;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
|
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
|
||||||
|
import com.tencent.supersonic.headless.server.persistence.dataobject.QueryStatDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface StatMapper {
|
public interface StatMapper extends BaseMapper<QueryStatDO> {
|
||||||
|
|
||||||
Boolean createRecord(QueryStat queryStatInfo);
|
|
||||||
|
|
||||||
List<QueryStat> getStatInfo(ItemUseReq itemUseCommend);
|
List<QueryStat> getStatInfo(ItemUseReq itemUseCommend);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,6 @@ public interface DomainRepository {
|
|||||||
List<DomainDO> getDomainList();
|
List<DomainDO> getDomainList();
|
||||||
|
|
||||||
DomainDO getDomainById(Long id);
|
DomainDO getDomainById(Long id);
|
||||||
|
|
||||||
|
List<DomainDO> getDomainByBizName(String bizName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,5 +12,4 @@ public interface StatRepository {
|
|||||||
|
|
||||||
List<ItemUseResp> getStatInfo(ItemUseReq itemUseCommend);
|
List<ItemUseResp> getStatInfo(ItemUseReq itemUseCommend);
|
||||||
|
|
||||||
List<QueryStat> getQueryStatInfoWithoutCache(ItemUseReq itemUseCommend);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class DateInfoRepositoryImpl implements DateInfoRepository {
|
|||||||
private Integer batchUpsert(List<DateInfoDO> dateInfoDOList) {
|
private Integer batchUpsert(List<DateInfoDO> dateInfoDOList) {
|
||||||
Stopwatch stopwatch = Stopwatch.createStarted();
|
Stopwatch stopwatch = Stopwatch.createStarted();
|
||||||
for (DateInfoDO dateInfoDO : dateInfoDOList) {
|
for (DateInfoDO dateInfoDO : dateInfoDOList) {
|
||||||
dateInfoMapper.upsertDateInfo(dateInfoDO);
|
dateInfoMapper.insertOrUpdate(dateInfoDO);
|
||||||
}
|
}
|
||||||
log.info("before final, elapsed time:{}", stopwatch.elapsed(TimeUnit.MILLISECONDS));
|
log.info("before final, elapsed time:{}", stopwatch.elapsed(TimeUnit.MILLISECONDS));
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.tencent.supersonic.headless.server.persistence.repository.impl;
|
package com.tencent.supersonic.headless.server.persistence.repository.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.tencent.supersonic.headless.server.persistence.dataobject.DomainDO;
|
import com.tencent.supersonic.headless.server.persistence.dataobject.DomainDO;
|
||||||
import com.tencent.supersonic.headless.server.persistence.mapper.DomainDOMapper;
|
import com.tencent.supersonic.headless.server.persistence.mapper.DomainDOMapper;
|
||||||
@@ -43,4 +44,12 @@ public class DomainRepositoryImpl implements DomainRepository {
|
|||||||
public DomainDO getDomainById(Long id) {
|
public DomainDO getDomainById(Long id) {
|
||||||
return domainDOMapper.selectById(id);
|
return domainDOMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DomainDO> getDomainByBizName(String bizName) {
|
||||||
|
QueryWrapper<DomainDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(DomainDO::getBizName, bizName);
|
||||||
|
return domainDOMapper.selectList(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.QueryStat;
|
import com.tencent.supersonic.headless.api.pojo.QueryStat;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
|
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.ItemUseResp;
|
import com.tencent.supersonic.headless.api.pojo.response.ItemUseResp;
|
||||||
|
import com.tencent.supersonic.headless.server.persistence.dataobject.QueryStatDO;
|
||||||
import com.tencent.supersonic.headless.server.persistence.mapper.StatMapper;
|
import com.tencent.supersonic.headless.server.persistence.mapper.StatMapper;
|
||||||
import com.tencent.supersonic.headless.server.persistence.repository.StatRepository;
|
import com.tencent.supersonic.headless.server.persistence.repository.StatRepository;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -36,7 +38,9 @@ public class StatRepositoryImpl implements StatRepository {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean createRecord(QueryStat queryStatInfo) {
|
public Boolean createRecord(QueryStat queryStatInfo) {
|
||||||
return statMapper.createRecord(queryStatInfo);
|
QueryStatDO queryStatDO = new QueryStatDO();
|
||||||
|
BeanUtils.copyProperties(queryStatInfo, queryStatDO);
|
||||||
|
return statMapper.insertOrUpdate(queryStatDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -66,11 +70,6 @@ public class StatRepositoryImpl implements StatRepository {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<QueryStat> getQueryStatInfoWithoutCache(ItemUseReq itemUseCommend) {
|
|
||||||
return statMapper.getStatInfo(itemUseCommend);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateStatMapInfo(Map<String, Long> map, String dimensions, String type,
|
private void updateStatMapInfo(Map<String, Long> map, String dimensions, String type,
|
||||||
Long dataSetId) {
|
Long dataSetId) {
|
||||||
if (StringUtils.isNotEmpty(dimensions)) {
|
if (StringUtils.isNotEmpty(dimensions)) {
|
||||||
@@ -92,14 +91,4 @@ public class StatRepositoryImpl implements StatRepository {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateStatMapInfo(Map<String, Long> map, Long modelId, String type) {
|
|
||||||
if (Objects.nonNull(modelId)) {
|
|
||||||
String key = type + AT_SYMBOL + AT_SYMBOL + modelId;
|
|
||||||
if (map.containsKey(key)) {
|
|
||||||
map.put(key, map.get(key) + 1);
|
|
||||||
} else {
|
|
||||||
map.put(key, 1L);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,14 @@ public class ModelController {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/createModelBatch")
|
||||||
|
public Boolean createModelBatch(@RequestBody ModelBuildReq modelBuildReq,
|
||||||
|
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||||
|
User user = UserHolder.findUser(request, response);
|
||||||
|
modelService.createModel(modelBuildReq, user);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/updateModel")
|
@PostMapping("/updateModel")
|
||||||
public Boolean updateModel(@RequestBody ModelReq modelReq, HttpServletRequest request,
|
public Boolean updateModel(@RequestBody ModelReq modelReq, HttpServletRequest request,
|
||||||
HttpServletResponse response) throws Exception {
|
HttpServletResponse response) throws Exception {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.server.service;
|
|||||||
|
|
||||||
import com.tencent.supersonic.common.pojo.User;
|
import com.tencent.supersonic.common.pojo.User;
|
||||||
import com.tencent.supersonic.headless.api.pojo.DBColumn;
|
import com.tencent.supersonic.headless.api.pojo.DBColumn;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.DataType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq;
|
import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.ModelBuildReq;
|
import com.tencent.supersonic.headless.api.pojo.request.ModelBuildReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.SqlExecuteReq;
|
import com.tencent.supersonic.headless.api.pojo.request.SqlExecuteReq;
|
||||||
@@ -17,6 +18,8 @@ public interface DatabaseService {
|
|||||||
|
|
||||||
SemanticQueryResp executeSql(String sql, DatabaseResp databaseResp);
|
SemanticQueryResp executeSql(String sql, DatabaseResp databaseResp);
|
||||||
|
|
||||||
|
List<DatabaseResp> getDatabaseByType(DataType dataType);
|
||||||
|
|
||||||
SemanticQueryResp executeSql(SqlExecuteReq sqlExecuteReq, Long id, User user);
|
SemanticQueryResp executeSql(SqlExecuteReq sqlExecuteReq, Long id, User user);
|
||||||
|
|
||||||
DatabaseResp getDatabase(Long id, User user);
|
DatabaseResp getDatabase(Long id, User user);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.tencent.supersonic.common.pojo.enums.AuthType;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.request.DomainReq;
|
import com.tencent.supersonic.headless.api.pojo.request.DomainReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.DomainUpdateReq;
|
import com.tencent.supersonic.headless.api.pojo.request.DomainUpdateReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
|
import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
|
||||||
|
import com.tencent.supersonic.headless.server.persistence.dataobject.DomainDO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -32,5 +33,7 @@ public interface DomainService {
|
|||||||
|
|
||||||
Set<DomainResp> getDomainAuthSet(User user, AuthType authTypeEnum);
|
Set<DomainResp> getDomainAuthSet(User user, AuthType authTypeEnum);
|
||||||
|
|
||||||
|
List<DomainDO> getDomainByBizName(String bizName);
|
||||||
|
|
||||||
Set<DomainResp> getDomainChildren(List<Long> domainId);
|
Set<DomainResp> getDomainChildren(List<Long> domainId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ public interface ModelService {
|
|||||||
|
|
||||||
ModelResp createModel(ModelReq datasourceReq, User user) throws Exception;
|
ModelResp createModel(ModelReq datasourceReq, User user) throws Exception;
|
||||||
|
|
||||||
|
List<ModelResp> createModel(ModelBuildReq modelBuildReq, User user) throws Exception;
|
||||||
|
|
||||||
ModelResp updateModel(ModelReq datasourceReq, User user) throws Exception;
|
ModelResp updateModel(ModelReq datasourceReq, User user) throws Exception;
|
||||||
|
|
||||||
List<ModelResp> getModelList(MetaFilter metaFilter);
|
List<ModelResp> getModelList(MetaFilter metaFilter);
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package com.tencent.supersonic.headless.server.service.impl;
|
package com.tencent.supersonic.headless.server.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||||
import com.tencent.supersonic.common.pojo.User;
|
import com.tencent.supersonic.common.pojo.User;
|
||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.DBColumn;
|
import com.tencent.supersonic.headless.api.pojo.DBColumn;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.DataType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq;
|
import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.ModelBuildReq;
|
import com.tencent.supersonic.headless.api.pojo.request.ModelBuildReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.SqlExecuteReq;
|
import com.tencent.supersonic.headless.api.pojo.request.SqlExecuteReq;
|
||||||
@@ -131,6 +133,15 @@ public class DatabaseServiceImpl extends ServiceImpl<DatabaseDOMapper, DatabaseD
|
|||||||
return databaseResp;
|
return databaseResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DatabaseResp> getDatabaseByType(DataType dataType) {
|
||||||
|
QueryWrapper<DatabaseDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(DatabaseDO::getType, dataType.getFeature());
|
||||||
|
List<DatabaseDO> list = list(queryWrapper);
|
||||||
|
return list.stream().map(DatabaseConverter::convertWithPassword)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SemanticQueryResp executeSql(SqlExecuteReq sqlExecuteReq, Long id, User user) {
|
public SemanticQueryResp executeSql(SqlExecuteReq sqlExecuteReq, Long id, User user) {
|
||||||
DatabaseResp databaseResp = getDatabase(id);
|
DatabaseResp databaseResp = getDatabase(id);
|
||||||
|
|||||||
@@ -179,6 +179,11 @@ public class DomainServiceImpl implements DomainService {
|
|||||||
.collect(Collectors.toMap(DomainResp::getId, a -> a, (k1, k2) -> k1));
|
.collect(Collectors.toMap(DomainResp::getId, a -> a, (k1, k2) -> k1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DomainDO> getDomainByBizName(String bizName) {
|
||||||
|
return domainRepository.getDomainByBizName(bizName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<DomainResp> getDomainChildren(List<Long> domainIds) {
|
public Set<DomainResp> getDomainChildren(List<Long> domainIds) {
|
||||||
Set<DomainResp> childDomains = new HashSet<>();
|
Set<DomainResp> childDomains = new HashSet<>();
|
||||||
|
|||||||
@@ -125,6 +125,19 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
return ModelConverter.convert(modelDO);
|
return ModelConverter.convert(modelDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModelResp> createModel(ModelBuildReq modelBuildReq, User user) throws Exception {
|
||||||
|
List<ModelResp> modelResps = Lists.newArrayList();
|
||||||
|
Map<String, ModelSchema> modelSchemaMap = buildModelSchema(modelBuildReq);
|
||||||
|
for (Map.Entry<String, ModelSchema> entry : modelSchemaMap.entrySet()) {
|
||||||
|
ModelReq modelReq =
|
||||||
|
ModelConverter.convert(entry.getValue(), modelBuildReq, entry.getKey());
|
||||||
|
ModelResp modelResp = createModel(modelReq, user);
|
||||||
|
modelResps.add(modelResp);
|
||||||
|
}
|
||||||
|
return modelResps;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public ModelResp updateModel(ModelReq modelReq, User user) throws Exception {
|
public ModelResp updateModel(ModelReq modelReq, User user) throws Exception {
|
||||||
@@ -231,6 +244,9 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<DbSchema> getDbSchemes(ModelBuildReq modelBuildReq) throws SQLException {
|
private List<DbSchema> getDbSchemes(ModelBuildReq modelBuildReq) throws SQLException {
|
||||||
|
if (!CollectionUtils.isEmpty(modelBuildReq.getDbSchemas())) {
|
||||||
|
return modelBuildReq.getDbSchemas();
|
||||||
|
}
|
||||||
Map<String, List<DBColumn>> dbColumnMap = databaseService.getDbColumns(modelBuildReq);
|
Map<String, List<DBColumn>> dbColumnMap = databaseService.getDbColumns(modelBuildReq);
|
||||||
return convert(dbColumnMap, modelBuildReq);
|
return convert(dbColumnMap, modelBuildReq);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.tencent.supersonic.common.pojo.User;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.StatusEnum;
|
import com.tencent.supersonic.common.pojo.enums.StatusEnum;
|
||||||
import com.tencent.supersonic.common.util.BeanMapper;
|
import com.tencent.supersonic.common.util.BeanMapper;
|
||||||
import com.tencent.supersonic.common.util.JsonUtil;
|
import com.tencent.supersonic.common.util.JsonUtil;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.ColumnSchema;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Dim;
|
import com.tencent.supersonic.headless.api.pojo.Dim;
|
||||||
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
|
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Identify;
|
import com.tencent.supersonic.headless.api.pojo.Identify;
|
||||||
@@ -14,11 +15,16 @@ import com.tencent.supersonic.headless.api.pojo.Measure;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.MeasureParam;
|
import com.tencent.supersonic.headless.api.pojo.MeasureParam;
|
||||||
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
|
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
|
||||||
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.ModelSchema;
|
||||||
import com.tencent.supersonic.headless.api.pojo.enums.DimensionType;
|
import com.tencent.supersonic.headless.api.pojo.enums.DimensionType;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.FieldType;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.IdentifyType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.enums.MetricDefineType;
|
import com.tencent.supersonic.headless.api.pojo.enums.MetricDefineType;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.enums.ModelDefineType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.enums.SemanticType;
|
import com.tencent.supersonic.headless.api.pojo.enums.SemanticType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.DimensionReq;
|
import com.tencent.supersonic.headless.api.pojo.request.DimensionReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.MetricReq;
|
import com.tencent.supersonic.headless.api.pojo.request.MetricReq;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.request.ModelBuildReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.ModelReq;
|
import com.tencent.supersonic.headless.api.pojo.request.ModelReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
|
import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.MeasureResp;
|
import com.tencent.supersonic.headless.api.pojo.response.MeasureResp;
|
||||||
@@ -156,6 +162,49 @@ public class ModelConverter {
|
|||||||
return dimensionReq;
|
return dimensionReq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ModelReq convert(ModelSchema modelSchema, ModelBuildReq modelBuildReq,
|
||||||
|
String tableName) {
|
||||||
|
ModelReq modelReq = new ModelReq();
|
||||||
|
modelReq.setName(modelSchema.getName());
|
||||||
|
modelReq.setBizName(modelSchema.getBizName());
|
||||||
|
modelReq.setDatabaseId(modelBuildReq.getDatabaseId());
|
||||||
|
modelReq.setDomainId(modelBuildReq.getDomainId());
|
||||||
|
ModelDetail modelDetail = new ModelDetail();
|
||||||
|
if (StringUtils.isNotBlank(modelBuildReq.getSql())) {
|
||||||
|
modelDetail.setQueryType(ModelDefineType.SQL_QUERY.getName());
|
||||||
|
modelDetail.setSqlQuery(modelBuildReq.getSql());
|
||||||
|
} else {
|
||||||
|
modelDetail.setQueryType(ModelDefineType.TABLE_QUERY.getName());
|
||||||
|
modelDetail.setTableQuery(String.format("%s.%s", modelBuildReq.getDb(), tableName));
|
||||||
|
}
|
||||||
|
for (ColumnSchema columnSchema : modelSchema.getColumnSchemas()) {
|
||||||
|
FieldType fieldType = columnSchema.getFiledType();
|
||||||
|
if (getIdentifyType(fieldType) != null) {
|
||||||
|
Identify identify = new Identify(columnSchema.getName(),
|
||||||
|
getIdentifyType(fieldType).name(), columnSchema.getColumnName(), 1);
|
||||||
|
modelDetail.getIdentifiers().add(identify);
|
||||||
|
} else if (FieldType.measure.equals(fieldType)) {
|
||||||
|
Measure measure = new Measure(columnSchema.getName(), columnSchema.getColumnName(),
|
||||||
|
columnSchema.getAgg().getOperator(), 1);
|
||||||
|
modelDetail.getMeasures().add(measure);
|
||||||
|
} else {
|
||||||
|
Dim dim = new Dim(columnSchema.getName(), columnSchema.getColumnName(),
|
||||||
|
DimensionType.valueOf(columnSchema.getFiledType().name()), 1);
|
||||||
|
modelDetail.getDimensions().add(dim);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
modelReq.setModelDetail(modelDetail);
|
||||||
|
return modelReq;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IdentifyType getIdentifyType(FieldType fieldType) {
|
||||||
|
if (FieldType.foreign_key.equals(fieldType) || FieldType.primary_key.equals(fieldType)) {
|
||||||
|
return IdentifyType.primary;
|
||||||
|
} else {
|
||||||
|
return IdentifyType.foreign;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static List<ModelResp> convertList(List<ModelDO> modelDOS) {
|
public static List<ModelResp> convertList(List<ModelDO> modelDOS) {
|
||||||
List<ModelResp> modelDescs = Lists.newArrayList();
|
List<ModelResp> modelDescs = Lists.newArrayList();
|
||||||
if (!CollectionUtils.isEmpty(modelDOS)) {
|
if (!CollectionUtils.isEmpty(modelDOS)) {
|
||||||
|
|||||||
@@ -40,21 +40,6 @@
|
|||||||
<result column="query_opt_mode" property="queryOptMode"/>
|
<result column="query_opt_mode" property="queryOptMode"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<insert id="createRecord">
|
|
||||||
insert into s2_query_stat_info
|
|
||||||
(
|
|
||||||
trace_id, model_id, data_set_id, `user`, query_type, query_type_back, query_sql_cmd, sql_cmd_md5, query_struct_cmd, struct_cmd_md5, `sql`, sql_md5, query_engine,
|
|
||||||
elapsed_ms, query_state, native_query, start_date, end_date, dimensions, metrics, select_cols, agg_cols, filter_cols, group_by_cols,
|
|
||||||
order_by_cols, use_result_cache, use_sql_cache, sql_cache_key, result_cache_key, query_opt_mode
|
|
||||||
)
|
|
||||||
values
|
|
||||||
(
|
|
||||||
#{traceId}, #{modelId}, #{dataSetId}, #{user}, #{queryType}, #{queryTypeBack}, #{querySqlCmd}, #{querySqlCmdMd5}, #{queryStructCmd}, #{queryStructCmdMd5}, #{sql}, #{sqlMd5}, #{queryEngine},
|
|
||||||
#{elapsedMs}, #{queryState}, #{nativeQuery}, #{startDate}, #{endDate}, #{dimensions}, #{metrics}, #{selectCols}, #{aggCols}, #{filterCols}, #{groupByCols},
|
|
||||||
#{orderByCols}, #{useResultCache}, #{useSqlCache}, #{sqlCacheKey}, #{resultCacheKey}, #{queryOptMode}
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<select id="getStatInfo"
|
<select id="getStatInfo"
|
||||||
resultType="com.tencent.supersonic.headless.api.pojo.QueryStat">
|
resultType="com.tencent.supersonic.headless.api.pojo.QueryStat">
|
||||||
select *
|
select *
|
||||||
|
|||||||
@@ -17,22 +17,6 @@
|
|||||||
<result column="date_period" jdbcType="VARCHAR" property="datePeriod"/>
|
<result column="date_period" jdbcType="VARCHAR" property="datePeriod"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<insert id="upsertDateInfo">
|
|
||||||
insert into s2_available_date_info
|
|
||||||
(`type`, item_id, date_format, start_date, end_date, unavailable_date, created_by,
|
|
||||||
updated_by,date_period)
|
|
||||||
values (#{type}, #{itemId}, #{dateFormat}, #{startDate}, #{endDate}, #{unavailableDateList},
|
|
||||||
#{createdBy}, #{updatedBy}, #{datePeriod}) ON DUPLICATE KEY
|
|
||||||
UPDATE
|
|
||||||
date_format = #{dateFormat},
|
|
||||||
start_date = #{startDate},
|
|
||||||
end_date = #{endDate},
|
|
||||||
unavailable_date = #{unavailableDateList},
|
|
||||||
created_by = #{createdBy},
|
|
||||||
updated_by = #{updatedBy},
|
|
||||||
date_period = #{datePeriod}
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<select id="getDateInfos" resultMap="BaseResultMap">
|
<select id="getDateInfos" resultMap="BaseResultMap">
|
||||||
select e.*
|
select e.*
|
||||||
from s2_available_date_info e
|
from s2_available_date_info e
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import com.tencent.supersonic.common.pojo.ColumnOrder;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
import com.tencent.supersonic.common.pojo.enums.EngineType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.SqlParserResp;
|
import com.tencent.supersonic.headless.api.pojo.response.SqlParserResp;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.OntologyQueryParam;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.S2CalciteSchema;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.S2CalciteSchema;
|
import com.tencent.supersonic.headless.core.translator.parser.calcite.SqlBuilder;
|
||||||
import com.tencent.supersonic.headless.core.translator.calcite.sql.SqlBuilder;
|
import com.tencent.supersonic.headless.core.translator.parser.s2sql.OntologyQueryParam;
|
||||||
import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager;
|
import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager;
|
||||||
import com.tencent.supersonic.headless.server.pojo.yaml.*;
|
import com.tencent.supersonic.headless.server.pojo.yaml.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|||||||
@@ -31,11 +31,13 @@ com.tencent.supersonic.headless.core.translator.converter.QueryConverter=\
|
|||||||
com.tencent.supersonic.headless.core.translator.converter.SqlQueryConverter,\
|
com.tencent.supersonic.headless.core.translator.converter.SqlQueryConverter,\
|
||||||
com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter
|
com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter
|
||||||
|
|
||||||
com.tencent.supersonic.headless.core.translator.QueryOptimizer=\
|
com.tencent.supersonic.headless.core.translator.optimizer.QueryOptimizer=\
|
||||||
com.tencent.supersonic.headless.core.translator.DetailQueryOptimizer
|
com.tencent.supersonic.headless.core.translator.optimizer.DetailQueryOptimizer,\
|
||||||
|
com.tencent.supersonic.headless.core.translator.optimizer.DbDialectOptimizer,\
|
||||||
|
com.tencent.supersonic.headless.core.translator.optimizer.ResultLimitOptimizer
|
||||||
|
|
||||||
com.tencent.supersonic.headless.core.translator.QueryParser=\
|
com.tencent.supersonic.headless.core.translator.parser.QueryParser=\
|
||||||
com.tencent.supersonic.headless.core.translator.calcite.CalciteQueryParser
|
com.tencent.supersonic.headless.core.translator.parser.calcite.CalciteQueryParser
|
||||||
|
|
||||||
com.tencent.supersonic.headless.core.executor.QueryExecutor=\
|
com.tencent.supersonic.headless.core.executor.QueryExecutor=\
|
||||||
com.tencent.supersonic.headless.core.executor.JdbcExecutor
|
com.tencent.supersonic.headless.core.executor.JdbcExecutor
|
||||||
|
|||||||
@@ -108,9 +108,9 @@ public abstract class S2BaseDemo implements CommandLineRunner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract void doRun();
|
protected abstract void doRun();
|
||||||
|
|
||||||
abstract boolean checkNeedToRun();
|
protected abstract boolean checkNeedToRun();
|
||||||
|
|
||||||
protected DatabaseResp addDatabaseIfNotExist() {
|
protected DatabaseResp addDatabaseIfNotExist() {
|
||||||
List<DatabaseResp> databaseList = databaseService.getDatabaseList(defaultUser);
|
List<DatabaseResp> databaseList = databaseService.getDatabaseList(defaultUser);
|
||||||
@@ -121,13 +121,7 @@ public abstract class S2BaseDemo implements CommandLineRunner {
|
|||||||
DatabaseReq databaseReq = new DatabaseReq();
|
DatabaseReq databaseReq = new DatabaseReq();
|
||||||
databaseReq.setName("S2数据库DEMO");
|
databaseReq.setName("S2数据库DEMO");
|
||||||
databaseReq.setDescription("样例数据库实例仅用于体验");
|
databaseReq.setDescription("样例数据库实例仅用于体验");
|
||||||
if (StringUtils.isNotBlank(url)
|
databaseReq.setType(DataType.POSTGRESQL.getFeature());
|
||||||
&& url.toLowerCase().contains(DataType.MYSQL.getFeature().toLowerCase())) {
|
|
||||||
databaseReq.setType(DataType.MYSQL.getFeature());
|
|
||||||
databaseReq.setVersion("5.7");
|
|
||||||
} else {
|
|
||||||
databaseReq.setType(DataType.H2.getFeature());
|
|
||||||
}
|
|
||||||
databaseReq.setUrl(url);
|
databaseReq.setUrl(url);
|
||||||
databaseReq.setUsername(dataSourceProperties.getUsername());
|
databaseReq.setUsername(dataSourceProperties.getUsername());
|
||||||
databaseReq
|
databaseReq
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user