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
标签分组数据,并输出主机列的不同值。
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