如何优化建表,使得查询

dbTime = database('', RANGE, (09:25:00 + 5*60*0..25) join (13:00:00 + 5*60*0..30))

dbDate = database('', RANGE, 2023.01.01 + 14*0..100);

dbCode = database('', HASH, [SYMBOL, 6])。

dbHandle = database(dbPath, COMPO, [dbDate, dbTime],engine='TSDB')

schemaTable = table(

array(SYMBOL, 0) as code,

array(DATE, 0) as date,

array(SECOND, 0) as time,

array(DOUBLE, 0) as open,

array(DOUBLE, 0) as high,

array(DOUBLE, 0) as low,

array(DOUBLE, 0) as close,

)


db=dbHandle.createPartitionedTable(schemaTable,"second", 

partitionColumns=`date`time, 

sortColumns=`code`time`date,

compressMethods={time:"delta"},

keepDuplicates=LAST,

sortKeyMappingFunction=[hashBucket{, 10},hashBucket{, 100}] 

);


建表以time(5分钟),date(14天),code作为分区字段


需要以下两种查询方式
查询1:select * from db where date in (2023.01.10..2023.01.15), time=15:00:00    //根据确定的time和date,查询某几天某一秒的数据,耗时几百ms
查询2:select * from db where date=2023.01.10, code=`600001                            //根据确定的code和date,查询某个code某一天的完整数据,耗时几十s

请问如何优化建表,使得两种查询方式都可以快速得到结果




请先 登录 后评论

1 个回答

Boye

现在每个分区多少数据量?建议每个分区的数据量在400MB到1GB之间。

分区方式通常建议按天value分区+按股票code hash分区。详见 tsdb_explained.md · 浙江智臾科技有限公司/Tutorials_CN - Gitee.com


请先 登录 后评论
  • 1 关注
  • 0 收藏,328 浏览
  • domaxwell 提出于 2023-11-22 17:11

相似问题