(四)FLUX语法

news2024/12/26 10:34:37

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个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"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 网络和资源限制

Docker 网络 一、Docker 网络的概念1、Docker 网络实现原理2、查看容器的输出和日志信息3、Docker 的网络模式&#xff1a;4、容器的网络模式 二、网络模式详解1、host模式2、container模式3、none模式4、bridge模式5、自定义网络 三、资源控制1、CPU 资源控制&#xff08;1&am…

MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )

文章目录 MQ的发展史阶段一&#xff1a;追求解耦阶段二&#xff1a;追求吞吐量与一致性阶段三&#xff1a;追求平台化 MQ的通用架构主题topic、生产者producer、消费者consumer分区partition MQ 存储KafkaGood Design ---> 磁盘顺序写盘Poor Impact---> topic 数量不能过…

Java Spring和Spring集成Mybatis

0目录 1.Spring 2.Spring集成Mybatis 1.Spring 特性 IOC&#xff1a;控制反转 AOP&#xff1a;面向切面 Spring组成部分 在SMM中起到的作用&#xff08;粘合剂&#xff09; Spring理念 OOP核心思想【万物皆对象】 Spring核心思想【万物皆Bean组件】 Spring优势 低侵入式 …

解决Jmeter响应内容显示乱码

一、问题描述 jmeter在执行接口请求后&#xff0c;返回的响应体里面出现乱码现象&#xff0c;尽管在调了对应请求的响应编码也无用&#xff0c;现找到解决办法。 二、解决办法 进入到jmeter的bin目录下&#xff0c;找到jmeter.properties&#xff0c;通过按ctrlF快速定位查找到…

手机图片转pdf?两种方法介绍

手机图片转pdf&#xff1f;如今&#xff0c;随着生活的数字化&#xff0c;我们的手机中储存了大量的照片。但是&#xff0c;如果需要将这些照片转换成PDF格式&#xff0c;该怎么办呢&#xff1f;下面&#xff0c;小编就给大家介绍三种方法来实现这一目标。 第一种方法&#xff…

SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer异常处理使用注解 RestControllerAdvice ExceptionHandler数据格式返回使用注解 ControllerAdvice 并且实现接口 ResponseBody…

基于STM32CubeMX和keil采用STM32F407的基本定时器中断实现LED闪烁

文章目录 前言1. 电路原理图理解2. 基本定时器2.1 STM32定时器中断的流程&#xff1a;2.2 部分参数详解2.2.1 时钟源2.2.2 预分频系数2.2.3 自动重装载值 3. STM32CubeMX参数配置3.1GPIO配置3.2 时钟配置3.2 配置定时器相关参数3.3 Debug配置3.4 中断配置3.5 代码生成 4. keil代…

【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

ftp传文件越来越慢的原因,以及解决方案

FTP 是一种常用的文件传输协议&#xff0c;它基于客户端-服务端模型工作&#xff0c;允许用户通过网络传输文件。但是&#xff0c;有时候在使用 FTP 的过程中&#xff0c;文件传输速度会逐渐变慢&#xff0c;这给用户带来了很多困扰。本文将分析 FTP 传文件变慢的原因&#xff…

Jwt(Json web token)——从Http协议到session+cookie到Token Jwt介绍 Jwt的应用:登陆验证的流程

目录 引出从Http协议到session&cookie到TokenHTTP协议session & cookiesessioncookie为什么需要session & cookie? JavaEE传统解决长连接方案问题&#xff1a;分布式不适用解决方案&#xff1a;令牌Token Jwt&#xff0c;Json web tokenjwt的结构Header加密算法Ba…

MySQL Workbench的使用

MySQL Workbench 是一款专门为 MySQL 设计的可视化数据库管理软件&#xff0c;我们可以在自己的计算机上&#xff0c;使用图形化界面远程管理 MySQL 数据库。 MySQL Workbench 的初始界面如下图所示。 点击方框后会进入这个界面&#xff0c;这样就与数据库连接完毕了 使用 Wo…

Docker 全栈体系(四)

Docker 体系&#xff08;高级篇&#xff09; 一、Docker复杂安装 1. 安装mysql主从复制 主从搭建步骤 新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysq…

SpringBoot-4

Spring Boot 使用 slf4j 日志 在开发中经常使用 System.out.println()来打印一些信息&#xff0c;但是这样不好&#xff0c;因为大量的使用 System.out 会增加资源的消耗。实际项目中使用的是 slf4j 的 logback 来输出日志&#xff0c;效率挺高的&#xff0c;Spring Boot 提供…

【go语言学习笔记】02 Go语言高效并发

文章目录 一、并发基础1. 协程&#xff08;Goroutine&#xff09;2. Channel2.1 声明2.2 无缓冲 channel2.3 有缓冲 channel2.4 关闭 channel2.5 单向 channel2.6 selectchannel 示例 二、同步原语1. 资源竞争2. 同步原语2.1 sync.Mutex2.2 sync.RWMutex2.3 sync.WaitGroup2.4 …

2023 NVIDIA 创乐博 CUDA 线上训练营笔记

一、学习ubuntu 2.1修改权限 linux指令学习 cd course //进入course目录 ls //列出文件夹 clean //清屏幕//---修改权限 chmod gow text //给text文件夹添加可写权限 chmod gw make.ip chmod 755 text 可读可写可执行&#xff08;user goup o…

MySQL MHA高可用配置及故障切换

1&#xff0e;什么是 MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…

uni-app中uni-table的uni-tr无点击事件

uni-app中uni-table的uni-tr无点击事件 问题描述解决方法一解决方法二解决方法三 问题描述 本文记录用于记录使用uni-app开发过程遇到的bug。 在使用uni-table时&#xff0c;想给uni-table的行添加行点击事件&#xff1b;但发现官方并未给uni-tr增加点击行点击事件&#xff08;…

gitee 配置ssh 公钥(私钥)

步骤1&#xff1a;添加/生成SSH公钥&#xff0c;码云提供了基于SSH协议的Git服务&#xff0c;在使用SSH协议访问项目仓库之前&#xff0c;需要先配置好账户/项目的SSH公钥。 绑定账户邮箱&#xff1a; git config --global user.name "Your Name" git config --glob…

Linux静态库+demo

1.什么是Linux静态库呢&#xff1f; Linux静态库&#xff08;Static Library&#xff09;是一种包含已编译的目标代码的文件集合&#xff0c;用于在链接时与其他目标代码一起组成可执行文件。与动态库&#xff08;Dynamic Library&#xff09;不同&#xff0c;静态库的代码在编…