在Apache IoTDB中用*查询不同时间序列返回空结果的原因
问题原因分析
你遇到的这种情况,大概率是以下几个原因之一:
- 字段类型不兼容:
root.ad.invert和root.ldh.invert里的size字段类型不一致,比如一个是整数,另一个是字符串类型。单独查询时数据库能针对单个类型做sum计算,但通配符跨序列查询时,混合类型无法完成聚合,直接返回空结果。 - 标签层级匹配限制:如果
tenant标签是挂载在ad或ldh节点上(而非invert节点),用root.*.invert查询时,数据库可能无法正确识别上层节点的标签过滤条件。单独查询时路径明确,能关联到上层标签,但通配符查询时,标签的层级关联逻辑失效,导致过滤后没有符合条件的数据。 - 权限范围限制:你的账号可能仅拥有
root.ad.invert和root.ldh.invert的单独访问权限,但没有遍历root下所有子节点的权限。通配符查询需要遍历root下所有匹配*.invert的路径,过程中遇到无权限的节点时,整个查询返回空。 - 时间范围不匹配:单独查询时数据库可能自动使用了适合该序列的时间范围(比如最近1小时),但通配符查询时默认时间范围覆盖不到两个序列的有效数据区间,导致没有符合条件的数据被聚合。
- 无效路径干扰:如果
root下还有其他类似root.xxx.invert的路径,且这些路径中存在tenant="tenant_1"但size字段为空或无效的数据,部分数据库的聚合逻辑会因存在无效数据而返回空,而非忽略无效值只聚合有效序列。
内容的提问来源于stack exchange,提问作者zlyf
相关产品推荐
相关产品推荐

