Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
520 views
in Technique[技术] by (71.8m points)

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

我从DolphinDB分布式表查询top 1条记录,代码如下图所示:
image.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 这样写也不行?
image.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

分布式表顾名思义,包含了很多分区。一个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'


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...