[improvement][launcher]Refactor unit tests and demo data.

[improvement][launcher]Refactor unit tests and demo data.

[improvement][launcher]Refactor unit tests and demo data.

[improvement][launcher]Refactor unit tests and demo data.
This commit is contained in:
jerryjzhang
2024-12-01 16:23:05 +08:00
parent 1c73453c5f
commit 0f1c50167d
84 changed files with 2097 additions and 7421 deletions

View File

@@ -1,5 +1,8 @@
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.ToString;
@@ -7,9 +10,10 @@ import java.util.Date;
@Data
@ToString
@TableName("s2_chat_config")
public class ChatConfigDO {
/** database auto-increment primary key */
@TableId(type = IdType.AUTO)
private Long id;
private Long modelId;

View File

@@ -1,15 +1,21 @@
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 java.io.Serializable;
import java.time.Instant;
@Data
@TableName("s2_chat_context")
public class ChatContextDO implements Serializable {
@TableId
private Integer chatId;
private Instant modifiedAt;
@TableField("query_user")
private String user;
private String queryText;
private String semanticParse;

View File

@@ -1,5 +1,6 @@
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.persistence.dataobject.ChatConfigDO;
import org.apache.ibatis.annotations.Mapper;
@@ -7,11 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ChatConfigMapper {
Long addConfig(ChatConfigDO chaConfigPO);
Long editConfig(ChatConfigDO chaConfigPO);
public interface ChatConfigMapper extends BaseMapper<ChatConfigDO> {
List<ChatConfigDO> search(ChatConfigFilterInternal filterInternal);

View File

@@ -1,14 +1,11 @@
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 org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ChatContextMapper {
public interface ChatContextMapper extends BaseMapper<ChatContextDO> {
ChatContextDO getContextByChatId(Integer chatId);
int updateContext(ChatContextDO contextDO);
int addContext(ChatContextDO contextDO);
}

View File

@@ -32,15 +32,15 @@ public class ChatConfigRepositoryImpl implements ChatConfigRepository {
@Override
public Long createConfig(ChatConfig chaConfig) {
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
chatConfigMapper.addConfig(chaConfigDO);
chatConfigMapper.insert(chaConfigDO);
return chaConfigDO.getId();
}
@Override
public Long updateConfig(ChatConfig chaConfig) {
ChatConfigDO chaConfigDO = chatConfigHelper.chatConfig2DO(chaConfig);
return chatConfigMapper.editConfig(chaConfigDO);
chatConfigMapper.updateById(chaConfigDO);
return chaConfigDO.getId();
}
@Override

View File

@@ -35,12 +35,7 @@ public class ChatContextRepositoryImpl implements ChatContextRepository {
@Override
public void updateContext(ChatContext chatCtx) {
ChatContextDO context = cast(chatCtx);
if (chatContextMapper.getContextByChatId(chatCtx.getChatId()) == null) {
chatContextMapper.addContext(context);
} else {
chatContextMapper.updateContext(context);
}
chatContextMapper.insertOrUpdate(cast(chatCtx));
}
private ChatContext cast(ChatContextDO contextDO) {

View File

@@ -20,54 +20,6 @@
<result column="updated_at" property="updatedAt"/>
</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 *
from s2_chat_config

View File

@@ -20,11 +20,4 @@
from s2_chat_context where chat_id=#{chatId} limit 1
</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>

View File

@@ -74,7 +74,6 @@ public class SqlValidHelper {
CCJSqlParserUtil.parse(sql);
return true;
} catch (Exception e) {
log.error("isValidSQL parse:{}", e);
return false;
}
}

View File

@@ -78,7 +78,9 @@ public class PostgresqlAdaptor extends BaseDbAdaptor {
}
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)

View File

@@ -1,10 +1,15 @@
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;
@Data
@TableName("s2_available_date_info")
public class DateInfoDO {
@TableId(type = IdType.AUTO)
private Long id;
private String type;
private Long itemId;

View File

@@ -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;
}

View File

@@ -1,5 +1,6 @@
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.server.persistence.dataobject.DateInfoDO;
import org.apache.ibatis.annotations.Mapper;
@@ -7,9 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface DateInfoMapper {
Boolean upsertDateInfo(DateInfoDO dateInfoDO);
public interface DateInfoMapper extends BaseMapper<DateInfoDO> {
List<DateInfoDO> getDateInfos(ItemDateFilter itemDateFilter);
}

View File

@@ -1,15 +1,15 @@
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.request.ItemUseReq;
import com.tencent.supersonic.headless.server.persistence.dataobject.QueryStatDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface StatMapper {
Boolean createRecord(QueryStat queryStatInfo);
public interface StatMapper extends BaseMapper<QueryStatDO> {
List<QueryStat> getStatInfo(ItemUseReq itemUseCommend);
}

View File

@@ -12,5 +12,4 @@ public interface StatRepository {
List<ItemUseResp> getStatInfo(ItemUseReq itemUseCommend);
List<QueryStat> getQueryStatInfoWithoutCache(ItemUseReq itemUseCommend);
}

View File

@@ -66,7 +66,7 @@ public class DateInfoRepositoryImpl implements DateInfoRepository {
private Integer batchUpsert(List<DateInfoDO> dateInfoDOList) {
Stopwatch stopwatch = Stopwatch.createStarted();
for (DateInfoDO dateInfoDO : dateInfoDOList) {
dateInfoMapper.upsertDateInfo(dateInfoDO);
dateInfoMapper.insertOrUpdate(dateInfoDO);
}
log.info("before final, elapsed time:{}", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return 0;

View File

@@ -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.request.ItemUseReq;
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.repository.StatRepository;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
@@ -36,7 +38,9 @@ public class StatRepositoryImpl implements StatRepository {
@Override
public Boolean createRecord(QueryStat queryStatInfo) {
return statMapper.createRecord(queryStatInfo);
QueryStatDO queryStatDO = new QueryStatDO();
BeanUtils.copyProperties(queryStatInfo, queryStatDO);
return statMapper.insertOrUpdate(queryStatDO);
}
@Override
@@ -66,11 +70,6 @@ public class StatRepositoryImpl implements StatRepository {
.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,
Long dataSetId) {
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);
}
}
}
}

View File

@@ -40,21 +40,6 @@
<result column="query_opt_mode" property="queryOptMode"/>
</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"
resultType="com.tencent.supersonic.headless.api.pojo.QueryStat">
select *

View File

@@ -17,22 +17,6 @@
<result column="date_period" jdbcType="VARCHAR" property="datePeriod"/>
</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 e.*
from s2_available_date_info e

View File

@@ -121,13 +121,7 @@ public abstract class S2BaseDemo implements CommandLineRunner {
DatabaseReq databaseReq = new DatabaseReq();
databaseReq.setName("S2数据库DEMO");
databaseReq.setDescription("样例数据库实例仅用于体验");
if (StringUtils.isNotBlank(url)
&& url.toLowerCase().contains(DataType.MYSQL.getFeature().toLowerCase())) {
databaseReq.setType(DataType.MYSQL.getFeature());
databaseReq.setVersion("5.7");
} else {
databaseReq.setType(DataType.H2.getFeature());
}
databaseReq.setType(DataType.POSTGRESQL.getFeature());
databaseReq.setUrl(url);
databaseReq.setUsername(dataSourceProperties.getUsername());
databaseReq

View File

@@ -33,6 +33,8 @@ import java.util.*;
@Order(2)
public class S2CompanyDemo extends S2BaseDemo {
public static final String AGENT_NAME = "企业分析助手";
public void doRun() {
try {
DomainResp domain = addDomain();
@@ -45,7 +47,8 @@ public class S2CompanyDemo extends S2BaseDemo {
addModelRela(domain, model_brand_revenue, model_brand, "brand_id");
DataSetResp dataset = addDataSet(domain);
addAgent(dataset.getId());
Long dataSetId = dataset.getId();
addAgent(dataSetId);
} catch (Exception e) {
log.error("Failed to add bench mark demo data", e);
}
@@ -229,9 +232,9 @@ public class S2CompanyDemo extends S2BaseDemo {
modelRelaService.save(modelRelaReq, defaultUser);
}
private void addAgent(Long dataSetId) {
private Agent addAgent(Long dataSetId) {
Agent agent = new Agent();
agent.setName("企业分析助手");
agent.setName(AGENT_NAME);
agent.setDescription("帮忙您对企业的员工数、收入、利润经营指标分析");
agent.setStatus(1);
agent.setEnableSearch(1);
@@ -253,6 +256,6 @@ public class S2CompanyDemo extends S2BaseDemo {
chatAppConfig.values().forEach(app -> app.setChatModelId(demoChatModel.getId()));
agent.setChatAppConfig(chatAppConfig);
agentService.createAgent(agent, defaultUser);
return agentService.createAgent(agent, defaultUser);
}
}

View File

@@ -45,6 +45,8 @@ import java.util.Map;
@Order(3)
public class S2SingerDemo extends S2BaseDemo {
public static final String AGENT_NAME = "艺人分析助手";
public void doRun() {
try {
DomainResp singerDomain = addDomain();
@@ -147,7 +149,7 @@ public class S2SingerDemo extends S2BaseDemo {
private void addAgent(long dataSetId) {
Agent agent = new Agent();
agent.setName("艺人分析助手");
agent.setName(AGENT_NAME);
agent.setDescription("帮忙您对不同流派、区域的艺人做分析查询");
agent.setStatus(1);
agent.setEnableSearch(1);

View File

@@ -70,6 +70,8 @@ import java.util.Map;
@Order(1)
public class S2VisitsDemo extends S2BaseDemo {
public static final String AGENT_NAME = "超音数分析助手";
public void doRun() {
try {
// create domain
@@ -141,7 +143,7 @@ public class S2VisitsDemo extends S2BaseDemo {
private Integer addAgent(long dataSetId) {
Agent agent = new Agent();
agent.setName("超音数分析助手");
agent.setName(AGENT_NAME);
agent.setDescription("帮忙您对超音数产品的用户访问情况做分析");
agent.setStatus(1);
agent.setEnableSearch(1);

View File

@@ -11,24 +11,4 @@ spring:
h2:
console:
path: /h2-console/semantic
enabled: true
### Comment out following lines if using MySQL
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/s2_database?user=root
# username: root
# password:
# sql:
# enabled: true
# mode: always
# username: root
# password:
# init:
# schema-locations: classpath:db/schema-mysql.sql,classpath:db/schema-mysql-demo.sql
# data-locations: classpath:db/data-mysql.sql,classpath:db/data-mysql-demo.sql
# h2:
# console:
# path: /h2-console/semantic
# enabled: true
enabled: true

View File

@@ -0,0 +1,14 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
username: root
password:
sql:
init:
enabled: false
mode: always
username: root
password:
schema-locations: classpath:db/schema-mysql.sql,classpath:db/schema-mysql-demo.sql
data-locations: classpath:db/data-mysql.sql,classpath:db/data-mysql-demo.sql

View File

@@ -0,0 +1,14 @@
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/postgres?stringtype=unspecified
username: postgres
password: postgres
sql:
init:
enabled: false
mode: always
username: postgres
password: postgres
schema-locations: classpath:db/schema-postgres.sql,classpath:db/schema-postgres-demo.sql
data-locations: classpath:db/data-postgres.sql,classpath:db/data-postgres-demo.sql

View File

@@ -397,4 +397,8 @@ alter table s2_agent add column `enable_feedback` tinyint DEFAULT 1;
--20241116
alter table s2_agent add column `admin` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL;
alter table s2_agent add column `viewer` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL;
alter table s2_agent add column `viewer` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL;
--20241201
ALTER TABLE s2_query_stat_info RENAME COLUMN `user` TO `query_user`;
ALTER TABLE s2_chat_context RENAME COLUMN `user` TO `query_user`;

View File

@@ -1,10 +1,10 @@
-------S2VisitsDemo
insert INTO s2_user_department (user_name, department) values ('jack','HR');
insert INTO s2_user_department (user_name, department) values ('tom','sales');
insert INTO s2_user_department (user_name, department) values ('lucy','marketing');
insert INTO s2_user_department (user_name, department) values ('john','strategy');
insert INTO s2_user_department (user_name, department) values ('alice','sales');
insert INTO s2_user_department (user_name, department) values ('dean','marketing');
MERGE INTO s2_user_department (user_name, department) values ('jack','HR');
MERGE INTO s2_user_department (user_name, department) values ('tom','sales');
MERGE INTO s2_user_department (user_name, department) values ('lucy','marketing');
MERGE INTO s2_user_department (user_name, department) values ('john','strategy');
MERGE INTO s2_user_department (user_name, department) values ('alice','sales');
MERGE INTO s2_user_department (user_name, department) values ('dean','marketing');
INSERT INTO s2_pv_uv_statis (imp_date, user_name, page) VALUES (CURRENT_DATE(), 'lucy', 'p1');
INSERT INTO s2_pv_uv_statis (imp_date, user_name, page) VALUES (CURRENT_DATE(), 'jack', 'p1');
@@ -1021,45 +1021,37 @@ INSERT INTO s2_stay_time_statis (imp_date, user_name, stay_hours, page) VALUES (
-------S2ArtistDemo
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('周杰伦', '港台','青花瓷','国风',1000000,1000000,1000000);
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('陈奕迅', '港台','爱情转移','流行',1000000,1000000,1000000);
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('林俊杰', '港台','美人鱼','流行',1000000,1000000,1000000);
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('张碧晨', '内地','光的方向','流行',1000000,1000000,1000000);
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('程响', '内地','人间烟火','国风',1000000,1000000,1000000);
insert INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('Taylor Swift', '欧美','Love Story','流行',1000000,1000000,1000000);
insert INTO genre(g_name,rating,most_popular_in) VALUES ('tagore',8,'孟加拉国');
insert INTO genre(g_name,rating,most_popular_in) VALUES ('nazrul',7,'孟加拉国');
insert INTO genre(g_name,rating,most_popular_in) VALUES ('民间',9,'锡尔赫特、吉大港、库斯蒂亚');
insert INTO genre(g_name,rating,most_popular_in) VALUES ('现代',8,'孟加拉国');
insert INTO genre(g_name,rating,most_popular_in) VALUES ('蓝调',7,'加拿大');
insert INTO genre(g_name,rating,most_popular_in) VALUES ('流行',9,'美国');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Shrikanta','印度','男性','tagore');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Prity','孟加拉国','女性','nazrul');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Farida','孟加拉国','女性','民间');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Topu','印度','女性','现代');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Enrique','美国','男性','蓝调');
insert INTO artist(artist_name,citizenship,gender,g_name) VALUES ('Michel','英国','男性','流行');
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('周杰伦', '港台','青花瓷','国风',1000000,1000000,1000000);
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('陈奕迅', '港台','爱情转移','流行',1000000,1000000,1000000);
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('林俊杰', '港台','美人鱼','流行',1000000,1000000,1000000);
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('张碧晨', '内地','光的方向','流行',1000000,1000000,1000000);
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('程响', '内地','人间烟火','国风',1000000,1000000,1000000);
MERGE INTO singer (singer_name,act_area, song_name,genre,js_play_cnt,down_cnt,favor_cnt) VALUES ('Taylor Swift', '欧美','Love Story','流行',1000000,1000000,1000000);
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('tagore',8,'孟加拉国');
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('nazrul',7,'孟加拉国');
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('民间',9,'锡尔赫特、吉大港、库斯蒂亚');
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('现代',8,'孟加拉国');
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('蓝调',7,'加拿大');
MERGE INTO genre(g_name,rating,most_popular_in) VALUES ('流行',9,'美国');
-------S2CompanyDemo
insert into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_131','微软','西雅图','1975','盖茨','纳德拉',102300000000,210000);
insert into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_132','特斯拉','加州','2003','艾伯哈德','马斯克',376800000000,140473);
insert into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_133','谷歌','加州','1998','拉里佩奇','劈柴',321600000000,182503);
insert into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_134','亚马逊','加州','1994','贝索斯','贝索斯',28800000000,950000);
insert into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_135','英伟达','杭州','1993','黄仁勋','黄仁勋',67500000000,29000);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_131','微软','西雅图','1975','盖茨','纳德拉',102300000000,210000);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_132','特斯拉','加州','2003','艾伯哈德','马斯克',376800000000,140473);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_133','谷歌','加州','1998','拉里佩奇','劈柴',321600000000,182503);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_134','亚马逊','加州','1994','贝索斯','贝索斯',28800000000,950000);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_135','英伟达','杭州','1993','黄仁勋','黄仁勋',67500000000,29000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_131','Office','1990','item_enterprise_13_131','盖茨',50000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_132','Windows','1991','item_enterprise_13_131','盖茨',50000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_133','Model 3','2017','item_enterprise_13_132','马斯克',100000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_134','Model Y','2020','item_enterprise_13_132','马斯克',100000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_135','Google','2003','item_enterprise_13_133','拉里佩奇',50000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_136','Android','2007','item_enterprise_13_133','拉里佩奇',50000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_137','aws','2004','item_enterprise_13_134','贝索斯',100000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_138','kindle','2007','item_enterprise_13_134','贝索斯',100000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_139','H100','2022','item_enterprise_13_135','黄仁勋',100000000);
insert into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_140','A100','2021','item_enterprise_13_135','黄仁勋',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_131','Office','1990','item_enterprise_13_131','盖茨',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_132','Windows','1991','item_enterprise_13_131','盖茨',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_133','Model 3','2017','item_enterprise_13_132','马斯克',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_134','Model Y','2020','item_enterprise_13_132','马斯克',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_135','Google','2003','item_enterprise_13_133','拉里佩奇',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_136','Android','2007','item_enterprise_13_133','拉里佩奇',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_137','aws','2004','item_enterprise_13_134','贝索斯',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_138','kindle','2007','item_enterprise_13_134','贝索斯',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_139','H100','2022','item_enterprise_13_135','黄仁勋',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_140','A100','2021','item_enterprise_13_135','黄仁勋',100000000);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_131',12100000000, 2100000000,10,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_132',12200000000, 2200000000,20,20);

View File

@@ -1,10 +1,10 @@
-- S2VisitsDemo
insert into s2_user_department (user_name, department) values ('jack','HR');
insert into s2_user_department (user_name, department) values ('tom','sales');
insert into s2_user_department (user_name, department) values ('lucy','marketing');
insert into s2_user_department (user_name, department) values ('john','strategy');
insert into s2_user_department (user_name, department) values ('alice','sales');
insert into s2_user_department (user_name, department) values ('dean','marketing');
MERGE into s2_user_department (user_name, department) values ('jack','HR');
MERGE into s2_user_department (user_name, department) values ('tom','sales');
MERGE into s2_user_department (user_name, department) values ('lucy','marketing');
MERGE into s2_user_department (user_name, department) values ('john','strategy');
MERGE into s2_user_department (user_name, department) values ('alice','sales');
MERGE into s2_user_department (user_name, department) values ('dean','marketing');
INSERT INTO s2_pv_uv_statis (imp_date, user_name, page) VALUES (CURRENT_DATE(), 'lucy', 'p1');
INSERT INTO s2_pv_uv_statis (imp_date, user_name, page) VALUES (CURRENT_DATE(), 'jack', 'p1');
@@ -1020,34 +1020,61 @@ INSERT INTO s2_stay_time_statis (imp_date, user_name, stay_hours, page) VALUES (
INSERT INTO s2_stay_time_statis (imp_date, user_name, stay_hours, page) VALUES (DATE_SUB(CURRENT_DATE(), INTERVAL 8 DAY), 'lucy', '0.039935860913407284', 'p2');
-- S2ArtistDemo
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('周杰伦', '港台', '青花瓷', '国风', 1000000, 1000000, 1000000);
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('陈奕迅', '港台', '爱情转移', '流行', 1000000, 1000000, 1000000);
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('林俊杰', '港台', '美人鱼', '流行', 1000000, 1000000, 1000000);
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('张碧晨', '内地', '光的方向', '流行', 1000000, 1000000, 1000000);
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('程响', '内地', '人间烟火', '国风', 1000000, 1000000, 1000000);
INSERT INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
MERGE INTO singer (singer_name, act_area, song_name, genre, js_play_cnt, down_cnt, favor_cnt)
VALUES ('Taylor Swift', '欧美', 'Love Story', '流行', 1000000, 1000000, 1000000);
insert into genre(g_name,rating,most_popular_in) VALUES ('tagore',8,'孟加拉国');
insert into genre(g_name,rating,most_popular_in) VALUES ('nazrul',7,'孟加拉国');
insert into genre(g_name,rating,most_popular_in) VALUES ('民间',9,'锡尔赫特、吉大港、库斯蒂亚');
insert into genre(g_name,rating,most_popular_in) VALUES ('现代',8,'孟加拉国');
insert into genre(g_name,rating,most_popular_in) VALUES ('蓝调',7,'加拿大');
insert into genre(g_name,rating,most_popular_in) VALUES ('流行',9,'美国');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('tagore',8,'孟加拉国');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('nazrul',7,'孟加拉国');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('民间',9,'锡尔赫特、吉大港、库斯蒂亚');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('现代',8,'孟加拉国');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('蓝调',7,'加拿大');
MERGE into genre(g_name,rating,most_popular_in) VALUES ('流行',9,'美国');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Shrikanta','印度','男性','tagore');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Prity','孟加拉国','女性','nazrul');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Farida','孟加拉国','女性','民间');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Topu','印度','女性','现代');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Enrique','美国','男性','蓝调');
insert into artist(artist_name,citizenship,gender,g_name) VALUES ('Michel','英国','男性','流行');
-- S2CompanyDemo
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_131','微软','西雅图','1975','盖茨','纳德拉',102300000000,210000);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_132','特斯拉','加州','2003','艾伯哈德','马斯克',376800000000,140473);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_133','谷歌','加州','1998','拉里佩奇','劈柴',321600000000,182503);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_134','亚马逊','加州','1994','贝索斯','贝索斯',28800000000,950000);
MERGE into company(company_id,company_name,headquarter_address,company_established_time,founder,ceo,annual_turnover,employee_count) VALUES ('item_enterprise_13_135','英伟达','杭州','1993','黄仁勋','黄仁勋',67500000000,29000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_131','Office','1990','item_enterprise_13_131','盖茨',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_132','Windows','1991','item_enterprise_13_131','盖茨',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_133','Model 3','2017','item_enterprise_13_132','马斯克',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_134','Model Y','2020','item_enterprise_13_132','马斯克',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_135','Google','2003','item_enterprise_13_133','拉里佩奇',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_136','Android','2007','item_enterprise_13_133','拉里佩奇',50000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_137','aws','2004','item_enterprise_13_134','贝索斯',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_138','kindle','2007','item_enterprise_13_134','贝索斯',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_139','H100','2022','item_enterprise_13_135','黄仁勋',100000000);
MERGE into brand(brand_id,brand_name,brand_established_time,company_id,legal_representative,registered_capital) VALUES ('item_brand_13_140','A100','2021','item_enterprise_13_135','黄仁勋',100000000);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_131',12100000000, 2100000000,10,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_132',12200000000, 2200000000,20,20);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_133',12300000000, 2300000000,30,30);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_134',12400000000, 2400000000,10,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_135',12500000000, 2500000000,30,30);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_136',12600000000, 2600000000,40,40);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_137',12700000000, 2700000000,50,50);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_138',12800000000, 2800000000,20,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_139',12900000000, 2900000000,60,70);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2023','item_brand_13_140',13000000000, 3000000000,80,100);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_131',13100000000,3100000000, 10,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_132',13200000000, 3200000000,20,20);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_133',13300000000, 3300000000,30,30);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_134',13400000000, 3400000000,10,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_135',13500000000, 3500000000,30,30);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_136',13600000000, 3600000000,40,40);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_137',13700000000, 3700000000,50,50);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_138',13800000000, 3800000000,20,10);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_139',13900000000, 3900000000,60,70);
insert into brand_revenue(year_time,brand_id,revenue,profit,revenue_growth_year_on_year,profit_growth_year_on_year) VALUES ('2024','item_brand_13_140',14000000000, 4000000000,80,100);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
-- sample user
-- The default value for the password is 123456
insert into s2_user (id, "name", password, salt, display_name, email, is_admin) values (1, 'admin','c3VwZXJzb25pY0BiaWNvbdktJJYWw6A3rEmBUPzbn/6DNeYnD+y3mAwDKEMS3KVT','jGl25bVBBBW96Qi9Te4V3w==','admin','admin@xx.com', 1);
insert into s2_user (id, "name", password, salt, display_name, email) values (2, 'jack','c3VwZXJzb25pY0BiaWNvbWxGalmwa0h/trkh/3CWOYMDiku0Op1VmOfESIKmN0HG','MWERWefm/3hD6kYndF6JIg==','jack','jack@xx.com');
insert into s2_user (id, "name", password, salt, display_name, email) values (3, 'tom','c3VwZXJzb25pY0BiaWNvbVWv0CZ6HzeX8GRUpw0C8NSaQ+0hE/dAcmzRpCFwAqxK','4WCPdcXXgT89QDHLML+3hg==','tom','tom@xx.com');
insert into s2_user (id, "name", password, salt, display_name, email, is_admin) values (4, 'lucy','c3VwZXJzb25pY0BiaWNvbc7Ychfu99lPL7rLmCkf/vgF4RASa4Z++Mxo1qlDCpci','3Jnpqob6uDoGLP9eCAg5Fw==','lucy','lucy@xx.com', 1);
insert into s2_user (id, "name", password, salt, display_name, email) values (5, 'alice','c3VwZXJzb25pY0BiaWNvbe9Z4F2/DVIfAJoN1HwUTuH1KgVuiusvfh7KkWYQSNHk','K9gGyX8OAK8aH8Myj6djqQ==','alice','alice@xx.com');
INSERT INTO s2_available_date_info (item_id, type, date_format, start_date, end_date, unavailable_date, created_at, created_by, updated_at, updated_by)
VALUES (1, 'dimension', 'yyyy-MM-dd', CURRENT_DATE - INTERVAL '28 days', CURRENT_DATE - INTERVAL '1 day', '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
INSERT INTO s2_available_date_info (item_id, type, date_format, start_date, end_date, unavailable_date, created_at, created_by, updated_at, updated_by)
VALUES (2, 'dimension', 'yyyy-MM-dd', CURRENT_DATE - INTERVAL '28 days', CURRENT_DATE - INTERVAL '1 day', '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
INSERT INTO s2_available_date_info (item_id, type, date_format, start_date, end_date, unavailable_date, created_at, created_by, updated_at, updated_by)
VALUES (3, 'dimension', 'yyyy-MM-dd', CURRENT_DATE - INTERVAL '28 days', CURRENT_DATE - INTERVAL '1 day', '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
insert into s2_canvas("id", "domain_id", "type", "config" ,"created_at" ,"created_by" ,"updated_at" ,"updated_by" )
values (1, 1, 'modelEdgeRelation', '[{"source":"datasource-1","target":"datasource-3","type":"polyline","id":"edge-0.305251275235679741702883718912","style":{"active":{"stroke":"rgb(95, 149, 255)","lineWidth":1},"selected":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"shadowColor":"rgb(95, 149, 255)","shadowBlur":10,"text-shape":{"fontWeight":500}},"highlight":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"text-shape":{"fontWeight":500}},"inactive":{"stroke":"rgb(234, 234, 234)","lineWidth":1},"disable":{"stroke":"rgb(245, 245, 245)","lineWidth":1},"stroke":"#296df3","endArrow":true},"startPoint":{"x":-94,"y":-137.5,"anchorIndex":0,"id":"-94|||-137.5"},"endPoint":{"x":-234,"y":-45,"anchorIndex":1,"id":"-234|||-45"},"sourceAnchor":2,"targetAnchor":1,"label":"模型关系编辑"},{"source":"datasource-1","target":"datasource-2","type":"polyline","id":"edge-0.466237264629309141702883756359","style":{"active":{"stroke":"rgb(95, 149, 255)","lineWidth":1},"selected":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"shadowColor":"rgb(95, 149, 255)","shadowBlur":10,"text-shape":{"fontWeight":500}},"highlight":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"text-shape":{"fontWeight":500}},"inactive":{"stroke":"rgb(234, 234, 234)","lineWidth":1},"disable":{"stroke":"rgb(245, 245, 245)","lineWidth":1},"stroke":"#296df3","endArrow":true},"startPoint":{"x":-12,"y":-137.5,"anchorIndex":1,"id":"-12|||-137.5"},"endPoint":{"x":85,"y":31.5,"anchorIndex":0,"id":"85|||31.5"},"sourceAnchor":1,"targetAnchor":2,"label":"模型关系编辑"}]', '2023-06-01', 'admin', '2023-06-01', 'admin');

View File

@@ -42,15 +42,6 @@ CREATE TABLE IF NOT EXISTS `genre` (
);
COMMENT ON TABLE genre IS 'genre';
CREATE TABLE IF NOT EXISTS `artist` (
`artist_name` varchar(50) NOT NULL , -- genre name
`citizenship` varchar(20) ,
`gender` varchar(20) ,
`g_name` varchar(50),
PRIMARY KEY (`artist_name`,`citizenship`)
);
COMMENT ON TABLE artist IS 'artist';
-------S2CompanyDemo
CREATE TABLE IF NOT EXISTS `company` (
`company_id` varchar(50) NOT NULL ,

View File

@@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_context`
(
`chat_id` BIGINT NOT NULL , -- context chat id
`modified_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , -- row modify time
`user` varchar(64) DEFAULT NULL , -- row modify user
`query_user` varchar(64) DEFAULT NULL , -- row modify user
`query_text` LONGVARCHAR DEFAULT NULL , -- query text
`semantic_parse` LONGVARCHAR DEFAULT NULL , -- parse data
`ext_data` LONGVARCHAR DEFAULT NULL , -- extend data
@@ -290,7 +290,7 @@ CREATE TABLE IF NOT EXISTS `s2_query_stat_info` (
`trace_id` varchar(200) DEFAULT NULL, -- query unique identifier
`model_id` INT DEFAULT NULL,
`data_set_id` INT DEFAULT NULL,
`user` varchar(200) DEFAULT NULL,
`query_user` varchar(200) DEFAULT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`query_type` varchar(200) DEFAULT NULL, -- the corresponding scene
`query_type_back` INT DEFAULT '0' , -- query type, 0-normal query, 1-pre-refresh type
@@ -322,28 +322,6 @@ CREATE TABLE IF NOT EXISTS `s2_query_stat_info` (
) ;
COMMENT ON TABLE s2_query_stat_info IS 'query statistics table';
CREATE TABLE IF NOT EXISTS `s2_semantic_pasre_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) NOT NULL ,
`model_id` INT NOT NULL ,
`dimensions`LONGVARCHAR ,
`metrics`LONGVARCHAR ,
`orders`LONGVARCHAR ,
`filters`LONGVARCHAR ,
`date_info`LONGVARCHAR ,
`limit` INT NOT NULL ,
`native_query` TINYINT NOT NULL DEFAULT '0' ,
`sql`LONGVARCHAR ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`status` INT NOT NULL ,
`elapsed_ms` bigINT DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_semantic_pasre_info IS 'semantic layer sql parsing information table';
CREATE TABLE IF NOT EXISTS `s2_available_date_info` (
`id` INT NOT NULL AUTO_INCREMENT ,
`item_id` INT NOT NULL ,

View File

@@ -17,6 +17,7 @@ CREATE TABLE IF NOT EXISTS `s2_stay_time_statis` (
`page` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- S2ArtistDemo
CREATE TABLE IF NOT EXISTS `singer` (
`singer_name` varchar(200) NOT NULL,
`act_area` varchar(200) NOT NULL,
@@ -27,7 +28,6 @@ CREATE TABLE IF NOT EXISTS `singer` (
`favor_cnt` bigint DEFAULT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- S2ArtistDemo
CREATE TABLE IF NOT EXISTS `genre` (
`g_name` varchar(20) NOT NULL , -- genre name
`rating` INT ,
@@ -35,31 +35,39 @@ CREATE TABLE IF NOT EXISTS `genre` (
PRIMARY KEY (`g_name`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `artist` (
`artist_name` varchar(50) NOT NULL , -- genre name
`citizenship` varchar(20) ,
`gender` varchar(20) ,
`g_name` varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- S2CompanyDemo
CREATE TABLE IF NOT EXISTS `company` (
`company_id` varchar(50) NOT NULL,
`company_name` varchar(50) NOT NULL,
`headquarter_address` varchar(50) NOT NULL,
`company_established_time` varchar(20) NOT NULL,
`founder` varchar(20) NOT NULL,
`ceo` varchar(20) NOT NULL,
`annual_turnover` bigint(15),
`employee_count` int(7),
PRIMARY KEY (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `files` (
`f_id` bigINT NOT NULL,
`artist_name` varchar(50) ,
`file_size` varchar(20) ,
`duration` varchar(20) ,
`formats` varchar(20) ,
PRIMARY KEY (`f_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `brand` (
`brand_id` varchar(50) NOT NULL,
`brand_name` varchar(50) NOT NULL,
`brand_established_time` varchar(20) NOT NULL,
`company_id` varchar(50) NOT NULL,
`legal_representative` varchar(20) NOT NULL,
`registered_capital` bigint(15),
PRIMARY KEY (`brand_id`),
KEY `idx_company_id` (`company_id`),
CONSTRAINT `fk_brand_company` FOREIGN KEY (`company_id`) REFERENCES `company` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `song` (
`imp_date` varchar(50) ,
`song_name` varchar(50) ,
`artist_name` varchar(50) ,
`country` varchar(20) ,
`f_id` bigINT ,
`g_name` varchar(20) ,
`rating` int ,
`languages` varchar(20) ,
`releasedate` varchar(50) ,
`resolution` bigINT NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `brand_revenue` (
`year_time` varchar(10) NOT NULL,
`brand_id` varchar(50) NOT NULL,
`revenue` bigint(15) NOT NULL,
`profit` bigint(15) NOT NULL,
`revenue_growth_year_on_year` double NOT NULL,
`profit_growth_year_on_year` double NOT NULL,
PRIMARY KEY (`year_time`, `brand_id`),
KEY `idx_brand_id` (`brand_id`),
CONSTRAINT `fk_brand_revenue_brand` FOREIGN KEY (`brand_id`) REFERENCES `brand` (`brand_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -95,7 +95,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_memory` (
CREATE TABLE IF NOT EXISTS `s2_chat_context` (
`chat_id` bigint(20) NOT NULL COMMENT 'context chat id',
`modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'row modify time',
`user` varchar(64) DEFAULT NULL COMMENT 'row modify user',
`query_user` varchar(64) DEFAULT NULL COMMENT 'row modify user',
`query_text` text COMMENT 'query text',
`semantic_parse` text COMMENT 'parse data',
`ext_data` text COMMENT 'extend data',
@@ -327,7 +327,7 @@ CREATE TABLE IF NOT EXISTS `s2_query_stat_info` (
`trace_id` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询标识',
`model_id` bigint(20) DEFAULT NULL,
`data_set_id` bigint(20) DEFAULT NULL,
`user` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '执行sql的用户',
`query_user` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '执行sql的用户',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`query_type` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询对应的场景',
`query_type_back` int(10) DEFAULT '0' COMMENT '查询类型, 0-正常查询, 1-预刷类型',
@@ -359,26 +359,6 @@ CREATE TABLE IF NOT EXISTS `s2_query_stat_info` (
KEY `domain_index` (`model_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='查询统计信息表';
CREATE TABLE IF NOT EXISTS `s2_semantic_pasre_info` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) NOT NULL COMMENT '查询标识',
`domain_id` bigint(20) NOT NULL COMMENT '主体域ID',
`dimensions` mediumtext COMMENT '查询相关的维度信息',
`metrics` mediumtext COMMENT '查询相关的指标信息',
`orders` mediumtext COMMENT '查询相关的排序信息',
`filters` mediumtext COMMENT '查询相关的过滤信息',
`date_info` mediumtext COMMENT '查询相关的日期信息',
`limit` bigint(20) NOT NULL COMMENT '查询相关的limit信息',
`native_query` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1-明细查询,0-聚合查询',
`sql` mediumtext COMMENT '解析后的sql',
`created_at` datetime NOT NULL COMMENT '创建时间',
`created_by` varchar(100) NOT NULL COMMENT '创建人',
`status` tinyint NOT NULL COMMENT '运行状态',
`elapsed_ms` bigint(10) DEFAULT NULL COMMENT 'sql解析耗时',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='语义层sql解析信息表';
CREATE TABLE IF NOT EXISTS `s2_canvas`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,

View File

@@ -0,0 +1,70 @@
-- S2VisitsDemo
CREATE TABLE IF NOT EXISTS s2_user_department (
user_name varchar(200) NOT NULL,
department varchar(200) NOT NULL
);
CREATE TABLE IF NOT EXISTS s2_pv_uv_statis (
imp_date varchar(200) NOT NULL,
user_name varchar(200) NOT NULL,
page varchar(200) NOT NULL
);
CREATE TABLE IF NOT EXISTS s2_stay_time_statis (
imp_date varchar(200) NOT NULL,
user_name varchar(200) NOT NULL,
stay_hours double precision NOT NULL,
page varchar(200) NOT NULL
);
-- S2ArtistDemo
CREATE TABLE IF NOT EXISTS singer (
singer_name varchar(200) NOT NULL,
act_area varchar(200) NOT NULL,
song_name varchar(200) NOT NULL,
genre varchar(200) NOT NULL,
js_play_cnt bigint DEFAULT NULL,
down_cnt bigint DEFAULT NULL,
favor_cnt bigint DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS genre (
g_name varchar(20) NOT NULL PRIMARY KEY,
rating integer,
most_popular_in varchar(50)
);
-- S2CompanyDemo
CREATE TABLE IF NOT EXISTS company (
company_id varchar(50) NOT NULL,
company_name varchar(50) NOT NULL,
headquarter_address varchar(50) NOT NULL,
company_established_time varchar(20) NOT NULL,
founder varchar(20) NOT NULL,
ceo varchar(20) NOT NULL,
annual_turnover bigint,
employee_count integer,
PRIMARY KEY (company_id)
);
CREATE TABLE IF NOT EXISTS brand (
brand_id varchar(50) NOT NULL,
brand_name varchar(50) NOT NULL,
brand_established_time varchar(20) NOT NULL,
company_id varchar(50) NOT NULL,
legal_representative varchar(20) NOT NULL,
registered_capital bigint,
PRIMARY KEY (brand_id),
CONSTRAINT fk_brand_company FOREIGN KEY (company_id) REFERENCES company (company_id)
);
CREATE TABLE IF NOT EXISTS brand_revenue (
year_time varchar(10) NOT NULL,
brand_id varchar(50) NOT NULL,
revenue bigint NOT NULL,
profit bigint NOT NULL,
revenue_growth_year_on_year double precision NOT NULL,
profit_growth_year_on_year double precision NOT NULL,
PRIMARY KEY (year_time, brand_id),
CONSTRAINT fk_brand_revenue_brand FOREIGN KEY (brand_id) REFERENCES brand (brand_id)
);

View File

@@ -0,0 +1,494 @@
CREATE TABLE IF NOT EXISTS s2_agent (
id SERIAL PRIMARY KEY,
name varchar(100) DEFAULT NULL,
description TEXT DEFAULT NULL,
examples TEXT DEFAULT NULL,
status smallint DEFAULT NULL,
model varchar(100) DEFAULT NULL,
tool_config varchar(6000) DEFAULT NULL,
llm_config varchar(2000) DEFAULT NULL,
chat_model_config text DEFAULT NULL,
visual_config varchar(2000) DEFAULT NULL,
enable_search smallint DEFAULT 1,
enable_feedback smallint DEFAULT 1,
created_by varchar(100) DEFAULT NULL,
created_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
updated_at timestamp DEFAULT NULL,
admin varchar(1000) DEFAULT NULL,
viewer varchar(1000) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_auth_groups (
group_id integer NOT NULL PRIMARY KEY,
config varchar(2048) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_available_date_info (
id SERIAL PRIMARY KEY,
item_id integer NOT NULL,
type varchar(255) NOT NULL,
date_format varchar(64) NOT NULL,
date_period varchar(64) DEFAULT NULL,
start_date varchar(64) DEFAULT NULL,
end_date varchar(64) DEFAULT NULL,
unavailable_date text,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by varchar(100) NOT NULL,
updated_at timestamp NULL,
updated_by varchar(100) NOT NULL,
status smallint DEFAULT 0
);
CREATE TABLE IF NOT EXISTS s2_chat (
chat_id SERIAL PRIMARY KEY,
agent_id integer DEFAULT NULL,
chat_name varchar(300) DEFAULT NULL,
create_time timestamp DEFAULT NULL,
last_time timestamp DEFAULT NULL,
creator varchar(30) DEFAULT NULL,
last_question varchar(200) DEFAULT NULL,
is_delete smallint DEFAULT 0,
is_top smallint DEFAULT 0
);
CREATE TABLE IF NOT EXISTS s2_chat_config (
id SERIAL PRIMARY KEY,
model_id bigint DEFAULT NULL,
chat_detail_config text,
chat_agg_config text,
recommended_questions text,
created_at timestamp NOT NULL,
updated_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_by varchar(100) NOT NULL,
status smallint NOT NULL,
llm_examples text
);
CREATE TABLE IF NOT EXISTS s2_chat_memory (
id SERIAL PRIMARY KEY,
question varchar(655),
side_info TEXT,
agent_id INTEGER,
db_schema TEXT,
s2_sql TEXT,
status char(10),
llm_review char(10),
llm_comment TEXT,
human_review char(10),
human_comment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by varchar(100) DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_chat_context (
chat_id bigint NOT NULL PRIMARY KEY,
modified_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
query_user varchar(64) DEFAULT NULL,
query_text text,
semantic_parse text,
ext_data text
);
CREATE TABLE IF NOT EXISTS s2_chat_parse (
question_id bigint NOT NULL,
chat_id integer NOT NULL,
parse_id integer NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
query_text varchar(500) DEFAULT NULL,
user_name varchar(150) DEFAULT NULL,
parse_info text NOT NULL,
is_candidate integer DEFAULT 1,
CONSTRAINT commonIndex UNIQUE (question_id)
);
CREATE TABLE IF NOT EXISTS s2_chat_query (
question_id SERIAL PRIMARY KEY,
agent_id integer DEFAULT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
query_text text,
user_name varchar(150) DEFAULT NULL,
query_state smallint DEFAULT NULL,
chat_id bigint NOT NULL,
query_result text,
score integer DEFAULT 0,
feedback varchar(1024) DEFAULT '',
similar_queries varchar(1024) DEFAULT '',
parse_time_cost varchar(1024) DEFAULT ''
);
CREATE TABLE IF NOT EXISTS s2_chat_statistics (
question_id bigint NOT NULL,
chat_id bigint NOT NULL,
user_name varchar(150) DEFAULT NULL,
query_text varchar(200) DEFAULT NULL,
interface_name varchar(100) DEFAULT NULL,
cost integer DEFAULT 0,
type integer DEFAULT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS s2_chat_model (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
config text NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp NOT NULL,
updated_by varchar(100) NOT NULL,
admin varchar(500) DEFAULT NULL,
viewer varchar(500) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_database (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
version varchar(64) DEFAULT NULL,
type varchar(20) NOT NULL,
config text NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp NOT NULL,
updated_by varchar(100) NOT NULL,
admin varchar(500) DEFAULT NULL,
viewer varchar(500) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_dictionary_conf (
id SERIAL PRIMARY KEY,
description varchar(255),
type varchar(255) NOT NULL,
item_id INTEGER NOT NULL,
config text,
status varchar(255) NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS s2_dictionary_task (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
description varchar(255),
type varchar(255) NOT NULL,
item_id INTEGER NOT NULL,
config text,
status varchar(255) NOT NULL,
created_at timestamp DEFAULT CURRENT_TIMESTAMP,
created_by varchar(100) NOT NULL,
elapsed_ms integer DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_dimension (
id SERIAL PRIMARY KEY,
model_id bigint DEFAULT NULL,
name varchar(255) NOT NULL,
biz_name varchar(255) NOT NULL,
description varchar(500) NOT NULL,
status smallint NOT NULL,
sensitive_level integer DEFAULT NULL,
type varchar(50) NOT NULL,
type_params text,
data_type varchar(50) DEFAULT NULL,
expr text NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp NOT NULL,
updated_by varchar(100) NOT NULL,
semantic_type varchar(20) NOT NULL,
alias varchar(500) DEFAULT NULL,
default_values varchar(500) DEFAULT NULL,
dim_value_maps varchar(5000) DEFAULT NULL,
is_tag smallint DEFAULT NULL,
ext varchar(1000) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_domain (
id SERIAL PRIMARY KEY,
name varchar(255) DEFAULT NULL,
biz_name varchar(255) DEFAULT NULL,
parent_id bigint DEFAULT 0,
status smallint NOT NULL,
created_at timestamp DEFAULT NULL,
created_by varchar(100) DEFAULT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
admin varchar(3000) DEFAULT NULL,
admin_org varchar(3000) DEFAULT NULL,
is_open smallint DEFAULT NULL,
viewer varchar(3000) DEFAULT NULL,
view_org varchar(3000) DEFAULT NULL,
entity varchar(500) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_metric (
id SERIAL PRIMARY KEY,
model_id bigint DEFAULT NULL,
name varchar(255) NOT NULL,
biz_name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
status smallint NOT NULL,
sensitive_level smallint NOT NULL,
type varchar(50) NOT NULL,
type_params text NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp NOT NULL,
updated_by varchar(100) NOT NULL,
data_format_type varchar(50) DEFAULT NULL,
data_format varchar(500) DEFAULT NULL,
alias varchar(500) DEFAULT NULL,
classifications varchar(500) DEFAULT NULL,
relate_dimensions varchar(500) DEFAULT NULL,
ext text DEFAULT NULL,
define_type varchar(50) DEFAULT NULL,
is_publish smallint DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_model (
id SERIAL PRIMARY KEY,
name varchar(100) DEFAULT NULL,
biz_name varchar(100) DEFAULT NULL,
domain_id bigint DEFAULT NULL,
alias varchar(200) DEFAULT NULL,
status smallint DEFAULT NULL,
description varchar(500) DEFAULT NULL,
viewer varchar(500) DEFAULT NULL,
view_org varchar(500) DEFAULT NULL,
admin varchar(500) DEFAULT NULL,
admin_org varchar(500) DEFAULT NULL,
is_open smallint DEFAULT NULL,
created_by varchar(100) DEFAULT NULL,
created_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
updated_at timestamp DEFAULT NULL,
entity text,
drill_down_dimensions TEXT DEFAULT NULL,
database_id INTEGER NOT NULL,
model_detail text NOT NULL,
source_type varchar(128) DEFAULT NULL,
depends varchar(500) DEFAULT NULL,
filter_sql varchar(1000) DEFAULT NULL,
tag_object_id integer DEFAULT 0,
ext varchar(1000) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_data_set (
id SERIAL PRIMARY KEY,
domain_id bigint,
name varchar(255),
biz_name varchar(255),
description varchar(255),
status integer,
alias varchar(255),
data_set_detail text,
created_at timestamp,
created_by varchar(255),
updated_at timestamp,
updated_by varchar(255),
query_config varchar(3000),
admin varchar(3000) DEFAULT NULL,
admin_org varchar(3000) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_tag (
id SERIAL PRIMARY KEY,
item_id INTEGER NOT NULL,
type varchar(255) NOT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
ext text DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_tag_object (
id SERIAL PRIMARY KEY,
domain_id bigint DEFAULT NULL,
name varchar(255) NOT NULL,
biz_name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
status smallint NOT NULL DEFAULT 1,
sensitive_level smallint NOT NULL DEFAULT 0,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp NULL,
updated_by varchar(100) NULL,
ext text DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_query_rule (
id SERIAL PRIMARY KEY,
data_set_id bigint,
priority integer NOT NULL DEFAULT 1,
rule_type varchar(255) NOT NULL,
name varchar(255) NOT NULL,
biz_name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
rule text DEFAULT NULL,
action text DEFAULT NULL,
status INTEGER NOT NULL DEFAULT 1,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
ext text DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_term (
id SERIAL PRIMARY KEY,
domain_id bigint,
name varchar(255) NOT NULL,
description varchar(500) DEFAULT NULL,
alias varchar(1000) NOT NULL,
related_metrics varchar(1000) DEFAULT NULL,
related_dimensions varchar(1000) DEFAULT NULL,
created_at timestamp NOT NULL,
created_by varchar(100) NOT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_user_token (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
user_name VARCHAR(255) NOT NULL,
expire_time bigint NOT NULL,
token text NOT NULL,
salt VARCHAR(255) default NULL,
create_time TIMESTAMP NOT NULL,
create_by VARCHAR(255) NOT NULL,
update_time TIMESTAMP default NULL,
update_by VARCHAR(255) NOT NULL,
expire_date_time TIMESTAMP NOT NULL,
UNIQUE (name, user_name)
);
CREATE TABLE IF NOT EXISTS s2_app (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
description VARCHAR(255),
status INTEGER,
config TEXT,
end_date timestamp,
qps INTEGER,
app_secret VARCHAR(255),
owner VARCHAR(255),
created_at timestamp NULL,
updated_at timestamp NULL,
created_by varchar(255) NULL,
updated_by varchar(255) NULL
);
CREATE TABLE IF NOT EXISTS s2_plugin (
id SERIAL PRIMARY KEY,
type varchar(50) DEFAULT NULL,
data_set varchar(100) DEFAULT NULL,
pattern varchar(500) DEFAULT NULL,
parse_mode varchar(100) DEFAULT NULL,
parse_mode_config text,
name varchar(100) DEFAULT NULL,
created_at timestamp DEFAULT NULL,
created_by varchar(100) DEFAULT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) DEFAULT NULL,
config text,
comment text
);
CREATE TABLE IF NOT EXISTS s2_query_stat_info (
id SERIAL PRIMARY KEY,
trace_id varchar(200) DEFAULT NULL,
model_id bigint DEFAULT NULL,
data_set_id bigint DEFAULT NULL,
query_user varchar(200) DEFAULT NULL,
created_at timestamp DEFAULT CURRENT_TIMESTAMP,
query_type varchar(200) DEFAULT NULL,
query_type_back integer DEFAULT 0,
query_sql_cmd text,
sql_cmd_md5 varchar(200) DEFAULT NULL,
query_struct_cmd text,
struct_cmd_md5 varchar(200) DEFAULT NULL,
sql text,
sql_md5 varchar(200) DEFAULT NULL,
query_engine varchar(20) DEFAULT NULL,
elapsed_ms bigint DEFAULT NULL,
query_state varchar(20) DEFAULT NULL,
native_query boolean DEFAULT false,
start_date varchar(50) DEFAULT NULL,
end_date varchar(50) DEFAULT NULL,
dimensions text,
metrics text,
select_cols text,
agg_cols text,
filter_cols text,
group_by_cols text,
order_by_cols text,
use_result_cache boolean DEFAULT false,
use_sql_cache boolean DEFAULT false,
sql_cache_key text,
result_cache_key text,
query_opt_mode varchar(20) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS s2_canvas (
id SERIAL PRIMARY KEY,
domain_id bigint DEFAULT NULL,
type varchar(20) DEFAULT NULL,
config text,
created_at timestamp DEFAULT NULL,
created_by varchar(100) DEFAULT NULL,
updated_at timestamp DEFAULT NULL,
updated_by varchar(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS s2_system_config (
id SERIAL PRIMARY KEY,
admin varchar(500),
parameters text
);
CREATE TABLE IF NOT EXISTS s2_model_rela (
id SERIAL PRIMARY KEY,
domain_id bigint,
from_model_id bigint,
to_model_id bigint,
join_type VARCHAR(255),
join_condition VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS s2_collect (
id SERIAL PRIMARY KEY,
type varchar(20) NOT NULL,
username varchar(20) NOT NULL,
collect_id bigint NOT NULL,
create_time timestamp,
update_time timestamp
);
CREATE TABLE IF NOT EXISTS s2_metric_query_default_config (
id SERIAL PRIMARY KEY,
metric_id bigint,
user_name varchar(255) NOT NULL,
default_config varchar(1000) NOT NULL,
created_at timestamp NULL,
updated_at timestamp NULL,
created_by varchar(100) NULL,
updated_by varchar(100) NULL
);
CREATE TABLE IF NOT EXISTS s2_user (
id SERIAL PRIMARY KEY,
name varchar(100) NOT NULL,
display_name varchar(100) NULL,
password varchar(256) NULL,
salt varchar(256) DEFAULT NULL,
email varchar(100) NULL,
is_admin smallint NULL
);

View File

@@ -1,5 +1,4 @@
s2:
schema:
cache:
enable: true

View File

@@ -6,12 +6,14 @@ import com.tencent.supersonic.chat.api.pojo.request.ChatExecuteReq;
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
import com.tencent.supersonic.chat.api.pojo.response.ChatParseResp;
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.chat.server.agent.Agent;
import com.tencent.supersonic.chat.server.service.AgentService;
import com.tencent.supersonic.chat.server.service.ChatQueryService;
import com.tencent.supersonic.common.pojo.enums.DatePeriodEnum;
import com.tencent.supersonic.common.service.ChatModelService;
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import com.tencent.supersonic.headless.server.service.SchemaService;
import com.tencent.supersonic.util.DataUtils;
@@ -33,6 +35,9 @@ public class BaseTest extends BaseApplication {
protected final String endDay = LocalDate.now().toString();
protected final DatePeriodEnum period = DatePeriodEnum.DAY;
protected Agent agent;
protected SemanticSchema schema;
@Autowired
protected ChatQueryService chatQueryService;
@Autowired
@@ -44,23 +49,14 @@ public class BaseTest extends BaseApplication {
@Value("${s2.demo.enableLLM:false}")
protected boolean enableLLM;
protected int agentId;
protected List<Long> durations = Lists.newArrayList();
protected QueryResult submitMultiTurnChat(String queryText, Integer agentId, Integer chatId)
throws Exception {
ChatParseResp parseResp = submitParse(queryText, agentId, chatId);
protected Agent getAgentByName(String agentName) {
Optional<Agent> agent = agentService.getAgents().stream()
.filter(a -> a.getName().equals(agentName)).findFirst();
SemanticParseInfo semanticParseInfo = parseResp.getSelectedParses().get(0);
ChatExecuteReq request =
ChatExecuteReq.builder().queryText(queryText).user(DataUtils.getUser())
.parseId(semanticParseInfo.getId()).queryId(parseResp.getQueryId())
.chatId(chatId).agentId(agentId).saveAnswer(true).build();
QueryResult queryResult = chatQueryService.execute(request);
queryResult.setChatContext(semanticParseInfo);
return queryResult;
return agent.orElse(null);
}
protected QueryResult submitNewChat(String queryText, Integer agentId) throws Exception {
@@ -79,8 +75,8 @@ public class BaseTest extends BaseApplication {
protected ChatParseResp submitParse(String queryText, Integer agentId, Integer chatId) {
ChatParseReq chatParseReq = DataUtils.getChatParseReq(chatId, queryText, enableLLM);
chatParseReq.setAgentId(agentId);
ChatParseReq chatParseReq =
DataUtils.getChatParseReq(chatId, agentId, queryText, enableLLM);
return chatQueryService.parse(chatParseReq);
}
@@ -111,9 +107,9 @@ public class BaseTest extends BaseApplication {
assertEquals(expectedParseInfo.getDateInfo(), actualParseInfo.getDateInfo());
}
protected SchemaElement getSchemaElementByName(Set<SchemaElement> elementSet, String name) {
protected SchemaElement getSchemaElementByName(List<SchemaElement> elements, String name) {
Optional<SchemaElement> matchElement =
elementSet.stream().filter(e -> e.getName().equals(name)).findFirst();
elements.stream().filter(e -> e.getName().equals(name)).findFirst();
return matchElement.orElse(null);
}
}

View File

@@ -5,13 +5,14 @@ import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum;
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.demo.S2SingerDemo;
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.chat.query.rule.detail.DetailDimensionQuery;
import com.tencent.supersonic.util.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junitpioneer.jupiter.SetSystemProperty;
import org.springframework.boot.test.context.SpringBootTest;
@@ -20,10 +21,16 @@ import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
public class DetailTest extends BaseTest {
@BeforeEach
public void init() {
agent = getAgentByName(S2SingerDemo.AGENT_NAME);
schema = schemaService.getSemanticSchema(agent.getDataSetIds());
}
@Test
@SetSystemProperty(key = "s2.test", value = "true")
public void test_detail_dimension() throws Exception {
QueryResult actualResult = submitNewChat("周杰伦流派和代表作", DataUtils.singerAgentId);
QueryResult actualResult = submitNewChat("周杰伦流派和代表作", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -33,7 +40,6 @@ public class DetailTest extends BaseTest {
expectedParseInfo.setQueryType(QueryType.DETAIL);
expectedParseInfo.setAggType(AggregateTypeEnum.NONE);
DataSetSchema schema = schemaService.getDataSetSchema(DataUtils.singerDatasettId);
SchemaElement singerElement = getSchemaElementByName(schema.getDimensions(), "歌手名");
QueryFilter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS,
@@ -49,7 +55,7 @@ public class DetailTest extends BaseTest {
@Test
public void test_detail_filter() throws Exception {
QueryResult actualResult = submitNewChat("国风歌手", DataUtils.singerAgentId);
QueryResult actualResult = submitNewChat("国风歌手", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -59,7 +65,6 @@ public class DetailTest extends BaseTest {
expectedParseInfo.setQueryType(QueryType.DETAIL);
expectedParseInfo.setAggType(AggregateTypeEnum.NONE);
DataSetSchema schema = schemaService.getDataSetSchema(DataUtils.singerDatasettId);
SchemaElement genreElement = getSchemaElementByName(schema.getDimensions(), "流派");
QueryFilter dimensionFilter = DataUtils.getFilter("genre", FilterOperatorEnum.EQUALS, "国风",
"流派", genreElement.getId());

View File

@@ -5,7 +5,7 @@ import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.enums.DatePeriodEnum;
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.demo.S2VisitsDemo;
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
@@ -14,6 +14,7 @@ import com.tencent.supersonic.headless.chat.query.rule.metric.MetricGroupByQuery
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricModelQuery;
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricTopNQuery;
import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junitpioneer.jupiter.SetSystemProperty;
@@ -31,9 +32,15 @@ import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MetricTest extends BaseTest {
@BeforeEach
public void init() {
agent = getAgentByName(S2VisitsDemo.AGENT_NAME);
schema = schemaService.getSemanticSchema(agent.getDataSetIds());
}
@Test
public void testMetricModel() throws Exception {
QueryResult actualResult = submitNewChat("超音数 访问次数", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("超音数 访问次数", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -53,7 +60,7 @@ public class MetricTest extends BaseTest {
@Test
public void testMetricFilter() throws Exception {
QueryResult actualResult = submitNewChat("alice的访问次数", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("alice的访问次数", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -64,7 +71,6 @@ public class MetricTest extends BaseTest {
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
DataSetSchema schema = schemaService.getDataSetSchema(DataUtils.productDatasetId);
SchemaElement userElement = getSchemaElementByName(schema.getDimensions(), "用户");
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
FilterOperatorEnum.EQUALS, "alice", "用户", userElement.getId()));
@@ -80,7 +86,7 @@ public class MetricTest extends BaseTest {
@Test
@SetSystemProperty(key = "s2.test", value = "true")
public void testMetricGroupBy() throws Exception {
QueryResult actualResult = submitNewChat("近7天超音数各部门的访问次数和停留时长", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("近7天超音数各部门的访问次数和停留时长", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -103,7 +109,7 @@ public class MetricTest extends BaseTest {
@Test
public void testMetricFilterCompare() throws Exception {
QueryResult actualResult = submitNewChat("对比alice和lucy的访问次数", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("对比alice和lucy的访问次数", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -117,7 +123,6 @@ public class MetricTest extends BaseTest {
list.add("alice");
list.add("lucy");
DataSetSchema schema = schemaService.getDataSetSchema(DataUtils.productDatasetId);
SchemaElement userElement = getSchemaElementByName(schema.getDimensions(), "用户");
QueryFilter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.IN, list,
"用户", userElement.getId());
@@ -134,7 +139,7 @@ public class MetricTest extends BaseTest {
@Test
@Order(3)
public void testMetricTopN() throws Exception {
QueryResult actualResult = submitNewChat("近3天访问次数最多的用户", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("近3天访问次数最多的用户", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -155,7 +160,7 @@ public class MetricTest extends BaseTest {
@Test
public void testMetricGroupBySum() throws Exception {
QueryResult actualResult = submitNewChat("近7天超音数各部门的访问次数总和", DataUtils.productAgentId);
QueryResult actualResult = submitNewChat("近7天超音数各部门的访问次数总和", agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
expectedResult.setChatContext(expectedParseInfo);
@@ -181,7 +186,7 @@ public class MetricTest extends BaseTest {
String dateStr = textFormat.format(format.parse(startDay));
QueryResult actualResult =
submitNewChat(String.format("alice在%s的访问次数", dateStr), DataUtils.productAgentId);
submitNewChat(String.format("alice在%s的访问次数", dateStr), agent.getId());
QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -190,7 +195,6 @@ public class MetricTest extends BaseTest {
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
expectedParseInfo.setAggType(NONE);
DataSetSchema schema = schemaService.getDataSetSchema(DataUtils.productDatasetId);
SchemaElement userElement = getSchemaElementByName(schema.getDimensions(), "用户");
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",

View File

@@ -14,26 +14,42 @@ import com.tencent.supersonic.common.pojo.ChatApp;
import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.common.pojo.enums.AppModule;
import com.tencent.supersonic.common.util.ChatAppManager;
import com.tencent.supersonic.demo.S2CompanyDemo;
import com.tencent.supersonic.demo.S2VisitsDemo;
import com.tencent.supersonic.headless.chat.corrector.LLMSqlCorrector;
import com.tencent.supersonic.util.DataUtils;
import com.tencent.supersonic.util.LLMConfigUtils;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.springframework.test.context.TestPropertySource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestPropertySource(properties = {"s2.demo.enableLLM = true"})
@Disabled
public class Text2SQLEval extends BaseTest {
private LLMConfigUtils.LLMType llmType = LLMConfigUtils.LLMType.OLLAMA_LLAMA3;
private boolean enableLLMCorrection = true;
private final LLMConfigUtils.LLMType llmType = LLMConfigUtils.LLMType.OLLAMA_LLAMA3;
private final boolean enableLLMCorrection = true;
protected final List<Long> dataSetIds = Lists.newArrayList();
@BeforeAll
public void init() {
Agent agent = agentService.createAgent(getLLMAgent(), DataUtils.getUser());
agentId = agent.getId();
Agent productAgent = getAgentByName(S2VisitsDemo.AGENT_NAME);
if (Objects.nonNull(productAgent)) {
dataSetIds.addAll(productAgent.getDataSetIds());
}
Agent companyAgent = getAgentByName(S2CompanyDemo.AGENT_NAME);
if (Objects.nonNull(companyAgent)) {
dataSetIds.addAll(companyAgent.getDataSetIds());
}
agent = agentService.createAgent(getLLMAgent(), DataUtils.getUser());
}
@AfterAll
@@ -49,7 +65,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_agg() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("近30天总访问次数", agentId);
QueryResult result = submitNewChat("近30天总访问次数", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryColumns().size() == 1;
assert result.getTextResult().contains("511");
@@ -58,7 +74,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_agg_and_groupby() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("近30日每天的访问次数", agentId);
QueryResult result = submitNewChat("近30日每天的访问次数", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryColumns().size() == 2;
assert result.getQueryResults().size() == 30;
@@ -68,7 +84,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_drilldown() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("过去30天每个部门的汇总访问次数", agentId);
QueryResult result = submitNewChat("过去30天每个部门的汇总访问次数", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryColumns().size() == 2;
assert result.getQueryResults().size() == 4;
@@ -81,7 +97,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_drilldown_and_topN() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("过去30天访问次数最高的部门top3", agentId);
QueryResult result = submitNewChat("过去30天访问次数最高的部门top3", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryResults().size() == 3;
assert result.getTextResult().contains("marketing");
@@ -92,7 +108,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_filter_and_top() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("近半个月来marketing部门访问量最高的用户是谁", agentId);
QueryResult result = submitNewChat("近半个月来marketing部门访问量最高的用户是谁", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryResults().size() == 1;
assert result.getTextResult().contains("dean");
@@ -101,7 +117,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_filter() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("近一个月sales部门总访问次数超过10次的用户有哪些", agentId);
QueryResult result = submitNewChat("近一个月sales部门总访问次数超过10次的用户有哪些", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryResults().size() == 2;
assert result.getTextResult().contains("alice");
@@ -111,7 +127,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_filter_compare() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("alice和lucy过去半个月谁的总停留时长更多", agentId);
QueryResult result = submitNewChat("alice和lucy过去半个月谁的总停留时长更多", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryResults().size() >= 1;
assert result.getTextResult().contains("alice");
@@ -120,7 +136,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_term() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("过去半个月每个核心用户的总停留时长", agentId);
QueryResult result = submitNewChat("过去半个月每个核心用户的总停留时长", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryResults().size() == 2;
assert result.getTextResult().contains("tom");
@@ -130,7 +146,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_second_calculation() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("近1个月总访问次数超过100次的部门有几个", agentId);
QueryResult result = submitNewChat("近1个月总访问次数超过100次的部门有几个", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryColumns().size() == 1;
assert result.getTextResult().contains("3");
@@ -139,7 +155,7 @@ public class Text2SQLEval extends BaseTest {
@Test
public void test_detail_query() throws Exception {
long start = System.currentTimeMillis();
QueryResult result = submitNewChat("特斯拉旗下有哪些品牌", agentId);
QueryResult result = submitNewChat("特斯拉旗下有哪些品牌", agent.getId());
durations.add(System.currentTimeMillis() - start);
assert result.getQueryColumns().size() >= 1;
assert result.getTextResult().contains("Model Y");
@@ -150,14 +166,12 @@ public class Text2SQLEval extends BaseTest {
Agent agent = new Agent();
agent.setName("Agent for Test");
ToolConfig toolConfig = new ToolConfig();
DatasetTool datasetTool = new DatasetTool();
datasetTool.setType(AgentToolType.DATASET);
datasetTool.setDataSetIds(Lists.newArrayList(DataUtils.productDatasetId));
datasetTool.setDataSetIds(dataSetIds);
toolConfig.getTools().add(datasetTool);
DatasetTool datasetTool2 = new DatasetTool();
datasetTool2.setType(AgentToolType.DATASET);
datasetTool2.setDataSetIds(Lists.newArrayList(DataUtils.companyDatasetId));
toolConfig.getTools().add(datasetTool2);
agent.setToolConfig(JSONObject.toJSONString(toolConfig));
// create chat model for this evaluation
ChatModel chatModel = new ChatModel();

View File

@@ -1,6 +1,8 @@
package com.tencent.supersonic.headless;
import com.tencent.supersonic.BaseApplication;
import com.tencent.supersonic.chat.server.agent.Agent;
import com.tencent.supersonic.chat.server.service.AgentService;
import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.DateConf.DateMode;
@@ -8,6 +10,7 @@ import com.tencent.supersonic.common.pojo.Order;
import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
@@ -15,6 +18,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.persistence.dataobject.DomainDO;
import com.tencent.supersonic.headless.server.persistence.repository.DomainRepository;
import com.tencent.supersonic.headless.server.service.SchemaService;
import com.tencent.supersonic.util.DataUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static java.time.LocalDate.now;
@@ -29,9 +34,22 @@ public class BaseTest extends BaseApplication {
@Autowired
protected SemanticLayerService semanticLayerService;
@Autowired
private DomainRepository domainRepository;
@Autowired
protected SchemaService schemaService;
@Autowired
private AgentService agentService;
protected Agent agent;
protected SemanticSchema schema;
protected Agent getAgentByName(String agentName) {
Optional<Agent> agent = agentService.getAgents().stream()
.filter(a -> a.getName().equals(agentName)).findFirst();
return agent.orElse(null);
}
protected SemanticQueryResp queryBySql(String sql) throws Exception {
return queryBySql(sql, User.getDefaultUser());

View File

@@ -22,6 +22,7 @@ import org.junit.jupiter.api.TestMethodOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
@@ -135,9 +136,9 @@ public class QueryByStructTest extends BaseTest {
aggregator.setFunc(AggOperatorEnum.SUM);
aggregator.setColumn("pv");
QueryStructReq queryStructReq1 =
buildQueryStructReq(Arrays.asList("department"), aggregator);
buildQueryStructReq(Collections.singletonList("department"), aggregator);
SemanticQueryResp semanticQueryResp = semanticLayerService.queryByReq(queryStructReq1, tom);
Assertions.assertNotNull(semanticQueryResp.getQueryAuthorization().getMessage());
Assertions.assertTrue(semanticQueryResp.getSql().contains("`user_name` = 'tom'"));
Assertions.assertTrue(semanticQueryResp.getSql().contains("user_name = 'tom'"));
}
}

View File

@@ -1,25 +1,36 @@
package com.tencent.supersonic.headless;
import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.demo.S2VisitsDemo;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticTranslateResp;
import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder;
import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Optional;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class TranslateTest extends BaseTest {
private Long dataSetId;
@BeforeEach
public void init() {
agent = getAgentByName(S2VisitsDemo.AGENT_NAME);
schema = schemaService.getSemanticSchema(agent.getDataSetIds());
Optional<Long> id = agent.getDataSetIds().stream().findFirst();
dataSetId = id.orElse(1L);
}
@Test
public void testSqlExplain() throws Exception {
String sql = "SELECT 部门, SUM(访问次数) AS 访问次数 FROM 超音数PVUV统计 GROUP BY 部门 ";
SemanticTranslateResp explain = semanticLayerService.translate(
QueryReqBuilder.buildS2SQLReq(sql, DataUtils.productDatasetId),
User.getDefaultUser());
String sql = "SELECT 部门, SUM(访问次数) AS 访问次数 FROM 超音数PVUV统计 GROUP BY 部门 ";
SemanticTranslateResp explain = semanticLayerService
.translate(QueryReqBuilder.buildS2SQLReq(sql, dataSetId), User.getDefaultUser());
assertNotNull(explain);
assertNotNull(explain.getQuerySQL());
assertTrue(explain.getQuerySQL().contains("department"));
@@ -28,7 +39,8 @@ public class TranslateTest extends BaseTest {
@Test
public void testStructExplain() throws Exception {
QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("department"));
QueryStructReq queryStructReq =
buildQueryStructReq(Collections.singletonList("department"));
SemanticTranslateResp explain =
semanticLayerService.translate(queryStructReq, User.getDefaultUser());
assertNotNull(explain);

View File

@@ -15,14 +15,6 @@ import static java.time.LocalDate.now;
public class DataUtils {
public static final Integer productAgentId = 1;
public static final Integer companyAgentId = 2;
public static final Integer singerAgentId = 3;
public static final Long productDatasetId = 1L;
public static final Long companyDatasetId = 2L;
public static final Long singerDatasettId = 3L;
public static final Integer ONE_TURNS_CHAT_ID = 10;
private static final User user_test = User.getDefaultUser();
@@ -42,11 +34,12 @@ public class DataUtils {
return User.get(3L, "tom");
}
public static ChatParseReq getChatParseReq(Integer id, String query, boolean enableLLM) {
public static ChatParseReq getChatParseReq(Integer id, Integer agentId, String query,
boolean enableLLM) {
ChatParseReq chatParseReq = new ChatParseReq();
chatParseReq.setQueryText(query);
chatParseReq.setAgentId(productAgentId);
chatParseReq.setChatId(id);
chatParseReq.setAgentId(agentId);
chatParseReq.setUser(user_test);
chatParseReq.setDisableLLM(!enableLLM);
return chatParseReq;

View File

@@ -13,22 +13,34 @@ spring:
path: /h2-console/semantic
enabled: true
### Comment out following lines if using MySQL
## Comment out following lines if using MySQL
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/s2_database?user=root
# url: jdbc:mysql://localhost:3306/mysql
# username: root
# password:
# sql:
# enabled: true
# mode: always
# username: root
# password:
# init:
# enabled: false
# mode: always
# username: root
# password:
# schema-locations: classpath:db/schema-mysql.sql,classpath:db/schema-mysql-demo.sql
# data-locations: classpath:db/data-mysql.sql,classpath:db/data-mysql-demo.sql
# h2:
# console:
# path: /h2-console/semantic
# enabled: true
## Comment out following lines if using Postgres
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# url: jdbc:postgresql://localhost:5432/postgres?stringtype=unspecified
# username: postgres
# password: postgres
# sql:
# init:
# enabled: false
# mode: always
# username: postgres
# password: postgres
# schema-locations: classpath:db/schema-postgres.sql,classpath:db/schema-postgres-demo.sql
# data-locations: classpath:db/data-postgres.sql,classpath:db/data-postgres-demo.sql

View File

@@ -1,40 +0,0 @@
server:
port: 9080
compression:
enabled: true
min-response-size: 1024
mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
spring:
profiles:
active: local
application:
name: chat
config:
import:
- classpath:s2-config.yaml
main:
allow-circular-references: true
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
mybatis:
mapper-locations=classpath:mappers/custom/*.xml,classpath*:/mappers/*.xml
logging:
level:
dev.langchain4j: DEBUG
dev.ai4j.openai4j: DEBUG
swagger:
title: 'SuperSonic API Documentation'
base:
package: com.tencent.supersonic
description: 'SuperSonic API Documentation'
url: ''
contact:
name:
email:
url: ''
version: 3.0

View File

@@ -1,3 +0,0 @@
龚 nr 1
龛 ng 1
龛影 n 1

View File

@@ -1,4 +0,0 @@
买@水果 1
然后@来 1
我@遗忘 10
遗忘@我 10

View File

@@ -1,8 +0,0 @@
阿里云 _10_20 5
天猫 _10_20 5
腾讯游戏 _10_20 5
度小满 _10_20 5
京东金融 _10_20 5

View File

@@ -1,8 +0,0 @@
张勇 _10_22 5
马化腾 _10_22 5
朱光 _10_22 5
刘强东 _10_22 5

View File

@@ -1,5 +0,0 @@
hr _1_1 876
sales _1_1 872
marketing _1_1 310
strategy _1_1 360
sales _1_1 500

View File

@@ -1,18 +0,0 @@
tom _1_2 52
alice _1_2 47
lucy _1_2 31
dean _1_2 36
john _1_2 50
jack _1_2 38
admin _1_2 70
周杰伦 _4_8 100
陈奕迅 _4_8 100
林俊杰 _4_8 100
张碧晨 _4_8 100
程响 _4_8 100
Taylor#Swift _4_8 100
内地 _4_5 100
欧美 _4_5 100
港台 _4_5 100
流行 _4_7 100
国风 _4_7 100

View File

@@ -1,6 +0,0 @@
p1 _3_4 52
p2 _3_4 47
p3 _3_4 31
p4 _3_4 36
p5 _3_4 50
p6 _3_4 38

View File

@@ -1,9 +0,0 @@
周杰伦 _4_8 9000
周深 _4_8 8000
周传雄 _4_8 7000
周华建 _4_8 6000
陈奕迅 _4_8 8000
林俊杰 _4_8 7000
张碧晨 _4_8 7000
程响 _4_8 7000
Taylor#Swift _4_8 7000

View File

@@ -1,4 +0,0 @@
美国 _5_8 1
加拿大 _5_8 1
锡尔赫特、吉大港、库斯蒂亚 _5_8 1
孟加拉国 _5_8 3

View File

@@ -1,6 +0,0 @@
现代 _5_9 1
tagore _5_9 1
蓝调 _5_9 1
流行 _5_9 1
民间 _5_9 1
nazrul _5_9 1

View File

@@ -1,4 +0,0 @@
美国 _6_11 1
印度 _6_11 2
英国 _6_11 1
孟加拉国 _6_11 2

View File

@@ -1,2 +0,0 @@
男性 _6_12 3
女性 _6_12 3

View File

@@ -1,2 +0,0 @@
mp4 _7_14 4
mp3 _7_14 2

View File

@@ -1,4 +0,0 @@
美国 _8_17 1
印度 _8_17 2
英国 _8_17 1
孟加拉国 _8_17 2

View File

@@ -1,2 +0,0 @@
英文 _8_18 2
孟加拉语 _8_18 4

View File

@@ -1,6 +0,0 @@
阿米·奥帕尔·霍伊 _8_16 1
我的爱 _8_16 1
打败它 _8_16 1
阿杰伊阿卡什 _8_16 1
Tumi#长袍#尼罗布 _8_16 1
舒克诺#帕塔尔#努普尔#帕埃 _8_16 1

View File

@@ -1,5 +0,0 @@
百度集团 _9_15 5
阿里巴巴集团 _9_15 5
深圳市腾讯计算机系统有限公司 _9_15 5
北京京东世纪贸易有限公司 _9_15 5
网易公司 _9_15 5

View File

@@ -1,4 +0,0 @@
北京 _9_16 5
杭州 _9_16 5
深圳 _9_16 5

View File

@@ -1,7 +0,0 @@
李彦宏 _9_18 5
马云 _9_18 5
马化腾 _9_18 5
刘强东 _9_18 5
丁磊 _9_18 5

View File

@@ -1,7 +0,0 @@
李彦宏 _9_19 5
张勇 _9_19 5
刘炽平 _9_19 5
刘强东 _9_19 5
丁磊 _9_19 5

View File

@@ -0,0 +1,4 @@
HR _1_1 1
strategy _1_1 1
marketing _1_1 2
sales _1_1 2

View File

@@ -0,0 +1,6 @@
tom _1_2 1
alice _1_2 1
lucy _1_2 1
dean _1_2 1
john _1_2 1
jack _1_2 1

View File

@@ -0,0 +1,4 @@
p1 _3_4 3
p3 _3_4 4
p4 _3_4 4
p5 _3_4 2

View File

@@ -0,0 +1,3 @@
欧美 _4_5 1
港台 _4_5 3
内地 _4_5 2

View File

@@ -0,0 +1,6 @@
美人鱼 _4_6 1
青花瓷 _4_6 1
Love#Story _4_6 1
爱情转移 _4_6 1
人间烟火 _4_6 1
光的方向 _4_6 1

View File

@@ -0,0 +1,2 @@
国风 _4_7 2
流行 _4_7 4

View File

@@ -0,0 +1,6 @@
张碧晨 _4_8 1
周杰伦 _4_8 1
Taylor#Swift _4_8 1
程响 _4_8 1
林俊杰 _4_8 1
陈奕迅 _4_8 1

View File

@@ -1,44 +0,0 @@
序号,代码,名称,帮助记忆的诠释,例子及注解
1,Ag,形语素,形容词性语素。形容词代码为a语素代码前面置以A。,绿色/n 似/d 锦/Ag
2,a,形容词,取英语形容词adjective的第1个字母,[重要/a 步伐/n]NP ,美丽/a ,看似/v 抽象/a
3,ad,副形词,直接作状语的形容词。形容词代码a和副词代码d并在一起。,[积极/ad 谋求/v]V-ZZ ,幻象/n 易/ad 逝/Vg
4,an,名形词,具有名词功能的形容词。形容词代码a和名词代码n并在一起。,[外交/n 和/c 安全/an]NP-BL
5,Bg,区别语素,区别词性语素。区别词代码为b语素代码前面置以B。,赤/Ag 橙/Bg 黄/a 绿/a 青/a 蓝/a 紫/a
6,b,区别词,取汉字“别”的声母。,女/b 司机/n 金/b 手镯/n 慢性/b 胃炎/n 古/b 钱币/n 副/b 主任/n 总/b 公司/n单音节区别词和单音节名词或名语素组合作为一个词并标以名词词性n。 雄鸡/n 雌象/n 女魔/n 古币/n少数“单音节区别词+双音节词”的结构作为一个词。总书记/n
7,c,连词,取英语连词conjunction的第1个字母。,合作/vn 与/c 伙伴/n
8,Dg,副语素,副词性语素。副词代码为d语素代码前面置以D。,了解/v 甚/Dg 深/a ,煞/Dg 是/v 喜人/a
9,d,副词,取adverb的第2个字母因其第1个字母已用于形容词。,进一步/d 发展/v
10,e,叹词,取英语叹词exclamation的第1个字母。,啊/e /w 那/r 金灿灿/z 的/u 麦穗/n
11,f,方位词,取汉字“方”。,军人/n 的/u 眼睛/n 里/f 不/d 是/v 没有/v 风景/n
12,h,前接成分,取英语head的第1个字母。,许多/m 非/h 主角/n 人物/n ,办事处/n 的/u “/w 准/h 政府/n ”/w 功能/n 不断/d 加强/v
13,i,成语,取英语成语idiom的第1个字母。,一言一行/i ,义无反顾/i
14,j,简称略语,取汉字“简”的声母。,[德/j 外长/n]NP ,文教/j
15,k,后接成分,后接成分。,少年儿童/l 朋友/n 们/k ,身体/n 健康/a 者/k
16,l,习用语,习用语尚未成为成语,有点“临时性”,取“临”的声母。,少年儿童/l 朋友/n 们/k ,落到实处/l
17,Mg,数语素,数词性语素。数词代码为m语素代码前面置以M。,甲/Mg 减下/v 的/u 人/n 让/v 乙/Mg 背上/v ,凡/d “/w 寅/Mg 年/n ”/w 中/f 出生/v 的/u 人/n 生肖/n 都/d 属/v 虎/n
18,m,数词,取英语numeral的第3个字母nu已有他用。,1数量词组应切分为数词和量词。 三/m 个/q 10/m 公斤/q 一/m 盒/q 点心/n ,但少数数量词已是词典的登录单位,则不再切分。 一个/m 一些/m 2. 基数、序数、小数、分数、百分数一律不予切分,为一个切分单位,标注为 m 。一百二十三/m20万/m 123.54/m 一个/m 第一/m 第三十五/m 20%/m 三分之二/m 千分之三十/m 几十/m 人/n 十几万/m 元/q 第一百零一/m 个/q 3. 约数,前加副词、形容词或后加“来、多、左右”等助数词的应予分开。约/d 一百/m 多/m 万/m仅/d 一百/m 个/q 四十/m 来/m 个/q二十/m 余/m 只/q 十几/m 个/q三十/m 左右/m ,两个数词相连的及“成百”、“上千”等则不予切分。五六/m 年/q 七八/m 天/q十七八/m 岁/q 成百/m 学生/n上千/m 人/n 4表序关系的“数名”结构应予切分。二/m 连/n , 三/m 部/n
19,Ng,名语素,名词性语素。名词代码为n语素代码前面置以N。,出/v 过/u 两/m 天/q 差/Ng 理/v 了/u 一/m 次/q 发/Ng
20,n,名词,取英语名词noun的第1个字母。,(参见 动词--v岗位/n 城市/n 机会/n ,她/r 是/v 责任/n 编辑/n
21,nr,人名,名词代码n和“人(ren)”的声母并在一起。,1. 汉族人及与汉族起名方式相同的非汉族人的姓和名单独切分并分别标注为nr。张/nr 仁伟/nr 欧阳/nr 修/nr 阮/nr 志雄/nr 朴/nr 贞爱/nr汉族人除有单姓和复姓外还有双姓即有的女子出嫁后在原来的姓上加上丈夫的姓。如陈方安生。这种情况切分、标注为陈/nr 方/nr 安生/nr唐姜氏切分、标注为唐/nr 姜氏/nr。2. 姓名后的职务、职称或称呼要分开。江/nr 主席/n 小平/nr 同志/n 江/nr 总书记/n张/nr 教授/n 王/nr 部长/n 陈/nr 老总/n 李/nr 大娘/n 刘/nr 阿姨/n 龙/nr 姑姑/n3. 对人的简称、尊称等若为两个字则合为一个切分单位并标以nr。老张/nr 大李/nr 小郝/nr 郭老/nr 陈总/nr4. 明显带排行的亲属称谓要切分开,分不清楚的则不切开。三/m 哥/n 大婶/n 大/a 女儿/n 大哥/n 小弟/n 老爸/n5. 一些著名作者的或不易区分姓和名的笔名通常作为一个切分单位。鲁迅/nr 茅盾/nr 巴金/nr 三毛/nr 琼瑶/nr 白桦/nr6. 外国人或少数民族的译名包括日本人的姓名不予切分标注为nr。克林顿/nr 叶利钦/nr 才旦卓玛/nr 小林多喜二/nr 北研二/nr华盛顿/nr 爱因斯坦/nr有些西方人的姓名中有小圆点也不分开。卡尔·马克思/nr
22,ns,地名,名词代码n和处所词代码s并在一起。,参见2。短语标记说明--NS安徽/ns深圳/ns杭州/ns拉萨/ns哈尔滨/ns 呼和浩特/ns 乌鲁木齐/ns长江/ns黄海/ns太平洋/ns 泰山/ns 华山/ns亚洲/ns 海南岛/ns太湖/ns白洋淀/ns 俄罗斯/ns哈萨克斯坦/ns彼得堡/ns 伏尔加格勒/ns 1. 国名不论长短,作为一个切分单位。中国/ns 中华人民共和国/ns 日本国/ns 美利坚合众国/ns 美国/ns2. 地名后有“省”、“市”、“县”、“区”、“乡”、“镇”、“村”、“旗”、“州”、“都”、“府”、“道”等单字的行政区划名称时,不切分开,作为一个切分单位。四川省/ns 天津市/ns景德镇/ns沙市市/ns 牡丹江市/ns正定县/ns海淀区/ns 通州区/ns东升乡/ns 双桥镇/ns 南化村/ns华盛顿州/ns俄亥俄州/ns东京都/ns 大阪府/ns北海道/ns 长野县/ns开封府/ns宣城县/ns3. 地名后的行政区划有两个以上的汉字则将地名同行政区划名称切开不过要将地名同行政区划名称用方括号括起来并标以短语NS。[芜湖/ns 专区/n] NS[宣城/ns 地区/n]ns[内蒙古/ns 自治区/n]NS[深圳/ns 特区/n]NS [厦门/ns 经济/n 特区/n]NS [香港/ns 特别/a 行政区/n]NS[香港/ns 特区/n]NS [华盛顿/ns 特区/n]NS4. 地名后有表示地形地貌的一个字的普通名词,如“江、河、山、洋、海、岛、峰、湖”等,不予切分。鸭绿江/ns亚马逊河/ns 喜马拉雅山/ns 珠穆朗玛峰/ns地中海/ns大西洋/ns洞庭湖/ns 塞普路斯岛/ns 5. 地名后接的表示地形地貌的普通名词若有两个以上汉字则应切开。然后将地名同该普通名词标成短语NS。[台湾/ns 海峡/n]NS[华北/ns 平原/n]NS[帕米尔/ns 高原/n]NS [南沙/ns 群岛/n]NS[京东/ns 大/a 峡谷/n]NS [横断/b 山脉/n]NS6地名后有表示自然区划的一个字的普通名词如“ 街,路,道,巷,里,町,庄,村,弄,堡”等,不予切分。 中关村/ns长安街/ns学院路/ns 景德镇/ns 吴家堡/ns 庞各庄/ns 三元里/ns彼得堡/ns 北菜市巷/ns 7地名后接的表示自然区划的普通名词若有两个以上汉字则应切开。然后将地名同自然区划名词标成短语NS。[米市/ns 大街/n]NS [蒋家/nz 胡同/n]NS [陶然亭/ns 公园/n]NS 8 大小地名相连时的标注方式为:北京市/ns 海淀区/ns 海淀镇/ns [南/f 大街/n]NS [蒋家/nz 胡同/n]NS 24/m 号/q
23,nt,机构团体,“团”的声母为t名词代码n和t并在一起。,参见2。短语标记说明--NT联合国/nt中共中央/nt国务院/nt 北京大学/nt1大多数团体、机构、组织的专有名称一般是短语型的较长且含有地名或人名等专名再组合标注为短语NT。[中国/ns 计算机/n 学会/n]NT [香港/ns 钟表业/n 总会/n]NT [烟台/ns 大学/n]NT [香港/ns 理工大学/n]NT [华东/ns 理工大学/n]NT[合肥/ns 师范/n 学院/n]NT [北京/ns 图书馆/n]NT [富士通/nz 株式会社/n]NT [香山/ns 植物园/n]NT [安娜/nz 美容院/n]NT[上海/ns 手表/n 厂/n]NT [永和/nz 烧饼铺/n]NT[北京/ns 国安/nz 队/n]NT2. 对于在国际或中国范围内的知名的唯一的团体、机构、组织的名称即使前面没有专名也标为nt或NT。联合国/nt国务院/nt外交部/nt 财政部/nt教育部/nt 国防部/nt[世界/n 贸易/n 组织/n]NT [国家/n 教育/vn 委员会/n]NT[信息/n 产业/n 部/n]NT[全国/n 信息/n 技术/n 标准化/vn 委员会/n]NT[全国/n 总/b 工会/n]NT[全国/n 人民/n 代表/n 大会/n]NT美国的“国务院”其他国家的“外交部、财政部、教育部”必须在其所属国的国名之后出现时才联合标注为NT。[美国/ns 国务院/n]NT[法国/ns 外交部/n]NT[美/j 国会/n]NT日本有些政府机构名称很特别无论是否出现在“日本”国名之后都标为nt。[日本/ns 外务省/nt]NT[日/j 通产省/nt]NT通产省/nt 3. 前后相连有上下位关系的团体机构组织名称的处理方式如下:[联合国/nt 教科文/j 组织/n]NT [中国/ns 银行/n 北京/ns 分行/n]NT[河北省/ns 正定县/ns 西平乐乡/ns 南化村/ns 党支部/n]NT 当下位名称含有专名(如“北京/ns 分行/n”、“南化村/ns 党支部/n”、“昌平/ns 分校/n”也可脱离前面的上位名称单独标注为NT。[中国/ns 银行/n]NT [北京/ns 分行/n]NT北京大学/nt [昌平/ns 分校/n]NT4. 团体、机构、组织名称中用圆括号加注简称时:[宝山/ns 钢铁/n /w 宝钢/j /w 总/b 公司/n]NT[宝山/ns 钢铁/n 总/b 公司/n]NT/w 宝钢/j /w
24,nx,外文字符,外文字符。,A/nx 公司/n B/nx 先生/n X/nx 君/Ng 24/m K/nx 镀金/n C/nx 是/v 光速/n Windows98/nx PentiumIV/nx I LOVE THIS GAME/nx
25,nz,其他专名,“专”的声母的第1个字母为z名词代码n和z并在一起。,参见2。短语标记说明--NZ除人名、国名、地名、团体、机构、组织以外的其他专有名词都标以nz。满族/nz俄罗斯族/nz汉语/nz罗马利亚语/nz 捷克语/nz中文/nz 英文/nz 满人/nz 哈萨克人/nz 诺贝尔奖/nz 茅盾奖/nz 1.包含专有名称或简称的交通线标以nz短语型的标为NZ。津浦路/nz 石太线/nz [京/j 九/j 铁路/n]NZ [京/j 津/j 高速/b 公路/n]NZ 2. 历史上重要事件、运动等专有名称一般是短语型的按短语型专有名称处理标以NZ。[卢沟桥/ns 事件/n]NZ [西安/ns 事变/n]NZ[五四/t 运动/n]NZ [明治/nz 维新/n]NZ[甲午/t 战争/n]NZ3.专有名称后接多音节的名词,如“语言”、“文学”、“文化”、“方式”、“精神”等,失去专指性,则应分开。欧洲/ns 语言/n 法国/ns 文学/n 西方/ns 文化/n 贝多芬/nr 交响乐/n 雷锋/nr 精神/n 美国/ns 方式/n日本/ns 料理/n 宋朝/t 古董/n 4. 商标包括专名及后接的“牌”、“型”等是专指的标以nz但其后所接的商品仍标以普通名词n。康师傅/nr 方便面/n 中华牌/nz 香烟/n 牡丹III型/nz 电视机/n 联想/nz 电脑/n 鳄鱼/nz 衬衣/n 耐克/nz 鞋/n5. 以序号命名的名称一般不认为是专有名称。2/m 号/q 国道/n ,十一/m 届/q 三中全会/j如果前面有专名合起来作为短语型专名。[中国/ns 101/m 国道/n]NZ [中共/j 十一/m 届/q 三中全会/j]NZ6. 书、报、杂志、文档、报告、协议、合同等的名称通常有书名号加以标识,不作为专有名词。由于这些名字往往较长,名字本身按常规处理。《/w 宁波/ns 日报/n 》/w ,《/w 鲁迅/nr 全集/n 》/w中华/nz 读书/vn 报/n 杜甫/nr 诗选/n少数书名、报刊名等专有名称则不切分。红楼梦/nz 人民日报/nz儒林外史/nz 7. 当有些专名无法分辨它们是人名还是地名或机构名时暂标以nz。[巴黎/ns 贝尔希/nz 体育馆/n]NT其中“贝尔希”只好暂标为nz。
26,o,拟声词,取英语拟声词onomatopoeia的第1个字母。,哈哈/o 一/m 笑/v ,装载机/n 隆隆/o 推进/v
27,p,介词,取英语介词prepositional的第1个字母。,对/p 子孙后代/n 负责/v ,以/p 煤/n 养/v 农/Ng ,为/p 治理/v 荒山/n 服务/v 把/p 青年/n 推/v 上/v 了/u 领导/vn 岗位/n
28,q,量词,取英语quantity的第1个字母。,参见数词m首/m 批/q ,一/m 年/q
29,Rg,代语素,代词性语素。代词代码为r在语素的代码g前面置以R。,读者/n 就/d 是/v 这/r 两/m 棵/q 小树/n 扎根/v 于/p 斯/Rg 、/w 成长/v 于/p 斯/Rg 的/u 肥田/n 沃土/n
30,r,代词,取英语代词pronoun的第2个字母因p已用于介词。,单音节代词“本”、“每”、“各”、“诸”后接单音节名词时,和后接的单音节名词合为代词;当后接双音节名词时,应予切分。本报/r 每人/r 本社/r 本/r 地区/n 各/r 部门/n
31,s,处所词,取英语space的第1个字母。,家里/s 的/u 电脑/n 都/d 联通/v 了/u 国际/n 互联网/n ,西部/s 交通/n 咽喉/n
32,Tg,时语素,时间词性语素。时间词代码为t在语素的代码g前面置以T。,3日/t 晚/Tg 在/p 总统府/n 发表/v 声明/n ,尊重/v 现/Tg 执政/vn 当局/n 的/u 权威/n
33,t,时间词,取英语time的第1个字母。,1. 年月日时分秒按年、月、日、时、分、秒切分标注为t 。1997年/t 3月/t 19日/t 下午/t 2时/t 18分/t若数字后无表示时间的“年、月、日、时、分、秒”等的标为数词m。1998/m 中文/n 信息/n 处理/vn 国际/n 会议/n 2. 历史朝代的名称虽然有专有名词的性质仍标注为t。西周/t 秦朝/t 东汉/t 南北朝/t 清代/t“牛年、虎年”等一律不予切分标注为牛年/t 虎年/t 甲午年/t 甲午/t 战争/n 庚子/t 赔款/n 戊戌/t 变法/n
34,u,助词,取英语助词auxiliary。,[[俄罗斯/ns 和/c 北约/j]NP-BL 之间/f [战略/n 伙伴/n 关系/n]NP 的/u 建立/vn]NP 填平/v 了/u [[欧洲/ns 安全/a 政治/n]NP 的/u 鸿沟/n]NP
35,Vg,动语素,动词性语素。动词代码为v。在语素的代码g前面置以V。,洗/v 了/u 一个/m 舒舒服服/z 的/u 澡/Vg
36,v,动词,取英语动词verb的第一个字母。,(参见 名词--n[[[欧盟/j 扩大/v]S 的/u [历史性/n 决定/n]NP]NP 和/c [北约/j 开放/v]S]NP-BL [为/p [创建/v [一/m 种/q 新/a 的/u 欧洲/ns 安全/a 格局/n]NP]VP-SBI]PP-MD [奠定/v 了/u 基础/n]V-SBI
37,vd,副动词,直接作状语的动词。动词和副词的代码并在一起。,形势/n 会/v 持续/vd 好转/v ,认为/v 是/v 电话局/n 收/v 错/vd 了/u 费/n
38,vn,名动词,指具有名词功能的动词。动词和名词的代码并在一起。,引起/v 人们/n 的/u 关注/vn 和/c 思考/vn ,收费/vn 电话/n 的/u 号码/n
39,w,标点符号,,”/w /w
40,x,非语素字,非语素字只是一个符号字母x通常用于代表未知数、符号。,
41,Yg,语气语素,语气词性语素。语气词代码为y。在语素的代码g前面置以Y。,唯/d 大力/d 者/k 能/v 致/v 之/u 耳/Yg
42,y,语气词,取汉字“语”的声母。,会/v 泄露/v 用户/n 隐私/n 吗/y ,又/d 何在/v 呢/y
43,z,状态词,取汉字“状”的声母的前一个字母。,取得/v 扎扎实实/z 的/u 突破性/n 进展/vn ,四季/n 常青/z 的/u 热带/n 树木/n ,短短/z 几/m 年/q 间,
1 序号 代码 名称 帮助记忆的诠释 例子及注解
序号 代码 名称 帮助记忆的诠释 例子及注解
1 Ag 形语素 形容词性语素。形容词代码为a,语素代码g前面置以A。 绿色/n 似/d 锦/Ag ,
2 a 形容词 取英语形容词adjective的第1个字母 [重要/a 步伐/n]NP ,美丽/a ,看似/v 抽象/a ,
3 ad 副形词 直接作状语的形容词。形容词代码a和副词代码d并在一起。 [积极/ad 谋求/v]V-ZZ ,幻象/n 易/ad 逝/Vg ,
4 an 名形词 具有名词功能的形容词。形容词代码a和名词代码n并在一起。 [外交/n 和/c 安全/an]NP-BL ,
5 Bg 区别语素 区别词性语素。区别词代码为b,语素代码g前面置以B。 赤/Ag 橙/Bg 黄/a 绿/a 青/a 蓝/a 紫/a ,
6 b 区别词 取汉字“别”的声母。 女/b 司机/n, 金/b 手镯/n, 慢性/b 胃炎/n, 古/b 钱币/n, 副/b 主任/n, 总/b 公司/n单音节区别词和单音节名词或名语素组合,作为一个词,并标以名词词性n。 雄鸡/n, 雌象/n, 女魔/n, 古币/n少数“单音节区别词+双音节词”的结构作为一个词。总书记/n ,
7 c 连词 取英语连词conjunction的第1个字母。 合作/vn 与/c 伙伴/n
8 Dg 副语素 副词性语素。副词代码为d,语素代码g前面置以D。 了解/v 甚/Dg 深/a ,煞/Dg 是/v 喜人/a ,
9 d 副词 取adverb的第2个字母,因其第1个字母已用于形容词。 进一步/d 发展/v ,
10 e 叹词 取英语叹词exclamation的第1个字母。 啊/e ,/w 那/r 金灿灿/z 的/u 麦穗/n ,
11 f 方位词 取汉字“方”。 军人/n 的/u 眼睛/n 里/f 不/d 是/v 没有/v 风景/n ,
12 h 前接成分 取英语head的第1个字母。 许多/m 非/h 主角/n 人物/n ,办事处/n 的/u “/w 准/h 政府/n ”/w 功能/n 不断/d 加强/v ,
13 i 成语 取英语成语idiom的第1个字母。 一言一行/i ,义无反顾/i ,
14 j 简称略语 取汉字“简”的声母。 [德/j 外长/n]NP ,文教/j ,
15 k 后接成分 后接成分。 少年儿童/l 朋友/n 们/k ,身体/n 健康/a 者/k ,
16 l 习用语 习用语尚未成为成语,有点“临时性”,取“临”的声母。 少年儿童/l 朋友/n 们/k ,落到实处/l ,
17 Mg 数语素 数词性语素。数词代码为m,语素代码g前面置以M。 甲/Mg 减下/v 的/u 人/n 让/v 乙/Mg 背上/v ,凡/d “/w 寅/Mg 年/n ”/w 中/f 出生/v 的/u 人/n 生肖/n 都/d 属/v 虎/n ,
18 m 数词 取英语numeral的第3个字母,n,u已有他用。 1.数量词组应切分为数词和量词。 三/m 个/q, 10/m 公斤/q, 一/m 盒/q 点心/n ,但少数数量词已是词典的登录单位,则不再切分。 一个/m , 一些/m ,2. 基数、序数、小数、分数、百分数一律不予切分,为一个切分单位,标注为 m 。一百二十三/m,20万/m, 123.54/m, 一个/m, 第一/m, 第三十五/m, 20%/m, 三分之二/m, 千分之三十/m, 几十/m 人/n, 十几万/m 元/q, 第一百零一/m 个/q ,3. 约数,前加副词、形容词或后加“来、多、左右”等助数词的应予分开。约/d 一百/m 多/m 万/m,仅/d 一百/m 个/q, 四十/m 来/m 个/q,二十/m 余/m 只/q, 十几/m 个/q,三十/m 左右/m ,两个数词相连的及“成百”、“上千”等则不予切分。五六/m 年/q, 七八/m 天/q,十七八/m 岁/q, 成百/m 学生/n,上千/m 人/n, 4.表序关系的“数+名”结构,应予切分。二/m 连/n , 三/m 部/n ,
19 Ng 名语素 名词性语素。名词代码为n,语素代码g前面置以N。 出/v 过/u 两/m 天/q 差/Ng, 理/v 了/u 一/m 次/q 发/Ng,
20 n 名词 取英语名词noun的第1个字母。 (参见 动词--v)岗位/n , 城市/n , 机会/n ,她/r 是/v 责任/n 编辑/n ,
21 nr 人名 名词代码n和“人(ren)”的声母并在一起。 1. 汉族人及与汉族起名方式相同的非汉族人的姓和名单独切分,并分别标注为nr。张/nr 仁伟/nr, 欧阳/nr 修/nr, 阮/nr 志雄/nr, 朴/nr 贞爱/nr汉族人除有单姓和复姓外,还有双姓,即有的女子出嫁后,在原来的姓上加上丈夫的姓。如:陈方安生。这种情况切分、标注为:陈/nr 方/nr 安生/nr;唐姜氏,切分、标注为:唐/nr 姜氏/nr。2. 姓名后的职务、职称或称呼要分开。江/nr 主席/n, 小平/nr 同志/n, 江/nr 总书记/n,张/nr 教授/n, 王/nr 部长/n, 陈/nr 老总/n, 李/nr 大娘/n, 刘/nr 阿姨/n, 龙/nr 姑姑/n3. 对人的简称、尊称等若为两个字,则合为一个切分单位,并标以nr。老张/nr, 大李/nr, 小郝/nr, 郭老/nr, 陈总/nr4. 明显带排行的亲属称谓要切分开,分不清楚的则不切开。三/m 哥/n, 大婶/n, 大/a 女儿/n, 大哥/n, 小弟/n, 老爸/n5. 一些著名作者的或不易区分姓和名的笔名通常作为一个切分单位。鲁迅/nr, 茅盾/nr, 巴金/nr, 三毛/nr, 琼瑶/nr, 白桦/nr6. 外国人或少数民族的译名(包括日本人的姓名)不予切分,标注为nr。克林顿/nr, 叶利钦/nr, 才旦卓玛/nr, 小林多喜二/nr, 北研二/nr,华盛顿/nr, 爱因斯坦/nr有些西方人的姓名中有小圆点,也不分开。卡尔·马克思/nr
22 ns 地名 名词代码n和处所词代码s并在一起。 (参见2。短语标记说明--NS)安徽/ns,深圳/ns,杭州/ns,拉萨/ns,哈尔滨/ns, 呼和浩特/ns, 乌鲁木齐/ns,长江/ns,黄海/ns,太平洋/ns, 泰山/ns, 华山/ns,亚洲/ns, 海南岛/ns,太湖/ns,白洋淀/ns, 俄罗斯/ns,哈萨克斯坦/ns,彼得堡/ns, 伏尔加格勒/ns 1. 国名不论长短,作为一个切分单位。中国/ns, 中华人民共和国/ns, 日本国/ns, 美利坚合众国/ns, 美国/ns2. 地名后有“省”、“市”、“县”、“区”、“乡”、“镇”、“村”、“旗”、“州”、“都”、“府”、“道”等单字的行政区划名称时,不切分开,作为一个切分单位。四川省/ns, 天津市/ns,景德镇/ns沙市市/ns, 牡丹江市/ns,正定县/ns,海淀区/ns, 通州区/ns,东升乡/ns, 双桥镇/ns 南化村/ns,华盛顿州/ns,俄亥俄州/ns,东京都/ns, 大阪府/ns,北海道/ns, 长野县/ns,开封府/ns,宣城县/ns3. 地名后的行政区划有两个以上的汉字,则将地名同行政区划名称切开,不过要将地名同行政区划名称用方括号括起来,并标以短语NS。[芜湖/ns 专区/n] NS,[宣城/ns 地区/n]ns,[内蒙古/ns 自治区/n]NS,[深圳/ns 特区/n]NS, [厦门/ns 经济/n 特区/n]NS, [香港/ns 特别/a 行政区/n]NS,[香港/ns 特区/n]NS, [华盛顿/ns 特区/n]NS,4. 地名后有表示地形地貌的一个字的普通名词,如“江、河、山、洋、海、岛、峰、湖”等,不予切分。鸭绿江/ns,亚马逊河/ns, 喜马拉雅山/ns, 珠穆朗玛峰/ns,地中海/ns,大西洋/ns,洞庭湖/ns, 塞普路斯岛/ns 5. 地名后接的表示地形地貌的普通名词若有两个以上汉字,则应切开。然后将地名同该普通名词标成短语NS。[台湾/ns 海峡/n]NS,[华北/ns 平原/n]NS,[帕米尔/ns 高原/n]NS, [南沙/ns 群岛/n]NS,[京东/ns 大/a 峡谷/n]NS [横断/b 山脉/n]NS6.地名后有表示自然区划的一个字的普通名词,如“ 街,路,道,巷,里,町,庄,村,弄,堡”等,不予切分。 中关村/ns,长安街/ns,学院路/ns, 景德镇/ns, 吴家堡/ns, 庞各庄/ns, 三元里/ns,彼得堡/ns, 北菜市巷/ns, 7.地名后接的表示自然区划的普通名词若有两个以上汉字,则应切开。然后将地名同自然区划名词标成短语NS。[米市/ns 大街/n]NS, [蒋家/nz 胡同/n]NS , [陶然亭/ns 公园/n]NS , 8. 大小地名相连时的标注方式为:北京市/ns 海淀区/ns 海淀镇/ns [南/f 大街/n]NS [蒋家/nz 胡同/n]NS 24/m 号/q ,
23 nt 机构团体 “团”的声母为t,名词代码n和t并在一起。 (参见2。短语标记说明--NT)联合国/nt,中共中央/nt,国务院/nt, 北京大学/nt1.大多数团体、机构、组织的专有名称一般是短语型的,较长,且含有地名或人名等专名,再组合,标注为短语NT。[中国/ns 计算机/n 学会/n]NT, [香港/ns 钟表业/n 总会/n]NT, [烟台/ns 大学/n]NT, [香港/ns 理工大学/n]NT, [华东/ns 理工大学/n]NT,[合肥/ns 师范/n 学院/n]NT, [北京/ns 图书馆/n]NT, [富士通/nz 株式会社/n]NT, [香山/ns 植物园/n]NT, [安娜/nz 美容院/n]NT,[上海/ns 手表/n 厂/n]NT, [永和/nz 烧饼铺/n]NT,[北京/ns 国安/nz 队/n]NT,2. 对于在国际或中国范围内的知名的唯一的团体、机构、组织的名称即使前面没有专名,也标为nt或NT。联合国/nt,国务院/nt,外交部/nt, 财政部/nt,教育部/nt, 国防部/nt,[世界/n 贸易/n 组织/n]NT, [国家/n 教育/vn 委员会/n]NT,[信息/n 产业/n 部/n]NT,[全国/n 信息/n 技术/n 标准化/vn 委员会/n]NT,[全国/n 总/b 工会/n]NT,[全国/n 人民/n 代表/n 大会/n]NT,美国的“国务院”,其他国家的“外交部、财政部、教育部”,必须在其所属国的国名之后出现时,才联合标注为NT。[美国/ns 国务院/n]NT,[法国/ns 外交部/n]NT,[美/j 国会/n]NT,日本有些政府机构名称很特别,无论是否出现在“日本”国名之后都标为nt。[日本/ns 外务省/nt]NT,[日/j 通产省/nt]NT通产省/nt 3. 前后相连有上下位关系的团体机构组织名称的处理方式如下:[联合国/nt 教科文/j 组织/n]NT, [中国/ns 银行/n 北京/ns 分行/n]NT,[河北省/ns 正定县/ns 西平乐乡/ns 南化村/ns 党支部/n]NT, 当下位名称含有专名(如“北京/ns 分行/n”、“南化村/ns 党支部/n”、“昌平/ns 分校/n”)时,也可脱离前面的上位名称单独标注为NT。[中国/ns 银行/n]NT [北京/ns 分行/n]NT,北京大学/nt [昌平/ns 分校/n]NT,4. 团体、机构、组织名称中用圆括号加注简称时:[宝山/ns 钢铁/n (/w 宝钢/j )/w 总/b 公司/n]NT,[宝山/ns 钢铁/n 总/b 公司/n]NT,(/w 宝钢/j )/w
24 nx 外文字符 外文字符。 A/nx 公司/n ,B/nx 先生/n ,X/nx 君/Ng ,24/m K/nx 镀金/n ,C/nx 是/v 光速/n ,Windows98/nx ,PentiumIV/nx ,I LOVE THIS GAME/nx ,
25 nz 其他专名 “专”的声母的第1个字母为z,名词代码n和z并在一起。 (参见2。短语标记说明--NZ)除人名、国名、地名、团体、机构、组织以外的其他专有名词都标以nz。满族/nz,俄罗斯族/nz,汉语/nz,罗马利亚语/nz, 捷克语/nz,中文/nz, 英文/nz, 满人/nz, 哈萨克人/nz, 诺贝尔奖/nz, 茅盾奖/nz, 1.包含专有名称(或简称)的交通线,标以nz;短语型的,标为NZ。津浦路/nz, 石太线/nz, [京/j 九/j 铁路/n]NZ, [京/j 津/j 高速/b 公路/n]NZ, 2. 历史上重要事件、运动等专有名称一般是短语型的,按短语型专有名称处理,标以NZ。[卢沟桥/ns 事件/n]NZ, [西安/ns 事变/n]NZ,[五四/t 运动/n]NZ, [明治/nz 维新/n]NZ,[甲午/t 战争/n]NZ,3.专有名称后接多音节的名词,如“语言”、“文学”、“文化”、“方式”、“精神”等,失去专指性,则应分开。欧洲/ns 语言/n, 法国/ns 文学/n, 西方/ns 文化/n, 贝多芬/nr 交响乐/n, 雷锋/nr 精神/n, 美国/ns 方式/n,日本/ns 料理/n, 宋朝/t 古董/n 4. 商标(包括专名及后接的“牌”、“型”等)是专指的,标以nz,但其后所接的商品仍标以普通名词n。康师傅/nr 方便面/n, 中华牌/nz 香烟/n, 牡丹III型/nz 电视机/n, 联想/nz 电脑/n, 鳄鱼/nz 衬衣/n, 耐克/nz 鞋/n5. 以序号命名的名称一般不认为是专有名称。2/m 号/q 国道/n ,十一/m 届/q 三中全会/j如果前面有专名,合起来作为短语型专名。[中国/ns 101/m 国道/n]NZ, [中共/j 十一/m 届/q 三中全会/j]NZ,6. 书、报、杂志、文档、报告、协议、合同等的名称通常有书名号加以标识,不作为专有名词。由于这些名字往往较长,名字本身按常规处理。《/w 宁波/ns 日报/n 》/w ,《/w 鲁迅/nr 全集/n 》/w,中华/nz 读书/vn 报/n, 杜甫/nr 诗选/n,少数书名、报刊名等专有名称,则不切分。红楼梦/nz, 人民日报/nz,儒林外史/nz 7. 当有些专名无法分辨它们是人名还是地名或机构名时,暂标以nz。[巴黎/ns 贝尔希/nz 体育馆/n]NT,其中“贝尔希”只好暂标为nz。
26 o 拟声词 取英语拟声词onomatopoeia的第1个字母。 哈哈/o 一/m 笑/v ,装载机/n 隆隆/o 推进/v ,
27 p 介词 取英语介词prepositional的第1个字母。 对/p 子孙后代/n 负责/v ,以/p 煤/n 养/v 农/Ng ,为/p 治理/v 荒山/n 服务/v , 把/p 青年/n 推/v 上/v 了/u 领导/vn 岗位/n ,
28 q 量词 取英语quantity的第1个字母。 (参见数词m)首/m 批/q ,一/m 年/q ,
29 Rg 代语素 代词性语素。代词代码为r,在语素的代码g前面置以R。 读者/n 就/d 是/v 这/r 两/m 棵/q 小树/n 扎根/v 于/p 斯/Rg 、/w 成长/v 于/p 斯/Rg 的/u 肥田/n 沃土/n ,
30 r 代词 取英语代词pronoun的第2个字母,因p已用于介词。 单音节代词“本”、“每”、“各”、“诸”后接单音节名词时,和后接的单音节名词合为代词;当后接双音节名词时,应予切分。本报/r, 每人/r, 本社/r, 本/r 地区/n, 各/r 部门/n
31 s 处所词 取英语space的第1个字母。 家里/s 的/u 电脑/n 都/d 联通/v 了/u 国际/n 互联网/n ,西部/s 交通/n 咽喉/n ,
32 Tg 时语素 时间词性语素。时间词代码为t,在语素的代码g前面置以T。 3日/t 晚/Tg 在/p 总统府/n 发表/v 声明/n ,尊重/v 现/Tg 执政/vn 当局/n 的/u 权威/n ,
33 t 时间词 取英语time的第1个字母。 1. 年月日时分秒,按年、月、日、时、分、秒切分,标注为t 。1997年/t 3月/t 19日/t 下午/t 2时/t 18分/t若数字后无表示时间的“年、月、日、时、分、秒”等的标为数词m。1998/m 中文/n 信息/n 处理/vn 国际/n 会议/n 2. 历史朝代的名称虽然有专有名词的性质,仍标注为t。西周/t, 秦朝/t, 东汉/t, 南北朝/t, 清代/t“牛年、虎年”等一律不予切分,标注为:牛年/t, 虎年/t, 甲午年/t, 甲午/t 战争/n, 庚子/t 赔款/n, 戊戌/t 变法/n
34 u 助词 取英语助词auxiliary。 [[俄罗斯/ns 和/c 北约/j]NP-BL 之间/f [战略/n 伙伴/n 关系/n]NP 的/u 建立/vn]NP 填平/v 了/u [[欧洲/ns 安全/a 政治/n]NP 的/u 鸿沟/n]NP
35 Vg 动语素 动词性语素。动词代码为v。在语素的代码g前面置以V。 洗/v 了/u 一个/m 舒舒服服/z 的/u 澡/Vg
36 v 动词 取英语动词verb的第一个字母。 (参见 名词--n)[[[欧盟/j 扩大/v]S 的/u [历史性/n 决定/n]NP]NP 和/c [北约/j 开放/v]S]NP-BL [为/p [创建/v [一/m 种/q 新/a 的/u 欧洲/ns 安全/a 格局/n]NP]VP-SBI]PP-MD [奠定/v 了/u 基础/n]V-SBI ,,
37 vd 副动词 直接作状语的动词。动词和副词的代码并在一起。 形势/n 会/v 持续/vd 好转/v ,认为/v 是/v 电话局/n 收/v 错/vd 了/u 费/n ,
38 vn 名动词 指具有名词功能的动词。动词和名词的代码并在一起。 引起/v 人们/n 的/u 关注/vn 和/c 思考/vn ,收费/vn 电话/n 的/u 号码/n ,
39 w 标点符号 ”/w :/w
40 x 非语素字 非语素字只是一个符号,字母x通常用于代表未知数、符号。
41 Yg 语气语素 语气词性语素。语气词代码为y。在语素的代码g前面置以Y。 唯/d 大力/d 者/k 能/v 致/v 之/u 耳/Yg
42 y 语气词 取汉字“语”的声母。 会/v 泄露/v 用户/n 隐私/n 吗/y ,又/d 何在/v 呢/y ?
43 z 状态词 取汉字“状”的声母的前一个字母。 取得/v 扎扎实实/z 的/u 突破性/n 进展/vn ,四季/n 常青/z 的/u 热带/n 树木/n ,短短/z 几/m 年/q 间,

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +0,0 @@
-- sample user
MERGE INTO s2_user (id, `name`, password, salt, display_name, email, is_admin) values (1, 'admin','c3VwZXJzb25pY0BiaWNvbTD12g9wGXESwL7+o7xUW90=','jGl25bVBBBW96Qi9Te4V3w==','admin','admin@xx.com', 1);
MERGE INTO s2_user (id, `name`, password, display_name, email) values (2, 'jack','123456','jack','jack@xx.com');
MERGE INTO s2_user (id, `name`, password, display_name, email) values (3, 'tom','123456','tom','tom@xx.com');
MERGE INTO s2_user (id, `name`, password, display_name, email, is_admin) values (4, 'lucy','123456','lucy','lucy@xx.com', 1);
MERGE INTO s2_user (id, `name`, password, display_name, email) values (5, 'alice','123456','alice','alice@xx.com');
---The default value for the password is 123456
MERGE INTO s2_user (id, `name`, password, salt, display_name, email, is_admin) values (1, 'admin','c3VwZXJzb25pY0BiaWNvbdktJJYWw6A3rEmBUPzbn/6DNeYnD+y3mAwDKEMS3KVT','jGl25bVBBBW96Qi9Te4V3w==','admin','admin@xx.com', 1);
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (2, 'jack','c3VwZXJzb25pY0BiaWNvbWxGalmwa0h/trkh/3CWOYMDiku0Op1VmOfESIKmN0HG','MWERWefm/3hD6kYndF6JIg==','jack','jack@xx.com');
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (3, 'tom','c3VwZXJzb25pY0BiaWNvbVWv0CZ6HzeX8GRUpw0C8NSaQ+0hE/dAcmzRpCFwAqxK','4WCPdcXXgT89QDHLML+3hg==','tom','tom@xx.com');
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (4, 'lucy','c3VwZXJzb25pY0BiaWNvbc7Ychfu99lPL7rLmCkf/vgF4RASa4Z++Mxo1qlDCpci','3Jnpqob6uDoGLP9eCAg5Fw==','lucy','lucy@xx.com');
MERGE INTO s2_user (id, `name`, password, salt, display_name, email) values (5, 'alice','c3VwZXJzb25pY0BiaWNvbe9Z4F2/DVIfAJoN1HwUTuH1KgVuiusvfh7KkWYQSNHk','K9gGyX8OAK8aH8Myj6djqQ==','alice','alice@xx.com');
MERGE INTO s2_available_date_info(`id`,`item_id` ,`type` ,`date_format` ,`start_date` ,`end_date` ,`unavailable_date` ,`created_at` ,`created_by` ,`updated_at` ,`updated_by` )
values (1 , 1, 'dimension', 'yyyy-MM-dd', DATEADD('DAY', -28, CURRENT_DATE()), DATEADD('DAY', -1, CURRENT_DATE()), '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
MERGE INTO s2_available_date_info(`id`,`item_id` ,`type` ,`date_format` ,`start_date` ,`end_date` ,`unavailable_date` ,`created_at` ,`created_by` ,`updated_at` ,`updated_by` )
values (2 , 2, 'dimension', 'yyyy-MM-dd', DATEADD('DAY', -28, CURRENT_DATE()), DATEADD('DAY', -1, CURRENT_DATE()), '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
MERGE INTO s2_available_date_info(`id`,`item_id` ,`type` ,`date_format` ,`start_date` ,`end_date` ,`unavailable_date` ,`created_at` ,`created_by` ,`updated_at` ,`updated_by` )
values (3 , 3, 'dimension', 'yyyy-MM-dd', DATEADD('DAY', -28, CURRENT_DATE()), DATEADD('DAY', -1, CURRENT_DATE()), '[]', '2023-06-01', 'admin', '2023-06-01', 'admin');
MERGE INTO s2_canvas(`id`, `domain_id`, `type`, `config` ,`created_at` ,`created_by` ,`updated_at` ,`updated_by` )
values (1, 1, 'modelEdgeRelation', '[{"source":"datasource-1","target":"datasource-3","type":"polyline","id":"edge-0.305251275235679741702883718912","style":{"active":{"stroke":"rgb(95, 149, 255)","lineWidth":1},"selected":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"shadowColor":"rgb(95, 149, 255)","shadowBlur":10,"text-shape":{"fontWeight":500}},"highlight":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"text-shape":{"fontWeight":500}},"inactive":{"stroke":"rgb(234, 234, 234)","lineWidth":1},"disable":{"stroke":"rgb(245, 245, 245)","lineWidth":1},"stroke":"#296df3","endArrow":true},"startPoint":{"x":-94,"y":-137.5,"anchorIndex":0,"id":"-94|||-137.5"},"endPoint":{"x":-234,"y":-45,"anchorIndex":1,"id":"-234|||-45"},"sourceAnchor":2,"targetAnchor":1,"label":"模型关系编辑"},{"source":"datasource-1","target":"datasource-2","type":"polyline","id":"edge-0.466237264629309141702883756359","style":{"active":{"stroke":"rgb(95, 149, 255)","lineWidth":1},"selected":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"shadowColor":"rgb(95, 149, 255)","shadowBlur":10,"text-shape":{"fontWeight":500}},"highlight":{"stroke":"rgb(95, 149, 255)","lineWidth":2,"text-shape":{"fontWeight":500}},"inactive":{"stroke":"rgb(234, 234, 234)","lineWidth":1},"disable":{"stroke":"rgb(245, 245, 245)","lineWidth":1},"stroke":"#296df3","endArrow":true},"startPoint":{"x":-12,"y":-137.5,"anchorIndex":1,"id":"-12|||-137.5"},"endPoint":{"x":85,"y":31.5,"anchorIndex":0,"id":"85|||31.5"},"sourceAnchor":1,"targetAnchor":2,"label":"模型关系编辑"}]', '2023-06-01', 'admin', '2023-06-01', 'admin');

View File

@@ -1,85 +0,0 @@
-------S2VisitsDemo
CREATE TABLE IF NOT EXISTS `s2_user_department` (
`user_name` varchar(200) NOT NULL,
`department` varchar(200) NOT NULL, -- department of user
PRIMARY KEY (`user_name`,`department`)
);
COMMENT ON TABLE s2_user_department IS 'user_department_info';
CREATE TABLE IF NOT EXISTS `s2_pv_uv_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_pv_uv_statis IS 's2_pv_uv_statis';
CREATE TABLE IF NOT EXISTS `s2_stay_time_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`stay_hours` DOUBLE NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_stay_time_statis IS 's2_stay_time_statis_info';
-------S2ArtistDemo
CREATE TABLE IF NOT EXISTS `singer` (
`singer_name` varchar(200) NOT NULL,
`act_area` varchar(200) NOT NULL,
`song_name` varchar(200) NOT NULL,
`genre` varchar(200) NOT NULL,
`js_play_cnt` bigINT DEFAULT NULL,
`down_cnt` bigINT DEFAULT NULL,
`favor_cnt` bigINT DEFAULT NULL,
PRIMARY KEY (`singer_name`)
);
COMMENT ON TABLE singer IS 'singer_info';
CREATE TABLE IF NOT EXISTS `genre` (
`g_name` varchar(20) NOT NULL , -- genre name
`rating` INT ,
`most_popular_in` varchar(50) ,
PRIMARY KEY (`g_name`)
);
COMMENT ON TABLE genre IS 'genre';
CREATE TABLE IF NOT EXISTS `artist` (
`artist_name` varchar(50) NOT NULL , -- genre name
`citizenship` varchar(20) ,
`gender` varchar(20) ,
`g_name` varchar(50),
PRIMARY KEY (`artist_name`,`citizenship`)
);
COMMENT ON TABLE artist IS 'artist';
-------S2CompanyDemo
CREATE TABLE IF NOT EXISTS `company` (
`company_id` varchar(50) NOT NULL ,
`company_name` varchar(50) NOT NULL ,
`headquarter_address` varchar(50) NOT NULL ,
`company_established_time` varchar(20) NOT NULL ,
`founder` varchar(20) NOT NULL ,
`ceo` varchar(20) NOT NULL ,
`annual_turnover` bigint(15) ,
`employee_count` int(7) ,
PRIMARY KEY (`company_id`)
);
CREATE TABLE IF NOT EXISTS `brand` (
`brand_id` varchar(50) NOT NULL ,
`brand_name` varchar(50) NOT NULL ,
`brand_established_time` varchar(20) NOT NULL ,
`company_id` varchar(50) NOT NULL ,
`legal_representative` varchar(20) NOT NULL ,
`registered_capital` bigint(15) ,
PRIMARY KEY (`brand_id`)
);
CREATE TABLE IF NOT EXISTS `brand_revenue` (
`year_time` varchar(10) NOT NULL ,
`brand_id` varchar(50) NOT NULL ,
`revenue` bigint(15) NOT NULL,
`profit` bigint(15) NOT NULL ,
`revenue_growth_year_on_year` double NOT NULL ,
`profit_growth_year_on_year` double NOT NULL
);

View File

@@ -1,687 +0,0 @@
-- chat tables
CREATE TABLE IF NOT EXISTS `s2_chat_context`
(
`chat_id` BIGINT NOT NULL , -- context chat id
`modified_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , -- row modify time
`user` varchar(64) DEFAULT NULL , -- row modify user
`query_text` LONGVARCHAR DEFAULT NULL , -- query text
`semantic_parse` LONGVARCHAR DEFAULT NULL , -- parse data
`ext_data` LONGVARCHAR DEFAULT NULL , -- extend data
PRIMARY KEY (`chat_id`)
);
CREATE TABLE IF NOT EXISTS `s2_chat`
(
`chat_id` BIGINT auto_increment ,-- AUTO_INCREMENT,
`agent_id` INT DEFAULT NULL,
`chat_name` varchar(100) DEFAULT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
`last_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
`creator` varchar(30) DEFAULT NULL,
`last_question` varchar(200) DEFAULT NULL,
`is_delete` INT DEFAULT '0' COMMENT 'is deleted',
`is_top` INT DEFAULT '0' COMMENT 'is top',
PRIMARY KEY (`chat_id`)
) ;
CREATE TABLE IF NOT EXISTS `s2_chat_query`
(
`question_id` BIGINT NOT NULL AUTO_INCREMENT,
`agent_id` INT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`query_text` mediumtext,
`user_name` varchar(150) DEFAULT NULL COMMENT '',
`query_state` int(1) DEFAULT NULL,
`chat_id` BIGINT NOT NULL , -- context chat id
`query_result` mediumtext NOT NULL ,
`score` int DEFAULT '0',
`feedback` varchar(1024) DEFAULT '',
`similar_queries` varchar(1024) DEFAULT '',
`parse_time_cost` varchar(1024) DEFAULT '',
PRIMARY KEY (`question_id`)
);
CREATE TABLE IF NOT EXISTS `s2_chat_parse`
(
`question_id` BIGINT NOT NULL,
`chat_id` INT NOT NULL ,
`parse_id` INT NOT NULL ,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`query_text` varchar(500),
`user_name` varchar(150) DEFAULT NULL COMMENT '',
`parse_info` mediumtext NOT NULL ,
`is_candidate` INT DEFAULT 1 COMMENT '1是candidate,0是selected'
);
CREATE TABLE IF NOT EXISTS `s2_chat_statistics`
(
`question_id` BIGINT NOT NULL,
`chat_id` BIGINT NOT NULL ,
`user_name` varchar(150) DEFAULT NULL COMMENT '',
`query_text` varchar(200),
`interface_name` varchar(100) DEFAULT NULL COMMENT '',
`cost` INT(6) NOT NULL ,
`type` INT NOT NULL ,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS `s2_chat_config` (
`id` INT NOT NULL AUTO_INCREMENT,
`model_id` INT DEFAULT NULL ,
`chat_detail_config` varchar(655) ,
`chat_agg_config` varchar(655) ,
`recommended_questions` varchar(1500) ,
`created_at` TIMESTAMP NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`status` INT NOT NULL DEFAULT '0' , -- domain extension information status : 0 is normal, 1 is off the shelf, 2 is deleted
`llm_examples` TEXT,
PRIMARY KEY (`id`)
) ;
COMMENT ON TABLE s2_chat_config IS 'chat config information table ';
CREATE TABLE IF NOT EXISTS `s2_chat_memory` (
`id` INT NOT NULL AUTO_INCREMENT,
`question` varchar(655) ,
`agent_id` INT ,
`db_schema` TEXT ,
`s2_sql` TEXT ,
`side_info` TEXT ,
`status` char(10) ,
`llm_review` char(10) ,
`llm_comment` TEXT,
`human_review` char(10) ,
`human_comment` TEXT ,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
`created_by` varchar(100) ,
`updated_by` varchar(100) ,
PRIMARY KEY (`id`)
) ;
COMMENT ON TABLE s2_chat_memory IS 'chat memory table ';
CREATE TABLE IF NOT EXISTS `s2_chat_model`
(
id int AUTO_INCREMENT,
name varchar(100) null,
description varchar(500) null,
`config` varchar(500) NOT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL,
`admin` varchar(500) NOT NULL,
`viewer` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
); COMMENT ON TABLE s2_chat_model IS 'chat model table';
create table IF NOT EXISTS s2_user
(
id INT AUTO_INCREMENT,
name varchar(100) not null,
display_name varchar(100) null,
password varchar(256) null,
salt varchar(256) NULL,
email varchar(100) null,
is_admin INT null,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_user IS 'user information table';
-- semantic tables
CREATE TABLE IF NOT EXISTS `s2_domain` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL , -- domain name
`biz_name` varchar(255) DEFAULT NULL , -- internal name
`parent_id` INT DEFAULT '0' , -- parent domain ID
`status` INT NOT NULL ,
`created_at` TIMESTAMP DEFAULT NULL ,
`created_by` varchar(100) DEFAULT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`admin` varchar(3000) DEFAULT NULL , -- domain administrator
`admin_org` varchar(3000) DEFAULT NULL , -- domain administrators organization
`is_open` TINYINT DEFAULT NULL , -- whether the domain is public
`viewer` varchar(3000) DEFAULT NULL , -- domain available users
`view_org` varchar(3000) DEFAULT NULL , -- domain available organization
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_domain IS 'domain basic information';
CREATE TABLE IF NOT EXISTS `s2_model` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL , -- domain name
`biz_name` varchar(255) DEFAULT NULL , -- internal name
`domain_id` INT DEFAULT '0' , -- parent domain ID
`tag_object_id` INT DEFAULT '0' ,
`alias` varchar(255) DEFAULT NULL , -- internal name
`status` INT DEFAULT NULL,
`description` varchar(500) DEFAULT NULL ,
`created_at` TIMESTAMP DEFAULT NULL ,
`created_by` varchar(100) DEFAULT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`admin` varchar(3000) DEFAULT NULL , -- domain administrator
`admin_org` varchar(3000) DEFAULT NULL , -- domain administrators organization
`is_open` TINYINT DEFAULT NULL , -- whether the domain is public
`viewer` varchar(3000) DEFAULT NULL , -- domain available users
`view_org` varchar(3000) DEFAULT NULL , -- domain available organization
`entity` varchar(500) DEFAULT NULL , -- domain entity info
`drill_down_dimensions` TEXT DEFAULT NULL , -- drill down dimensions info
`database_id` INT NOT NULL ,
`model_detail` LONGVARCHAR NOT NULL ,
`depends` varchar(500) DEFAULT NULL ,
`source_type` varchar(128) DEFAULT NULL ,
`filter_sql` varchar(1000) DEFAULT NULL ,
`ext` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_model IS 'model information';
CREATE TABLE IF NOT EXISTS `s2_database` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`version` varchar(64) DEFAULT NULL ,
`type` varchar(20) NOT NULL , -- type: mysql,clickhouse,tdw
`config` varchar(655) NOT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL,
`admin` varchar(500) NOT NULL,
`viewer` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_database IS 'database instance table';
create table IF NOT EXISTS s2_auth_groups
(
group_id INT,
config varchar(2048),
PRIMARY KEY (`group_id`)
);
CREATE TABLE IF NOT EXISTS `s2_metric` (
`id` INT NOT NULL AUTO_INCREMENT,
`model_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`status` INT NOT NULL ,
`sensitive_level` INT NOT NULL ,
`type` varchar(50) NOT NULL , -- ATOMIC, DERIVED
`type_params` LONGVARCHAR DEFAULT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL,
`classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL,
`ext` LONGVARCHAR DEFAULT NULL ,
`define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC
`is_publish` INT,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_metric IS 'metric information table';
CREATE TABLE IF NOT EXISTS `s2_dimension` (
`id` INT NOT NULL AUTO_INCREMENT ,
`model_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) NOT NULL ,
`status` INT NOT NULL , -- status, 0 is off the shelf, 1 is normal
`sensitive_level` INT DEFAULT NULL ,
`data_type` varchar(50) DEFAULT NULL , -- type date,array,varchar
`type` varchar(50) NOT NULL , -- type categorical,time
`type_params` LONGVARCHAR DEFAULT NULL ,
`expr` LONGVARCHAR NOT NULL , -- expression
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`semantic_type` varchar(20) NOT NULL, -- semantic type: DATE, ID, CATEGORY
`alias` varchar(500) DEFAULT NULL,
`default_values` varchar(500) DEFAULT NULL,
`dim_value_maps` varchar(500) DEFAULT NULL,
`is_tag` INT DEFAULT NULL,
`ext` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dimension IS 'dimension information table';
CREATE TABLE IF NOT EXISTS s2_model_rela
(
id BIGINT AUTO_INCREMENT,
domain_id BIGINT,
from_model_id BIGINT,
to_model_id BIGINT,
join_type VARCHAR(255),
join_condition VARCHAR(255),
PRIMARY KEY (`id`)
);
create table IF NOT EXISTS `s2_canvas` (
id INT auto_increment,
domain_id INT null,
type varchar(20) null comment 'model、dimension、metric',
config LONGVARCHAR null comment 'config detail',
created_at TIMESTAMP null,
created_by varchar(100) null,
updated_at TIMESTAMP null,
updated_by varchar(100) not null,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_canvas IS 'canvas table';
CREATE TABLE IF NOT EXISTS `s2_query_stat_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) DEFAULT NULL, -- query unique identifier
`model_id` INT DEFAULT NULL,
`data_set_id` INT DEFAULT NULL,
`user` varchar(200) DEFAULT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`query_type` varchar(200) DEFAULT NULL, -- the corresponding scene
`query_type_back` INT DEFAULT '0' , -- query type, 0-normal query, 1-pre-refresh type
`query_sql_cmd`LONGVARCHAR , -- sql type request parameter
`sql_cmd_md5` varchar(200) DEFAULT NULL, -- sql type request parameter md5
`query_struct_cmd`LONGVARCHAR , -- struct type request parameter
`struct_cmd_md5` varchar(200) DEFAULT NULL, -- struct type request parameter md5值
`sql`LONGVARCHAR ,
`sql_md5` varchar(200) DEFAULT NULL, -- sql md5
`query_engine` varchar(20) DEFAULT NULL,
`elapsed_ms` bigINT DEFAULT NULL,
`query_state` varchar(20) DEFAULT NULL,
`native_query` INT DEFAULT NULL, -- 1-detail query, 0-aggregation query
`start_date` varchar(50) DEFAULT NULL,
`end_date` varchar(50) DEFAULT NULL,
`dimensions`LONGVARCHAR , -- dimensions involved in sql
`metrics`LONGVARCHAR , -- metric involved in sql
`select_cols`LONGVARCHAR ,
`agg_cols`LONGVARCHAR ,
`filter_cols`LONGVARCHAR ,
`group_by_cols`LONGVARCHAR ,
`order_by_cols`LONGVARCHAR ,
`use_result_cache` TINYINT DEFAULT '-1' , -- whether to hit the result cache
`use_sql_cache` TINYINT DEFAULT '-1' , -- whether to hit the sql cache
`sql_cache_key`LONGVARCHAR , -- sql cache key
`result_cache_key`LONGVARCHAR , -- result cache key
`query_opt_mode` varchar(50) DEFAULT NULL ,
PRIMARY KEY (`id`)
) ;
COMMENT ON TABLE s2_query_stat_info IS 'query statistics table';
CREATE TABLE IF NOT EXISTS `s2_semantic_pasre_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) NOT NULL ,
`model_id` INT NOT NULL ,
`dimensions`LONGVARCHAR ,
`metrics`LONGVARCHAR ,
`orders`LONGVARCHAR ,
`filters`LONGVARCHAR ,
`date_info`LONGVARCHAR ,
`limit` INT NOT NULL ,
`native_query` TINYINT NOT NULL DEFAULT '0' ,
`sql`LONGVARCHAR ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`status` INT NOT NULL ,
`elapsed_ms` bigINT DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_semantic_pasre_info IS 'semantic layer sql parsing information table';
CREATE TABLE IF NOT EXISTS `s2_available_date_info` (
`id` INT NOT NULL AUTO_INCREMENT ,
`item_id` INT NOT NULL ,
`type` varchar(255) NOT NULL ,
`date_format` varchar(64) NOT NULL ,
`start_date` varchar(64) ,
`end_date` varchar(64) ,
`unavailable_date` LONGVARCHAR DEFAULT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`date_period` varchar(100) DEFAULT NULL ,
`status` INT DEFAULT '0', -- 1-in use 0 is normal, 1 is off the shelf, 2 is deleted
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dimension IS 'dimension information table';
CREATE TABLE IF NOT EXISTS `s2_plugin`
(
`id` INT AUTO_INCREMENT,
`type` varchar(50) NULL,
`data_set` varchar(100) NULL,
`pattern` varchar(500) NULL,
`parse_mode` varchar(100) NULL,
`parse_mode_config` LONGVARCHAR NULL,
`name` varchar(100) NULL,
`created_at` TIMESTAMP NULL,
`created_by` varchar(100) null,
`updated_at` TIMESTAMP NULL,
`updated_by` varchar(100) NULL,
`config` LONGVARCHAR NULL,
`comment` LONGVARCHAR NULL,
PRIMARY KEY (`id`)
); COMMENT ON TABLE s2_plugin IS 'plugin information table';
CREATE TABLE IF NOT EXISTS s2_agent
(
id int AUTO_INCREMENT,
name varchar(100) null,
description varchar(500) null,
status int null,
examples varchar(500) null,
tool_config varchar(2000) null,
llm_config varchar(2000) null,
chat_model_config varchar(6000) null,
visual_config varchar(2000) null,
created_by varchar(100) null,
created_at TIMESTAMP null,
updated_by varchar(100) null,
updated_at TIMESTAMP null,
enable_search int null,
enable_feedback int null,
admin varchar(1000),
viewer varchar(1000),
PRIMARY KEY (`id`)
); COMMENT ON TABLE s2_agent IS 'agent information table';
-------demo for semantic and chat
CREATE TABLE IF NOT EXISTS `s2_user_department` (
`user_name` varchar(200) NOT NULL,
`department` varchar(200) NOT NULL, -- department of user
PRIMARY KEY (`user_name`,`department`)
);
COMMENT ON TABLE s2_user_department IS 'user_department_info';
CREATE TABLE IF NOT EXISTS `s2_pv_uv_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_pv_uv_statis IS 's2_pv_uv_statis';
CREATE TABLE IF NOT EXISTS `s2_stay_time_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`stay_hours` DOUBLE NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_stay_time_statis IS 's2_stay_time_statis_info';
CREATE TABLE IF NOT EXISTS `singer` (
`singer_name` varchar(200) NOT NULL,
`act_area` varchar(200) NOT NULL,
`song_name` varchar(200) NOT NULL,
`genre` varchar(200) NOT NULL,
`js_play_cnt` bigINT DEFAULT NULL,
`down_cnt` bigINT DEFAULT NULL,
`favor_cnt` bigINT DEFAULT NULL,
PRIMARY KEY (`singer_name`)
);
COMMENT ON TABLE singer IS 'singer_info';
CREATE TABLE IF NOT EXISTS `s2_dictionary_conf` (
`id` INT NOT NULL AUTO_INCREMENT,
`description` varchar(255) ,
`type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL , -- task Request Parameters md5
`config` LONGVARCHAR , -- remark related information
`status` varchar(255) NOT NULL , -- the final status of the task
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`created_by` varchar(100) NOT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dictionary_conf IS 'dictionary conf information table';
CREATE TABLE IF NOT EXISTS `s2_dictionary_task` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL , -- task name
`description` varchar(255) ,
`type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL , -- task Request Parameters md5
`config` LONGVARCHAR , -- remark related information
`status` varchar(255) NOT NULL , -- the final status of the task
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`created_by` varchar(100) NOT NULL ,
`elapsed_ms` bigINT DEFAULT NULL , -- the task takes time in milliseconds
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dictionary_task IS 'dictionary task information table';
-- benchmark
CREATE TABLE IF NOT EXISTS `genre` (
`g_name` varchar(20) NOT NULL , -- genre name
`rating` INT ,
`most_popular_in` varchar(50) ,
PRIMARY KEY (`g_name`)
);
COMMENT ON TABLE genre IS 'genre';
CREATE TABLE IF NOT EXISTS `artist` (
`artist_name` varchar(50) NOT NULL , -- genre name
`citizenship` varchar(20) ,
`gender` varchar(20) ,
`g_name` varchar(50),
PRIMARY KEY (`artist_name`,`citizenship`)
);
COMMENT ON TABLE artist IS 'artist';
CREATE TABLE IF NOT EXISTS `files` (
`f_id` bigINT NOT NULL,
`artist_name` varchar(50) ,
`file_size` varchar(20) ,
`duration` varchar(20) ,
`formats` varchar(20) ,
PRIMARY KEY (`f_id`)
);
COMMENT ON TABLE files IS 'files';
CREATE TABLE IF NOT EXISTS `song` (
`imp_date` varchar(50) ,
`song_name` varchar(50) ,
`artist_name` varchar(50) ,
`country` varchar(20) ,
`f_id` bigINT ,
`g_name` varchar(20) ,
`rating` INT ,
`languages` varchar(20) ,
`releasedate` varchar(50) ,
`resolution` bigINT NOT NULL,
PRIMARY KEY (`imp_date`,`song_name`)
);
COMMENT ON TABLE song IS 'song';
CREATE TABLE IF NOT EXISTS `company` (
`imp_date` varchar(50) ,
`company_id` varchar(50) NOT NULL ,
`company_name` varchar(50) NOT NULL ,
`headquarter_address` varchar(50) NOT NULL ,
`company_established_time` varchar(20) NOT NULL ,
`founder` varchar(20) NOT NULL ,
`ceo` varchar(20) NOT NULL ,
`annual_turnover` bigint(15) ,
`employee_count` int(7) ,
PRIMARY KEY (`company_id`)
);
CREATE TABLE IF NOT EXISTS `brand` (
`imp_date` varchar(50) ,
`brand_id` varchar(50) NOT NULL ,
`brand_name` varchar(50) NOT NULL ,
`brand_established_time` varchar(20) NOT NULL ,
`company_id` varchar(50) NOT NULL ,
`legal_representative` varchar(20) NOT NULL ,
`registered_capital` bigint(15) ,
PRIMARY KEY (`brand_id`)
);
CREATE TABLE IF NOT EXISTS `company_revenue` (
`imp_date` varchar(50) ,
`company_id` varchar(50) NOT NULL ,
`brand_id` varchar(50) NOT NULL ,
`revenue_proportion` double NOT NULL,
`profit_proportion` double NOT NULL ,
`expenditure_proportion` double NOT NULL
);
CREATE TABLE IF NOT EXISTS `company_brand_revenue` (
`imp_date` varchar(50) ,
`year_time` varchar(10) NOT NULL ,
`brand_id` varchar(50) NOT NULL ,
`revenue` bigint(15) NOT NULL,
`profit` bigint(15) NOT NULL ,
`revenue_growth_year_on_year` double NOT NULL ,
`profit_growth_year_on_year` double NOT NULL
);
CREATE TABLE IF NOT EXISTS s2_system_config
(
id INT PRIMARY KEY AUTO_INCREMENT,
admin varchar(500),
parameters text null
);
CREATE TABLE IF NOT EXISTS `s2_collect` (
`id` bigint NOT NULL AUTO_INCREMENT,
`type` varchar(20) NOT NULL,
`username` varchar(20) NOT NULL,
`collect_id` bigint NOT NULL,
`create_time` TIMESTAMP,
`update_time` TIMESTAMP,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `s2_metric_query_default_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`metric_id` bigint ,
`user_name` varchar(255) NOT NULL,
`default_config` varchar(1000) NOT NULL,
`created_at` TIMESTAMP null,
`updated_at` TIMESTAMP null,
`created_by` varchar(100) null,
`updated_by` varchar(100) not null,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `s2_app` (
id bigint AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
description VARCHAR(255),
status INT,
config TEXT,
end_date TIMESTAMP,
qps INT,
app_secret VARCHAR(255),
owner VARCHAR(255),
created_at TIMESTAMP,
created_by VARCHAR(255),
updated_at TIMESTAMP,
updated_by VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS `s2_data_set` (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
domain_id BIGINT,
`name` VARCHAR(255),
biz_name VARCHAR(255),
description VARCHAR(255),
status INT,
alias VARCHAR(255),
data_set_detail TEXT,
created_at TIMESTAMP,
created_by VARCHAR(255),
updated_at TIMESTAMP,
updated_by VARCHAR(255),
query_config VARCHAR(3000),
`admin` varchar(3000) DEFAULT NULL,
`admin_org` varchar(3000) DEFAULT NULL,
`query_type` varchar(100) DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS `s2_tag` (
`id` INT NOT NULL AUTO_INCREMENT,
`item_id` INT NOT NULL ,
`type` varchar(50) NOT NULL , -- METRIC DIMENSION
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_tag IS 'tag information';
CREATE TABLE IF NOT EXISTS `s2_tag_object` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`status` INT NOT NULL DEFAULT '1' ,
`sensitive_level` INT NOT NULL DEFAULT '1' ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`ext` LONGVARCHAR DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_tag IS 'tag object information';
CREATE TABLE IF NOT EXISTS `s2_query_rule` (
`id` INT NOT NULL AUTO_INCREMENT,
`data_set_id` INT ,
`priority` INT NOT NULL DEFAULT '1' ,
`rule_type` varchar(255) NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`rule` LONGVARCHAR DEFAULT NULL ,
`action` LONGVARCHAR DEFAULT NULL ,
`status` INT NOT NULL DEFAULT '1' ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`ext` LONGVARCHAR DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_query_rule IS 'tag query rule table';
CREATE TABLE IF NOT EXISTS `s2_term` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT ,
`name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`alias` varchar(1000) NOT NULL ,
`related_metrics` varchar(1000) DEFAULT NULL ,
`related_dimensions` varchar(1000) DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_term IS 'term info';

View File

@@ -1,2 +1,2 @@
root=.
CustomDictionaryPath=data/dictionary/custom/DimValue_1_1.txt;data/dictionary/custom/DimValue_1_2.txt;data/dictionary/custom/DimValue_1_3.txt;
CustomDictionaryPath=data/dictionary/custom/dic_value_1_DIMENSION_1.txt

View File

@@ -1,5 +1,4 @@
s2:
schema:
cache:
enable: false
@@ -21,7 +20,7 @@ s2:
date: true
demo:
names: S2VisitsDemo,S2SingerDemo,S2CompanyDemo
names: S2VisitsDemo, S2SingerDemo, S2CompanyDemo
enableLLM: false
authentication:

View File

@@ -1,50 +0,0 @@
[
{
"question": "比较jackjchen和robinlee今年以来的访问次数",
"sideInfo": "CurrentDate=[2020-12-01],DomainTerms=[<核心用户 COMMENT '核心用户指tom和lucy'>]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>,<访问用户数 ALIAS 'UV,访问人数,' COMMENT '访问的用户个数' AGGREGATE 'COUNT'>,<人均访问次数 ALIAS '平均访问次数,' COMMENT '每个用户平均访问的次数'>], Dimensions=[<数据日期>], Values[<用户='jackjchen'>,<用户='robinlee'>]",
"sql": "SELECT 用户, 访问次数 FROM 超音数产品 WHERE 用户 IN ('jackjchen', 'robinlee') AND 数据日期 >= '2020-01-01' AND 数据日期 <= '2020-12-01'"
},
{
"question": "超音数近12个月访问人数 按部门",
"sideInfo": "CurrentDate=[2022-11-06]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>,<访问用户数 ALIAS 'UV,访问人数,' COMMENT '访问的用户个数' AGGREGATE 'COUNT'>,<人均访问次数 ALIAS '平均访问次数,' COMMENT '每个用户平均访问的次数'>], Dimensions=[<部门>,<数据日期>], Values=[]",
"sql": "SELECT 部门, 数据日期, 访问人数 FROM 超音数产品 WHERE 数据日期 >= '2021-11-06' AND 数据日期 <= '2022-11-06'"
},
{
"question": "超音数过去90天美术部、技术研发部的访问时长",
"sideInfo": "CurrentDate=[2023-04-21]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问时长 COMMENT '一段时间内用户的访问时长' AGGREGATE 'SUM'>], Dimensions=[<数据日期>], Values=[<部门='美术部'>,<部门='技术研发部'>]",
"sql": "SELECT 部门, 访问时长 FROM 超音数产品 WHERE 部门 IN ('美术部', '技术研发部') AND 数据日期 >= '2023-01-21' AND 数据日期 <= '2023-04-21'"
},
{
"question": "超音数访问时长小于1小时且来自美术部的用户是哪些",
"sideInfo": "CurrentDate=[2023-07-31],DomainTerms=[<核心用户 COMMENT '用户为tom和lucy'>]",
"dbSchema": "DatabaseType=[h2], Table:[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics:[<访问时长 COMMENT '一段时间内用户的访问时长' AGGREGATE 'SUM'>], Dimensions:[<用户>,<数据日期>], Values:[<部门='美术部'>]",
"sql": "SELECT 用户 FROM 超音数产品 WHERE 部门 = '美术部' AND 访问时长 < 1"
},
{
"question": "超音数本月pv最高的用户有哪些",
"sideInfo": "CurrentDate=[2023-08-31],DomainTerms=[<核心用户 COMMENT '用户为tom和lucy'>]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>], Dimensions=[<用户>,<数据日期>], Values=[]",
"sql": "SELECT 用户 FROM 超音数产品 WHERE 数据日期 >= '2023-08-01' AND 数据日期 <= '2023-08-31' ORDER BY 访问次数 DESC LIMIT 1"
},
{
"question": "超音数访问次数大于1k的部门是哪些",
"sideInfo": "CurrentDate=[2023-09-14]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>], Dimensions=[<部门>,<数据日期>], Values=[]",
"sql": "SELECT 部门 FROM 超音数产品 WHERE 访问次数 > 1000"
},
{
"question": "过去半个月核心用户的访问次数",
"sideInfo": "CurrentDate=[2023-09-15],DomainTerms=[<核心用户 COMMENT '用户为alice'>]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>], Dimensions=[<部门>,<数据日期>], Values=[]",
"sql": "SELECT 用户,SUM(访问次数) FROM 超音数产品 WHERE 用户='alice' AND 数据日期 >= '2023-09-01' AND 数据日期 <= '2023-09-15' GROUP BY 用户"
},
{
"question": "过去半个月忠实用户有哪一些",
"sideInfo": "CurrentDate=[2023-09-15],DomainTerms=[<忠实用户 COMMENT '一段时间内总访问次数大于100的用户'>]",
"dbSchema": "DatabaseType=[h2], Table=[超音数产品], PartitionTimeField=[数据日期 FORMAT 'yyyy-MM-dd'], Metrics=[<访问次数 ALIAS 'pv' COMMENT '一段时间内用户的访问次数' AGGREGATE 'SUM'>], Dimensions=[<用户>,<数据日期>], Values=[]",
"sql": "SELECT 用户 FROM 超音数产品 WHERE 数据日期 >= '2023-09-01' AND 数据日期 <= '2023-09-15' GROUP BY 用户 HAVING SUM(访问次数) > 100"
}
]