(四)FLUX语法

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦!

第 4 章 FLUX语法

4.1 认识FLUX语言

1、Flux是一种函数式的数据脚本语言,它旨在将查询、处理、分析和操作数据统一为一种语法。想要从概念上理解 FLUX,你可以想想水处理的过程。我们从源头把水抽取出来,然后按照我们的用水需求,在管道上进行一系列的处理修改(去除沉积物,净化)等,最终以消耗品的方式输送到我们的目的地(饮水机、灌溉等)。

在这里插入图片描述

注意:InfluxData公司对FLUX语言构想并不是仅仅让它作为InfluxDB的特定查询语言,而是希望它像SQL一样,成为一种标准。按照这个计划,FLUX语言应该具备处理来自不同数据源的数据的能力。

4.2 最简示例

1、与处理水一样,使用FLUX语言进行查询时会执行以下操作。

  • 从数据源中查询指定数量的数据
  • 根据时间或字段筛选数据
  • 将数据进行处理或者聚合以得到预期结果
  • 返回最终的结果

2、下面 3 个示例的处理逻辑都是一样的,只不过数据源有所不同, 这 3 个示例只是让大家看一下语法,不需要运行。

  • 示例 1 :从InfluxDB查询数据并聚合
from(bucket: "example-bucket")
|> range(start: -1d)
|> filter(fn: (r) => r._measurement == "exa|> mean() mple-measurement")
|> yield(name: "_results")
  • 示例 2 :从CSV文件查询数据并聚合
import "csv"

 csv.from(file: "path/to/example/data.csv")
|> range(start: -1d)
|> filter(fn: (r) => r._measurement == "example-measurement")
|> mean()
|> yield(name: "_results")
  • 示例 3 :从PostgreSQL数据库查询数据并聚合
import "sql"
sql.from(
driverName: "postgres",
dataSourceName: "postgresql://user:password@localhost",
query: "SELECT * FROM TestTable",)
|> filter(fn: (r) => r.UserID == "123ABC456DEF")
|> mean(column: "purchase_total")|> yield(name: "_results")

上面 3 个示例用的函数都是一模一样的,下面来讲解示例中出现的代码:

函数说明
from( )函数可以指定数据源。
|> 管道转发符将一个函数的输出转发给下一个函数。
range( ),fliter( )两个函数在根据列的值对数据进行过滤
mean( )函数在计算所剩数据的平均值。
yield( )将最终的计算结果返回给用户。

4.3 铭记FLUX是一门查询语言

1、虽然,FLUX语言的自我定位一个脚本语言,但是我们必须注意它也是一个查询语言的事实。因此,一个FLUX脚本想要成功执行,它就必须返回一个表流。就像是SQL语言想要正确执行,它就必须返回一张表。

2、表流是FLUX里提出一种数据结构,在后面的文章里我们会表流的概念进行深度的讲解。另外需要注意,我们后面的代码,如果只返回一个单值,比如单个整数或者字符串这种,那就必须把这个值转换成表流才能运行。这个时候必须使用array.from函数。

示例如下: array.from函数的作用就是把x这个单值,包装在了一个表流里面返回了。

from "array
x = 1
array.from(rows: [{"value":x}])

4.4 注意InfluxDB支持的FLUX语言版本

1、需要注意,因为InfluxDB是一个用Go语言编写的数据库,它的整个项目成果就是一个单独的可执行二进制文件,所以FLUX语言其实也会被编译到同一个文件里。这意味着InfluxDB和FLUX会有版本绑定的关系。

2、这里,我放了一个链接https://docs.influxdata.com/flux/v0.x/influxdb-versions/ ,它是官方FLUX文档的一部分,这里明确记录了InfluxDB版本的FLUX语言版本的对应关系

在这里插入图片描述

4.5 FLUX的基本语法

4.5.1 注释

1、在FLUX脚本中,没有多行注释一说,用户只能写单行注释。如果一行以两个斜杠开头,那么这一行中的所有内容会被视为注释。 示例:

 // 这是一行注释

4.5.2 变量与复制

1、使用赋值运算符(=)将表达式的结果赋值变量,最终你可以使用变量名来返回变量 的值。示例:

s = "foo" // string
i = 1 // integer
f = 2.0 // float (floating point number)
s // Returns foo
i // Returns 1
f // Returns 2.0

4.5.3 基本表达式

1、FLUX支持基本的表达式,比如:

  • + 数字相加或字符串拼接
  • - 数字减法
  • * 数字相乘
  • / 数字除法
  • % 取模

示例:

1 + 1// Returns 2 (^)
10 * 3
// Returns 30
(12.0 + 18.0) / (2.0 ^ 2.0) + (240.0 % 55.0)
// Returns 27.5
"John " + "Doe " + "is here!"
// Returns John Doe is here!

4.5.4 谓词表达式

4.5.4.1 比较运算符

1、谓词表达式使用比较运算符和逻辑运算符来实现,谓词表达式的最后的返回结果只能为true 或 false示例:

"John" == "John"
// Returns true

(^) 41 < 30
// Returns false
"John" == "John" and 41 < 30
// Returns false
"John" == "John" or 41 < 30
// Returns true

2、另外

  • =~可以判断一个字符串时候能被正则表达式匹配上。
  • !~ 是 =~ 的反操作,判断一个字符串是不是不能被某个正则表达式匹配。

例如:

"abcdefg" =~ "abc|bcd"
// Returns true
"abcdefg" !~ "abc|bcd"
// Returns false
4.5.4.2 逻辑运算符

1、在FLUX语言中,表示与逻辑需要使用关键字and,表示或逻辑需要使用关键字or。示例:

a = true

b = x = a and bfalse (^)
// Returns false
y = a or b
// Returns true

2、最后,not可以用来进行逻辑取反。示例:

a = trueb = not a (^)
// Returns false

4.5.5 控制语句

1、所谓控制语句是指一个编程语言中用来空值代码执行顺序的语法。 比如:

  • if else
  • for while 循环
  • try catch 异常捕获

2、不过,在InfluxDB中,这些语法统统没有。唯一一个和if else比较像的是FLUX语言中的条件子句,它和python中的条件子句功能一样且语法相似,和java语言相比的话它有些像三元表达式。示例如下:

x = 0
y = if x == 0 then "hello" else "world"

3、此处,if then else被我们成为条件子句,你需要先指定一个条件,然后当条件为true的时候,条件子句会返回then后面的内容,也就是"hello"。如果是 flase,那么就会返回else后面的内容,也就是"world"。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值