如何在Apache IoTDB的`GROUP BY` LEVEL中过滤特定设备名称
解决IoTDB GROUP BY LEVEL时过滤指定设备的问题
要只保留名为d的设备的测点c的平均值,你可以通过路径过滤或设备名称过滤的方式,在SQL中精准筛选目标序列,避免包含d1设备的数据。
方案1:使用device_name()函数过滤设备
直接在WHERE子句中指定设备名称为d,仅统计设备名为d的测点c数据:
SELECT AVG(c) FROM root.** WHERE device_name() = 'd' GROUP BY LEVEL=1,3
执行后结果会自动排除d1设备,仅保留符合要求的分组:
AVG(root.aa.*.d.c)AVG(root.q.*.r.d.c)AVG(root.a.*.d.c)
方案2:使用路径匹配精准定位目标序列
利用IoTDB的路径通配符**匹配任意层级,直接指定目标序列为root.**下的d.c(即设备d的测点c):
SELECT AVG(c) FROM root.**`d`.c GROUP BY LEVEL=1,3
这种写法从数据源层面就只拉取设备d的测点c数据,后续分组聚合自然不会包含d1的内容,逻辑更直接。
为什么之前的SQL无法过滤d1?
你之前的SQL未添加过滤条件,root.**会匹配所有子路径,包括d1设备的序列。GROUP BY LEVEL仅按指定层级做聚合划分,不会自动排除不符合条件的设备,因此需要主动添加过滤逻辑筛选目标设备。
内容的提问来源于stack exchange,提问作者何乐怡
相关产品推荐
相关产品推荐

