正则表达式
正则表达式是一系列字符,用于识别标识符和字符串值中的模式。InfluxQL 在以下操作中支持正则表达式:
正则表达式比较的计算量大于精确字符串比较的计算量。使用正则表达式的查询不如不使用正则表达式的查询性能好。
正则表达式语法
InfluxQL 正则表达式用 / 字符包围,并使用 Go 正则表达式语法。
正则表达式标志
正则表达式标志修改表达式的模式匹配行为。 InfluxQL支持以下正则表达式标志:
| 标志 | 描述 |
|---|
| i | 不区分大小写 |
| m | 多行模式: ^ 和 $ 除了匹配文本的开始/结束外,还匹配行的开始/结束 |
| s | 让 . 匹配 \n |
| U | ungreedy: 交换 x* 和 x*?、x+ 和 x+? 等的含义。 |
在正则表达式模式的开头包含正则表达式标志,使用括号包围(())并且在前面加上问号(?)。
正则表达式运算符
InfluxQL 提供了以下正则表达式运算符,用于测试字符串操作数是否匹配正则表达式:
=~: 如果字符串匹配正则表达式则返回 true!~: 如果字符串不匹配正则表达式,则返回真
InfluxQL 正则表达式运算符用于测试字符串列值在
WHERE 子句中。
正则表达式示例
下面的示例使用以下样本数据集:
使用正则表达式在SELECT子句中指定字段键和标签键
| 时间 | 平均温度 | 最高温度 | 最低温度 |
|---|
| 2020-01-01T00:00:00Z | 52 | 66 | 44 |
| 2020-01-01T00:00:00Z | 53 | 59 | 47 |
| 2020-01-01T00:00:00Z | 50 | 57 | 44 |
| 2020-01-02T00:00:00Z | 54 | 61 | 49 |
| 2020-01-02T00:00:00Z | 51 | 60 | 44 |
| 2020-01-02T00:00:00Z | 53 | 66 | 42 |
| … | … | … | … |
使用正则表达式指定FROM子句中的测量值
| 时间 | 温度 | 平均温度 | 最高温度 | 最低温度 |
|---|
| 2020-01-01T00:00:00Z | | 52 | 66 | 44 |
| 2020-01-01T00:00:00Z | | 53 | 59 | 47 |
| 2020-01-01T00:00:00Z | | 50 | 57 | 44 |
| 2020-01-02T00:00:00Z | | 54 | 61 | 49 |
| 2020-01-02T00:00:00Z | | 51 | 60 | 44 |
| 2020-01-02T00:00:00Z | | 53 | 66 | 42 |
| … | … | … | … | … |
使用正则表达式在WHERE子句中指定标签值
SELECT * FROM weather WHERE location !~ /^[S]/
| 时间 | 地点 | 降水量 | 平均温度 | 最高温度 | 最低温度 | 平均风速 |
|---|
| 2020-01-01T00:00:00Z | 康科德 | 0 | 52 | 66 | 44 | 3.13 |
| 2020-01-01T00:00:00Z | 海沃德 | 0 | 50 | 57 | 44 | 2.24 |
| 2020-01-02T00:00:00Z | 康科德 | 0 | 53 | 66 | 42 | 3.13 |
| 2020-01-02T00:00:00Z | 海沃德 | 0 | 51 | 60 | 44 | 3.8 |
| 2020-01-03T00:00:00Z | 康科德 | 0 | 49 | 60 | 38 | 2.68 |
| 2020-01-03T00:00:00Z | 海沃德 | 0 | 50 | 62 | 41 | 3.13 |
| … | … | … | … | … | … | … |
使用正则表达式指定在 WHERE 子句中没有值的标签
SELECT * FROM home, weather WHERE location !~ /./
| 时间 | 二氧化碳浓度 | 湿度 | 位置 | 降水量 | 房间 | 温度 | 平均温度 | 最高温度 | 最低温度 | 平均风速 |
|---|
| 2022-01-01T08:00:00Z | 0 | 35.9 | | | 厨房 | 21 | | | | |
| 2022-01-01T08:00:00Z | 0 | 35.9 | | | 客厅 | 21.1 | | | | |
| 2022-01-01T09:00:00Z | 0 | 36.2 | | | 厨房 | 23 | | | | |
| 2022-01-01T09:00:00Z | 0 | 35.9 | | | 客厅 | 21.4 | | | | |
| 2022-01-01T10:00:00Z | 0 | 36.1 | | | 厨房 | 22.7 | | | | |
| 2022-01-01T10:00:00Z | 0 | 36 | | | 客厅 | 21.8 | | | | |
| … | … | … | … | … | … | … | … | … | … | … |
使用正则表达式在GROUP BY子句中指定标签键
SELECT MAX(precip) FROM weather GROUP BY /^l/
| 时间 | 最大值 |
|---|
| 2021-10-24T00:00:00Z | 4.53 |
| 时间 | 最大值 |
|---|
| 2022-12-31T00:00:00Z | 4.34 |
| 时间 | 最大值 |
|---|
| 2021-10-24T00:00:00Z | 4.02 |