请问在dolphindb中如何查询一个SQL语句涉及的分区数目?

我创建了一个测试用例:

n=1000000
date=take(2019.01.01..2019.01.03,n)
sym = take(`C`MS`MS`MS`IBM`IBM`IBM`C`C$SYMBOL,n)           
price= take(49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29,n)
qty = take(2200 1900 2100 3200 6800 5400 1300 2500 8800,n)
t=table(date, sym, price, qty)

db1=database("",VALUE,2019.01.01..2019.01.03)
db2=database("",VALUE,`C`MS`IBM)
db=database("dfs://stock",COMPO,[db1,db2])
trades=db.createPartitionedTable(t,`trades,`date`sym).append!(t)

我想知道下面的这个SQL语句涉及了多少分区:

select * from trades where date=2019.01.02

请问应该怎么操作?

请先 登录 后评论

2 个回答

chenweijian

可以通过getTabletsMeta函数获取当前节点上指定数据表chunk的元数据信息,结合pnodeRun函数获取各个数据节点上指定数据表chunk的元数据信息,然后通过条件删选就可以得到上面场景需要的信息:
具体代码如下:

select dfsPath from pnodeRun(getTabletsMeta) where tableName = 'trades' and like(dfsPath, '%20190102%')

返回结果如下:

attachments-2021-06-OVKzrigE60c084dd0a235.png

说明涉及了3个分区,分别如图中所示。

请先 登录 后评论
Peter

可以使用 sqlDS,根据输入的 SQL 元代码创建数据源列表。如果 SQL 查询中的数据表有 n 个分区,sqlDS 生成 n 个数据源。具体代码如下:

sqlDS(<select * from trades where date=2019.01.02>).size()

返回结果为3,与期望一致。

分区分别为:20190102/C、20190102/IBM、20190102/MS

请先 登录 后评论