InfluxDB 1.x如何无需先查TAG KEYS实现标签精确匹配查询?
InfluxDB标签精确匹配查询:无需预查TAG KEYS的实现方法?
需求场景
想要获取仅包含env=intg、host=is-nflxts101t标签,且不存在cpu标签的时序数据行,避免先查询TAG KEYS再动态生成查询语句的繁琐流程。
示例数据插入与初始查询:
Connected to http://localhost:8086 version 1.10.0 InfluxDB shell version: 1.10.0 > create database so > use so Using database so > INSERT cpu,cpu=cpu0,env=intg,host=is-nflxts101t time_system=13592 > INSERT cpu,env=intg,host=is-nflxts101t time_system=134 > SELECT * FROM cpu name: cpu time cpu env host time_system ---- --- --- ---- ----------- 1668608108642977000 cpu0 intg is-nflxts101t 13592 1668608113752018000 intg is-nflxts101t 134 # 目标行
常规查询的问题
直接按指定标签过滤会返回所有匹配的行,包含带cpu标签的冗余数据:
> SELECT * FROM cpu WHERE "env"='intg' AND "host"='is-nflxts101t' name: cpu time cpu env host time_system ---- --- --- ---- ----------- 1668608108642977000 cpu0 intg is-nflxts101t 13592 # 不需要的行 1668608113752018000 intg is-nflxts101t 134
无需预查TAG KEYS的解决方案
InfluxQL支持使用exists操作符直接判断标签是否存在,无需提前查询TAG KEYS。只需在WHERE条件中添加!exists "cpu"即可精准筛选出不含cpu标签的数据行:
> SELECT * FROM cpu WHERE "env"='intg' AND "host"='is-nflxts101t' AND !exists "cpu" name: cpu time cpu env host time_system ---- --- --- ---- ----------- 1668608113752018000 intg is-nflxts101t 134
如果你的InfluxDB版本较低不支持exists,也可以直接判断标签值为空字符串(未指定的标签在查询结果中会显示为空):
> SELECT * FROM cpu WHERE "env"='intg' AND "host"='is-nflxts101t' AND "cpu" = ''
总结
不需要先查询TAG KEYS即可实现需求,直接使用!exists <标签名>或者<标签名> = ''的条件就能精准匹配仅包含指定标签、不含目标标签的数据行。
内容的提问来源于stack exchange,提问作者Filip Allberg
相关产品推荐
相关产品推荐

