全部產品
Search
文件中心

Time Series Database:Regex

更新時間:Jan 27, 2025

InfluxQL支援在以下情境中使用Regex:

InfluxQL支援在以下情境中使用Regex:

  • SELECT子句中的field key和tag key。
  • FROM子句中的measurement。
  • WHERE子句中的tag value和字串類型的field value。
  • GROUP BY子句中的tag key。

目前,InfluxQL不支援在WHERE子句、資料庫和保留原則中使用Regex去匹配非字串類型的field value。

說明

注釋:Regex比較比字串比較更加消耗計算資源;帶有Regex的查詢比那些不帶的效能要低一些。

文法

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>/

文法描述

Regex被字元/包圍,並使用Golang的Regex文法

支援的操作符:

=~ 匹配
!~ 不匹配

樣本

在SELECT子句中使用Regex指定field key和tag key

> SELECT /l/ FROM "h2o_feet" LIMIT 1

name: h2o_feet
time                   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子句中的Regex必須至少匹配一個field key,才能返回與Regex匹配的tag key所對應的結果。

目前,沒有文法可以區分SELECT子句中field key的Regex和tag key的Regex,不支援文法/<regular_expression>/::[field | tag]

在SELECT子句中使用Regex指定帶函數的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_feet
time                   distinct_level description   distinct_water_level
----                   --------------------------   --------------------
2015-08-18T00:00:00Z   below 3 feet                 2.064
2015-08-18T00:00:00Z                                2.116
2015-08-18T00:00:00Z                                2.028

該查詢使用了一個InfluxQL函數,返回每個包含level的field key所對應的去重後的field value。

在FROM子句中使用Regex指定measurement

> SELECT MEAN("degrees") FROM /temperature/

name: average_temperature
time                    mean
----                    ----
1970-01-01T00:00:00Z   79.98472932232272

name: h2o_temperature
time                    mean
----                    ----
1970-01-01T00:00:00Z   64.98872722506226

該查詢使用了一個InfluxQL函數,計算資料庫NOAA_water_database中每個名字包含temperature的measurement的degrees的平均值。

在WHERE子句中使用Regex指定tag value

> SELECT MEAN(water_level) FROM "h2o_feet" WHERE "location" =~ /[m]/ AND "water_level" > 3

name: h2o_feet
time                   mean
----                   ----
1970-01-01T00:00:00Z   4.47155532049926

該查詢使用了一個InfluxQL函數,計算滿足條件的water_level的平均值,需滿足的條件是:location的tag value包含m並且water_level大於3。

在WHERE子句中使用Regex指定沒有值的tag

> SELECT * FROM "h2o_feet" WHERE "location" !~ /./
>

該查詢從measurement h2o_feet中選擇資料,這些資料需滿足條件:tag location中不包含資料。因為資料庫NOAA_water_database裡面每個資料點都有location對應的tag value,所以該查詢不返回任何結果。

不使用Regex也可以執行相同的查詢,請查閱FAQ章節獲得更多相關資訊。

在WHERE子句中使用Regex指定具有值的tag

> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" =~ /./

name: h2o_feet
time                   mean
----                   ----
1970-01-01T00:00:00Z   4.442107025822523

該查詢使用了一個InfluxQL函數,計算滿足條件的water_level的平均值,需滿足的條件是:location具有tag value。

在WHERE子句中使用Regex指定field value

> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND "level description" =~ /between/

name: h2o_feet
time                   mean
----                   ----
1970-01-01T00:00:00Z   4.47155532049926

該查詢使用了一個InfluxQL函數,計算滿足條件的water_level的平均值,需滿足的條件是:level description的field value包含between

在GROUP BY子句中使用Regex指定tag key

> SELECT FIRST("index") FROM "h2o_quality" GROUP BY /l/

name: h2o_quality
tags: location=coyote_creek
time                   first
----                   -----
2015-08-18T00:00:00Z   41

name: h2o_quality
tags: location=santa_monica
time                   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®.