在Flux中使用正则表达式
此页面记录了 InfluxDB OSS 的早期版本。 InfluxDB OSS v2 是最新的稳定版本。 请参阅等效的 InfluxDB v2 文档: 在 Flux 中使用正则表达式。
正则表达式(regex)在匹配大量数据中的模式时非常强大。 在Flux中,正则表达式主要用于谓词函数中的评估逻辑,用于过滤行、删除和保留列、状态检测等。 本指南展示了如何在您的Flux脚本中使用正则表达式。
如果您刚刚开始使用Flux查询,请查看以下内容:
Go 正则表达式语法
Flux使用Go的regexp package进行正则表达式搜索。
下面的链接提供了关于Go的正则表达式语法的信息。
正则表达式运算符
Flux提供了两个用于正则表达式的比较运算符。
=~
当左边的表达式MATCHES与右边的正则表达式匹配时,它的值为true。
!~
当左侧的表达式不匹配右侧的正则表达式时,这将评估为true。
Flux中的正则表达式
在您的Flux脚本中使用正则表达式匹配时,请用/括起您的正则表达式。以下是基本的正则表达式比较语法:
基本正则表达式比较语法
expression =~ /regex/
expression !~ /regex/
示例
使用正则表达式按标签值过滤
以下示例通过 cpu 标签过滤记录。
它仅保留 cpu 为 cpu0、cpu1 或 cpu2 的记录。
from(bucket: "db/rp")
|> range(start: -15m)
|> filter(fn: (r) =>
r._measurement == "cpu" and
r._field == "usage_user" and
r.cpu =~ /cpu[0-2]/
)
使用正则表达式按字段键过滤
以下示例排除了字段键中没有 _percent 的记录。
from(bucket: "db/rp")
|> range(start: -15m)
|> filter(fn: (r) =>
r._measurement == "mem" and
r._field =~ /_percent/
)
删除匹配正则表达式的列
以下示例删除名称不以 _ 开头的列。
from(bucket: "db/rp")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "mem")
|> drop(fn: (column) => column !~ /_.*/)