如何确认DolphinDB中记录值是否符合分区方案?
确认分区表记录是否符合分区方案的方法
首先得解释下你遇到的现象:DolphinDB中DATE类型和MONTH类型支持隐式转换,当你插入2010.01.15这个DATE值时,系统会自动将它转换为对应的MONTH值2010.01M,所以这条记录能成功匹配到对应的分区。不过要确认记录是否真的符合分区规则,可以通过以下几种方式:
1. 直接查询对应分区的记录
加载分区表后,筛选目标分区的记录,看插入的数据是否存在:
// 加载分区表 pt = loadTable("dfs://valuedb", `pt) // 查询2010.01M分区的记录 select * from pt where month = 2010.01M
如果返回结果包含你插入的x=10的那条数据,说明它已经被正确放到了符合规则的分区中。
2. 查看分区元数据
使用getPartitionMeta函数查看目标分区的详细信息,包括记录数、存储路径等,验证数据是否被计入该分区:
db = database("dfs://valuedb") // 获取2010.01M分区的元数据 getPartitionMeta(db, 2010.01M)
返回结果里的rowCount字段会显示该分区的记录数,对比插入前后的数值变化就能确认数据是否被正确存储。
3. 检查存储的字段类型
查询表中month列的实际存储类型,确认DATE值已经被转换为MONTH类型:
select typeof(month) from pt limit 1
结果会返回MONTH,说明系统已经自动完成了类型转换,存储的是符合分区要求的类型。
额外:如何防止非MONTH类型数据插入
如果你想严格限制只能插入MONTH类型的month列数据,可以在插入前添加类型校验,比如用assert断言:
t1 = table(2010.01.15 as month , 10 as x) // 断言month列类型必须为MONTH,否则报错 assert typeof(t1.month) == MONTH, "month列必须为MONTH类型,当前类型为" + string(typeof(t1.month)) pt.append!(t1)
这样当插入DATE类型数据时,系统会直接抛出错误,提前拦截不符合要求的数据。
内容的提问来源于stack exchange,提问作者dyzyb
相关产品推荐
相关产品推荐

