为什么从分布式表中select top 1一条记录就会报查询涉及分区数太多的异常

我从DolphinDB分布式表查询top 1条记录,代码如下图所示:
attachments-2021-06-0LMtQolS60c84104357cf.png

执行后报异常:the number of partitions relevant to the query is too large.请问maxPartitionNumPerQuery这个参数什么含义?我没设置这个参数,需要设多大?

表中TradingDay和ProductId是此Database的分区字段,TradingDay按天分区,从 15年到20年 每天一个分区。ProductId是产品编码,每天65个分区。
TradingDay是分区字段,是不是查询条件必须TradingDay>=参数1 and TradingDay<=参数2 ?我 select top 1 from dfstable where TradingDay>=参数1 这样写也不行?
attachments-2021-06-qInciG2r60c8410ad153b.png

请先 登录 后评论

1 个回答

logger

分布式表顾名思义,包含了很多分区。这里虽然只查一条记录,但涉及很多分区。一个query涉及的分区越多,需要耗费资源的越多。maxPartitionNumPerQuery指定一个query最多可以使用多少个分区。默认值是65535。这个分区数目怎么来决定呢?并不是计算实际用到的分区,而是根据datbase中的分区定义信息以及sql语句的where子句中的剪枝信息来决定query涉及到了多少个分区。

本问题中分区字段有两个,TradingDay和ProdutId,query中用到的分区字段就TradingDay,不太清楚数据库定义中TradingDay的范围如何,但如果超过2019.09.24的潜在日期超过1000个,每天65个分区,就有可能超过设定的maxPartitionNumPerQuery

解决这个问题有几个办法:
(1)maxPartitionNumPerQuery 设成很大一个值。但并不推荐这种方法。
(2)定义数据库的分区机制时,TradingDay的定义不要包含将来的日期,可以在系统中将newValuePartitionPolicy设置成add。这样新的日期出现时,系统会自动更新数据库定义。
(3)query中限定日期的范围小一点,譬如TradingDay >= 2019.09.24 and TradingDay <=2019.09.30, ProductId = 'sc'





请先 登录 后评论
  • 1 关注
  • 0 收藏,1003 浏览
  • jinzhi 提出于 2021-06-15 13:56

相似问题