示例数据
为了进一步学习Flux相关,本页将根据下方示例数据来学习Flux语法、Flux常用函数。
当前数据是line protocol为标准格式数据的天气数据。
注意前三行表示天气数据,包括位置、温度和湿度,后三行表示传感器数据,包括位置和值,并且当前数据入库名为test的Bucket中。
weather,location=home temperature=25.5,humidity=60 1569434400
weather,location=office temperature=23.0,humidity=55 1569434500
weather,location=garden temperature=28.3,humidity=70 1569434600
sensor,location=room1 value=10 1569434700
sensor,location=room2 value=15 1569434800
snsor,location=room3 value=12 1569434900
查询语句
语法格式:
from(data_source)
|> range(start_time, end_time)
|> mean()
语法描述:
from(data_source):此函数或操作从特定的数据源中检索数据。它以 data_source 作为参数,该参数是Bucket。
range(start_time, end_time):此函数或操作根据特定的时间范围对数据进行过滤。它以 start_time和end_time作为参数,并仅返回该时间范围内的数据。
mean():此函数或操作计算从上一步返回的值的平均值。
语法示例:
查询示例数据的所有数据格式如下:
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> mean()
条件语句
语法格式:
from(data_source)
|> range(start_time, end_time)
|> filter(column_value)
|> mean()
语法描述:
filter(column_value):此函数或操作根据特定列的值对数据按照_measurement、标签集和字段级进行过滤 ,并返回与该值匹配的数据。
语法示例:
查询示例的数据中weather表格式如下:
from(bucket: "test")
|> range(start_time, end_time)
|> filter( fn: (r) => r._measurement == "weather")
|> mean()
查询示例数据中office字段的格式如下:
from(bucket: "test")
|> range(start_time, end_time)
|> filter( fn: (r) => r._field == "office")
|> mean()
分组语句
语法格式:
from(data_source)
|> range(start_time, end_time)
|> filter(column_value)
|> group(columns: ["_field"])
语法描述:
group根据_measurement列和其他指定列对结果进行分组。
语法示例:
查询根据示例数据中所有字段进行分组格式如下:
from(bucket: "monitor")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> filter(fn: (r) => r["_measurement"] == "weather")
|> group(columns: ["_field"])
条件语句
语法格式:
from(data_source)
|> range(start_time, end_time)
|> filter(column_value)
|> sort(columns:["_time"], desc:true)
语法描述:
sort根据时间戳进行排序desc为ture时降序,desc为false为升序。
语法示例:
查询示例数据中weather表格按照降序格式如下:
from(bucket: "monitor")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> filter(fn: (r) => r["_measurement"] == "weather")
|> sort(columns:["_time"], desc:true)
LIMIT语句
语法格式:
from(data_source)
|> range(start_time, end_time)
|> filter(column_value)
|> sort(columns:["_time"], desc:true)
|> limit(N)
语法描述:
limit(N) 返回指定measurement中的前N个数据点。
语法示例:
查询示例数据中weather表中第一条数据如下:
from(data_source)
|> range(start: -num h)
|> timeShift(duration: num h)
时区语句
语法格式:
from(data_source)
|> range(start: -num h)
|> timeShift(duration: num h)
语法描述:
天翼云时序数据库Influx版数据时用的 UTC 时间, 使用timeShift可以更改UTC的偏移值。
语法示例:
查询最近1小时数据,返回列时间使用timeShift转换为当前时区(上海时区+8h)数据如下:
from(bucket: "test")
|> range(start:-1h)
|> timeShift(duration: 8h)
类型转换语句
语法格式:
from(data_source)
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "")
|> filter( fn: (r) => r._field == "")
|> toInt()
语法描述:
在天翼云时序数据库Influx版有toInt()、toFloat()、toString()、toBool()这4个方法将列中的所有值转换为指定类型。
语法示例:
将示例数据中weather表的temperature转为Float型:数据如下:
from(bucket: "test")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "weather")
|> filter( fn: (r) => r._field == "temperature")
|> toFloat()
时间语句
查询语句中的range中start_time和end_time默认的时间范围是从 1677-09-21 00:12:43.145224194 UTC到2262-04-11T23:47:16.854775806Z UTC 。
range函数有两种用法,下面将介绍绝对时间和相对时间的用法。
绝对时间。
语法格式:
from(data_source)
|> range(start: rfc3339_like_date_time_string, stop: rfc3339_like_date_time_string)
|> mean()
语法描述:
rfc3339_like_date_time_string 是占位符需要 YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ 格式的时间字符串。
语法示例:
查询最示例数据中绝对时间范围的数据如下:
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> mean()
相对时间。
语法格式:
from(data_source)
|> range(start: -num h)
|> mean()
语法描述:
-num 是数字,查询相对于现在的前几小时间段。
语法示例:
查询前一个小时内的数据如下:
from(bucket: "test")
|> range(start: -1h)
|> mean()
聚合函数
count()。
语法描述:
返回一个field中的非空值数量。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> count()
语法示例:
查询示例数据中weather表的个数。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> count()
mean()。
语法描述:
求平均值,字段类型必须是整型或浮点型。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> mean()
语法示例:
查询示例数据中weather表的平均数。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> mean()
sum()。
语法描述:
根据筛选值进行求和。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> sum()
语法示例:
查询示例数据中weather表的平均数。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> sum()
last()。
语法描述:
返回表中带有非空值的最后一行。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> yield(name: "last")
语法示例:
查询示例数据中weather表的最后一行。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> yield(name: "last")
first()。
语法描述:
返回表中带有非空值的最前面一行。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> yield(name: "first")
语法示例:
查询示例数据中weather表的最前面一行。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> yield(name: "first")
选择函数
max()。
语法描述:
返回字段中最大值。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> yield(name: "max")
语法示例:
查询示例数据中weather表的最大值。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> yield(name: "max")
min()。
语法描述:
返回字段中最小值。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> yield(name: "min")
语法示例:
查询示例数据中weather表的最小值。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> yield(name: "min")
spread()。
语法描述:
返回字段的最小值和最大值之间的差值 。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> spread(column:"fieldName")
|> yield(name: "spread")
语法示例:
查询temperature字段的最小值和最大值之间的差值。
from(data_source)
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> spread(column:"temperature")
|> yield(name: "spread")
转换函数
difference()。
语法描述:
返回一个字段中连续的时间值之间的差异。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> difference(column: "fieldName")
|> mean()
语法示例:
查询示例数据中weather表连续的时间值之间的差异。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> difference(column: "_value")
|> mean()
筛选函数
distinct()。
语法描述:
返回指定列中的所有唯一值。
语法格式:
from(data_source)
|> range(start_time, end_time)
|> distinct()
|> yield(name: "distinct")
语法示例:
查询示例数据中weather表列中的所有唯一值。
from(bucket: "test")
|> range(start: 2019-09-26T02:00:00Z, stop: 2019-09-26T03:00:00Z)
|> distinct()
|> yield(name: "distinct")