正则表达式
InfluxQL支持在以下场景中使用正则表达式:
- 在
SELECT子句中的field key和tag key。 - 在
FROM子句中的measurement。 - 在
WHERE子句中的tag value和字符串类型的field value。 - 在
GROUP BY子句中的tag key。 
目前,InfluxQL不支持在WHERE子句、数据库和保留策略中使用正则表达式去匹配非字符串类型的field value。
注释:正则表达式比较比字符串比较更加消耗计算资源;带有正则表达式的查询比那些不带的性能要低一些。
语法
SELECT /<regular_expression_field_key>/ FROM /<regular_expression_measurement>/ WHERE [<tag_key> <operator> /<regular_expression_tag_value>/ | <field_key> <operator> /<regular_expression_field_value>/] GROUP BY /<regular_expression_tag_key>/
语法描述
正则表达式被字符/包围,并使用Golang的正则表达式语法。
支持的操作符:
| =~ | 匹配 | 
|---|---|
| !~ | 不匹配 | 
示例
在SELECT子句中使用正则表达式指定field key和tag key
> SELECT /l/ FROM "h2o_feet" LIMIT 1name: h2o_feettime level description location water_level---- ----------------- -------- -----------2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
该查询返回所有包含字符l的field key和tag key。请注意,在SELECT子句中的正则表达式必须至少匹配一个field key,才能返回与正则表达式匹配的tag key所对应的结果。
目前,没有语法可以区分SELECT子句中field key的正则表达式和tag key的正则表达式,不支持语法/<regular_expression>/::[field | tag]。
在SELECT子句中使用正则表达式指定带函数的field key
> SELECT DISTINCT(/level/) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z'name: h2o_feettime distinct_level description distinct_water_level---- -------------------------- --------------------2015-08-18T00:00:00Z below 3 feet 2.0642015-08-18T00:00:00Z 2.1162015-08-18T00:00:00Z 2.028
该查询使用了一个InfluxQL函数,返回每个包含level的field key所对应的去重后的field value。
在FROM子句中使用正则表达式指定measurement
> SELECT MEAN("degrees") FROM /temperature/name: average_temperaturetime mean---- ----1970-01-01T00:00:00Z 79.98472932232272name: h2o_temperaturetime mean---- ----1970-01-01T00:00:00Z 64.98872722506226
该查询使用了一个InfluxQL函数,计算数据库NOAA_water_database中每个名字包含temperature的measurement的degrees的平均值。
在WHERE子句中使用正则表达式指定tag value
> SELECT MEAN(water_level) FROM "h2o_feet" WHERE "location" =~ /[m]/ AND "water_level" > 3name: h2o_feettime mean---- ----1970-01-01T00:00:00Z 4.47155532049926
该查询使用了一个InfluxQL函数,计算满足条件的water_level的平均值,需满足的条件是:location的tag value包含m并且water_level大于3。
在WHERE子句中使用正则表达式指定没有值的tag
> SELECT * FROM "h2o_feet" WHERE "location" !~ /./>
该查询从measurement h2o_feet中选择数据,这些数据需满足条件:tag location中不包含数据。因为数据库NOAA_water_database里面每个数据点都有location对应的tag value,所以该查询不返回任何结果。
不使用正则表达式也可以执行相同的查询,请查阅FAQ章节获得更多相关信息。
在WHERE子句中使用正则表达式指定具有值的tag
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" =~ /./name: h2o_feettime mean---- ----1970-01-01T00:00:00Z 4.442107025822523
该查询使用了一个InfluxQL函数,计算满足条件的water_level的平均值,需满足的条件是:location具有tag value。
在WHERE子句中使用正则表达式指定field value
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND "level description" =~ /between/name: h2o_feettime mean---- ----1970-01-01T00:00:00Z 4.47155532049926
该查询使用了一个InfluxQL函数,计算满足条件的water_level的平均值,需满足的条件是:level description的field value包含between。
在GROUP BY子句中使用正则表达式指定tag key
> SELECT FIRST("index") FROM "h2o_quality" GROUP BY /l/name: h2o_qualitytags: location=coyote_creektime first---- -----2015-08-18T00:00:00Z 41name: h2o_qualitytags: location=santa_monicatime first---- -----2015-08-18T00:00:00Z 99
该查询使用了一个InfluxQL函数,查询每个tag key包含l的tag所对应的index的第一个值。
InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.