DolphinDB中分区表pt调用size()返回0的原因咨询
为什么DolphinDB分区表调用
size()返回0? 我来帮你拆解这个问题的核心原因,其实是分区键的数据类型不匹配导致数据没有真正写入分区表,具体细节如下:
先看你执行的代码:
sym = `C`MS`MS`MS`IBM`IBM`C`C`C price= 49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29 qty = 2200 1900 2100 3200 6800 5400 1300 2500 8800 timestamp = [09:34:07,09:36:42,09:36:51,09:36:59,09:32:47,09:35:26,09:34:16,09:34:26,09:38:12] t=Table(timestamp,sym,price,qty) db=database("",VALUE,09:32:00..09:40:00) pt=db.createPartitionedTable(t,`pt,`timestamp) pt.append!(t) share(pt,`sharet) size(pt)
问题根源
- 你创建数据库时,用
09:32:00..09:40:00生成的分区键是TIME类型; - 但源表
t中的timestamp列,因为你直接使用09:34:07这种格式赋值,DolphinDB会默认解析为SECOND类型; - 当调用
append!写入数据时,由于分区键的类型不匹配,数据并没有被成功写入到分区表中,所以size(pt)返回0。
两种解决方法
方法1:将分区键改为SECOND类型
创建数据库时,把分区范围转换为SECOND类型:
db=database("",VALUE,second(09:32:00)..second(09:40:00))
方法2:将源表的timestamp列转为TIME类型
修改源表的timestamp列定义,显式转为TIME类型:
timestamp = time([09:34:07,09:36:42,09:36:51,09:36:59,09:32:47,09:35:26,09:34:16,09:34:26,09:38:12])
修改后重新执行代码,size(pt)就会返回正确的行数9了。
内容的提问来源于stack exchange,提问作者xxq1024
相关产品推荐
相关产品推荐

