Flux 中的模式查询(前身 IFQL)
作者:Stuart Carnie / 用例, 开发者, 产品
2018 年 5 月 31 日
导航至
InfluxQL 通过许多元查询来促进模式探索,其中包括 SHOW MEASUREMENTS
、SHOW TAG KEYS
、SHOW TAG VALUES
和 SHOW FIELD KEYS
。Flux(前身 IFQL)统一了这些概念,使得模式由标签键和值组成。这种统一提供了更大的灵活性,用户可以使用这种灵活性来探索模式,正如我们将在本文的其余部分展示的那样。
InfluxQL ? Flux(前身 IFQL)
本节演示了 InfluxQL 元查询到其 Flux 等效项的转换。
SHOW MEASUREMENTS
测量名称在 _measurement
标签键中聚合。因此,我们希望要求 Flux 为我们提供 _measurement
的不同值。
from(db:"foo")
|> range(start:-24h)
|> group(by:["_measurement"])
|> distinct(column:"_measurement")
|> group(none:true)
一直输入这些可能会变得乏味,因此我们可以编写一个辅助函数,查询指定数据库最近 24 小时的数据,如下所示
showMeasurements = (db) => from(db:db)
|> range(start:-24h)
|> group(by:["_measurement"])
|> distinct(column:"_measurement")
|> group(none:true)
从而得到一个大大简化的查询来显示测量值
showMeasurements(db:"foo")
我们计划在不久的将来正式化一些用于查询元数据的辅助函数。
InfluxQL 元查询不能按时间限制,因此值得指出使用 range
将结果限制为仅包含过去 24 小时内数据的测量值。
SHOW TAG KEYS FROM cpu
列出测量值 cpu
的所有标签键。
from(db:"foo")
|> range(start:-24h)
|> filter(fn:(r) => r._measurement == "cpu")
|> keys()
SHOW TAG VALUES FROM cpu WITH KEY = "host"
列出测量值 cpu
中特定标签(host
)的所有不同值。
from(db:"foo")
|> range(start:-24h)
|> filter(fn:(r) => r._measurement == "cpu")
|> group(by:["host"])
|> distinct(column:"host")
|> group(none:true)
SHOW FIELD KEYS FROM cpu
列出测量值 cpu
的所有字段,这些字段在 _field
标签键下聚合。
from(db:"foo")
|> range(start:-24h)
|> filter(fn:(r) => r._measurement == "cpu")
|> group(by:["_field"])
|> distinct(column:"_field")
|> group(none:true)
细心的读者会注意到,这与第 3 个查询相同,只是使用了 _field
标签键。
探索模式
在本节中,我们将逐步介绍用户在探索其模式时可能执行的一系列查询。
1. 显示可用的标签键
此查询使用 keys
函数列出不同的标签键。
from(db:"foo")
|> range(start:-1h)
|> group(none:true)
|> keys(except:["_time","_value","_start","_stop"])
示例输出
_value:string
-------------
_field
_measurement
bank
dir
host
id
interface
tag0
tag1
tag2
tag3
2. 展开 host
标签以查看可用值
此查询按 host
标签对数据进行分组,并输出 host 列的不同值。
from(db:"foo")
|> range(start:-1h)
|> group(by:["host"])
|> distinct(column:"host")
|> group(none:true)
示例输出
_value:string
-------------
host2
host1
3. 展开 host1
标签以查看可用键
此查询按 host == "host1"
进行过滤,并显示可用键的子集。
from(db:"foo")
|> range(start:-1h)
|> filter(fn:(r) => r.host == "host1")
|> group(none:true)
|> keys(except:["_time","_value","_start","_stop", "host"]) // <- note host is added here, since we're already querying it
示例输出
_value:string
-------------
_field
_measurement
bank
dir
id
interface