Flux语言 -- InfluxDB笔记二
1. 基础概念理解
1.1 语序和MySQL不一样,像净水一样通过管道一层层过滤

1.2 不同版本FluxDB的语法也不太一样
2. 基本表达式
import "array"
s = 10 * 3
// 浮点型只能与浮点型进行运算
s1 = 9.0 / 3.0
s2 = 10.0 % 3.0 // 等于 1
s3 = 10.0 ^ 3.0 // 等于 1000
s4 = "abc" + string(v: 4)
// 输出
array.from(rows:[{"value" : s}])
3. 谓词表达式 (xx 且 xx)
import "array"
s = "abc" == "abc" // 相等。返回true
s9 = "abc" != "abc" // 不等。返回false
s8 = 1 == 1 and 1==2 // 且。返回false
s7 = 1 == 1 or 1==2 // 或。返回true// 判断字符串是不是 匹配 以a开头的正则表达式,返回true
s6 = "abc" =~ /^a/
// 判断字符串是不是 不匹配 以a开头的正则表达式,返回false
s5 = "abc" !~ /^a/a = not s5 // 取反,返回trues1 = "abc" < "bbc" // 返回true
s2 = "啊" < "吧" // UTF8码值,返回false
s3 = 1 < 2.0 // 返回true,整型和浮点型不可以跨类型计算,但是可以跨类型比较
s3 = "1" < 2.0 // 报错 unsupported binary expression string > float
s4 = 0.1 + 0.2 == 0.3 // false ,因为浮点,应该是 0.1 + 0.2 > 0.3
array.from(rows:[{"value" : s}]) // 返回true
4. 控制语句
三元运算符 (这是唯一用到if-else判断的地方,Flux本质上还是查询语句,同sql)
import "array"
x = 0
a = if x = 0 then "green" else "red" // 返回green
a = if x = 0 then "green" else if x == 1 then "red" else "yellow" // x为1时,返回red
array.from(rows:[{"value" : s}])
5.十大数据类型
5.1 Boolean (true、false是关键字)
a = 1
b = bool(v: a) // a=1,输出true;a=0,输出false
// 可转换的类型:浮点 1.0、字符串"true"/"false"
5.2 bytes (Flux支持bytes,InfluxDB不支持bytes)
b = "abc"
x = bytes(v: b) // cannot represent the type bytes as column data
// bytes的作用:序列化
c = string(v: x) // 输出abc
d = display(v: x) // 输出0x616263; webUI的bug导致dispaly报错,可忽略
import "contrib/bonitoo-io/hex" // 工具中可能不会提醒,需要查官方文档
import "array"
b = "616263"
c = hex.bytes(v: b)
x = string(v: c)
array.from(rows: [{"value": x}]) // 输出abc
bytes的一个用法
import "http"
http.post(url: "http://localhost:8086/", headers: {x:"a", y:"b"}, data: bytes(v: "body"))
5.3 Time 时间点
a = 2023-08-23T15:06:00.001Z // time 类型:DATETIME: RFC3339格式的日期时间
5.4 Duration 持续时间
import "date"
a = 2023-08-23T05:06:00.001Z
b = 1d10h
c = data.add(d:b, to:a) // 输出a = 2023-08-24T15:06:00.001Z
f = -1d3h
e = data.add(d:f, to:a) // 输出a = 2023-08-22T04:06:00.001Z
array.from(rows: [{value: f}])// 报错,cannot represent the type duration as column data
// 字符串转duration
g = "1h5m"
h = duration(v:g)
语法

hour
import "data"
b = date.hour(t:now()) // 输出long型的数字
时间戳
a = 2023-08-23T05:06:00.001Z
b = time(v:1692844684000*1000*1000) // 纳秒级
c = unit(v:a) // 输出1692738360001000000
5.5 String 字符串
import "strings"
a = "abc"
a1 = "\x61\x62\x63" // 输出abc
// 字符串转换
b = string(v: 1) // 支持Integer | UInteger | Float | Boolean | Duration | Time
c = string.containsStr(v: "今天天气真好", substr: "天气") // true,字符串是否包含某个字符
d = strings.joinStr(arr:["今天", "天气", "真好"], v:"-") // 输出今天-天气-真好
e = strings.isLetter(v:"c") // 输出 true;false : < 、哈 ...
array.from(rows: [{"value": a}])
5.6 Regular expression 正则表达式
a = "albcdef"
b = /abc|bcd|def/
c = a =~ b // 输出true,b:匹配abc或bcd或def
d = regexp.findString(r: b, v: a); // 输出bcd;最左边能匹配上的条件
e = "abc|bcd|def"
f = regexp.compare(v: a) // 正则表达式的转换
array.from(rows: [{v: c}])
array.from(rows: [{v: display(v: c)}]) // 输出abc|bcd|def
array.from(rows: [{v: a =~ f}])
5.7 Integer 整型
取值范围:2^63 ~ 2^63 - 1
bug1: 2^63-1运算会提示浮点型转换错误,2^63-1.0也会报错;
bug2: 值过大时,页面显示有bug,与实际值不一致,可以通过下载csv查看实际值;
可转换的类型有:Boolean | Duration | Float | Numeric String | Time | Uinteger
小数转换时是截断型转换,不会四舍五入,可通过math.round(x: 12.5)转换,此时返回值为Double,故完整写法:int(v:math.round(x: 12.5))
hex.int(v: 'a') // 输出10,十六进制
hex.int(v: 'a0') // 输出160
5.8 Uintegers 无符号整型
取值范围:0 ~ 2^64
可转换的类型有:Boolean | Duration | Float | Integer | Numeric String | Time
unit(v: 123)// 输出123,UNSIGNEDLONG类型
5.9 Float 浮点数
8个子节
不支持科学计数法e,可以写为float(v: "1.2345e+")
正无穷大 float(v: "Inf")
不支持NaN,写成float(v: "NaN")
5.10 Null 空值
flux不支持null
import "internal/debug"
a = debug.null(type:"int") // 输出为空,类型为long
b = a == debug.null(type:"int") // cannot represent the type null as column data;此时的b不是true/false,而是null,类型也为null,与类型为LONG的a的null不一样
c = exists a // 输出false,判断a是否存在
6. 4种复合类型
6.1 record
b = {"name" : "tony", age: 18, "x y": "20,40"}
arrays.from(rows:[{display(v: b)}]) // 输出String类型的b
arrays.from(rows:[b]) // 输出多列数据,如下图
a = b.name //输出 tony
c = b["age"] // 输出18
// 不支持动态变量
key_name = "age"
d = b[key_name] // expected int but found string error@**: expected [d](array) but found {x y: string, name: string, age: int}(record)
e = {"name" : "tony", age: 18, "x y": "20,40"}
f = b==e // 输出true,比较是否完全一致,不能比较大小
g = {b with age:19,"height":200}// 输出结果更新了age的值,同时多了一列height,未提到的列沿用之前的b,如下图2


b = {
name: "tony",
address: {
country: "China"
}
}
// cannot represent the type {address:{coutry: string}} as column data
// 语法支持这样写,但是FluxDB不支持,record不支持嵌套record,相当于列里无法存储json
c = b.address.country // 输出China
d = b["address"]["country"] // 输出China
// b整体存库里
e = json.encode(v: b) // cannot represent the type bytes as column data
g = string(v: e) // 这样才能作为string数据存储成功
6.2 Dictionary 字典
字典和记录很像,但是key-value的要求不一样
所有key的类型必须相同,所有value的类型必须相同;
语法上,用方括号[]声明,key后面跟冒号:键值对之间用英文逗号分隔
[1.0: {stable: 12, latest: 12}, 1.1: {stable: 3, latest: 15}]
该数据类型不支持直接作为fluxdb的列
a = ["name": "tony", "age": "18"]
// 不支持直接通过.或[key]取值
// 查询(取值时,key可以是动态参数)
key_name = "key"
b = dict.get(dict:a, key: key_name , default: "244")// 如果key不存在,返回默认值244
// 值的插入与更新需要通过dict
c = dict.insert(dict: a, key: "age", "value": "20" )// 更新值,这里前端的文档入参有bug,错把value提示为default
d = dict.insert(dict: a, key: "weight", "value": "50" )// 插入值
// 删除
e = dict.remove(dict: a, key: "age")
// fromList
f = dict.fromList(pairs: [{key: "name",value: "tony"}, {key: "age",value: "18"}])// 输出 [name: tony, age: 18]
array.from(rows: [{"value": display(v: d)}])
6.3 Array 数组
a = ["1", "2", "3"] // 类型要一致
b = length(arr: a) // 长度
c = contains(value: 1, set: a) // true,包含判断
7. 4种复合函数
// 一个可以进行乘法运算的函数
chengfa = (x, y) => x * y
a = chengfa(x: 4, y: 5) // 输出20
// 定义默认值
chengfa1 = (x, y=10) => x * y
a1 = chengfa1(x: 4) // 输出40
// 函数体
chengfa2 = (x, y=10) => {
z = x - 2;
return z * y
}
a2 = chengfa2(x: 4) // 输出20
FLUX语言里,函数也是类型
getChengFa = () => {
chengfa = (x, y) => x * y
return chengfa
}
x = getChengFa()(x: 10, y: 5)
相关文章:
Flux语言 -- InfluxDB笔记二
1. 基础概念理解 1.1 语序和MySQL不一样,像净水一样通过管道一层层过滤 1.2 不同版本FluxDB的语法也不太一样 2. 基本表达式 import "array" s 10 * 3 // 浮点型只能与浮点型进行运算 s1 9.0 / 3.0 s2 10.0 % 3.0 // 等于 1 s3 10.0 ^ 3.0 // 等于…...
18.Oauth2-微服务认证
1.Oauth2 OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务,通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源,或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解,可以想象OAuth2.0就是在用…...
vue和node使用websocket实现数据推送,实时聊天
需求:node做后端根据websocket,连接数据库,数据库的字段改变后,前端不用刷新页面也能更新到数据,前端也可以发送消息给后端,后端接受后把前端消息做处理再推送给前端展示 1.初始化node,生成pac…...
汽车电子笔记之:基于AUTOSAR的多核监控机制
目录 1、概述 2、系统监控的目标 2.1、任务的状态机 2.2、任务服务函数 2.3、任务周期性事件 2.4、时间监控的指标 2.5、时间监控的原理 2.6、CPU负载率监控原理 2.6.1、设计思路 2.6.2、监控方法的评价 3、基于WDGM模块热舞时序监控方法 3.1、活跃监督 3.2、截至时…...
GDB 源码分析 -- 断点源码解析
文章目录 一、断点简介1.1 硬件断点1.2 软件断点 二、断点源码分析2.1 断点相关结构体2.1.1 struct breakpoint2.1.2 struct bp_location 2.2 断点源码简介2.3 break设置断点2.4 enable break2.5 disable breakpoint2.6 delete breakpoint2.7 info break 命令源码解析 三、Linu…...
SpringMVC概述与简单使用
1.SpringMVC简介 SpringMVC也叫做Spring web mvc,是 Spring 框架的一部分,是在 Spring3.0 后发布的。 2.SpringMVC优点 1.基于 MVC 架构 基于 MVC 架构,功能分工明确。解耦合, 2.容易理解,上手快;使用简单。 就可以…...
传输层—UDP原理详解
目录 前言 1.netstat 2.pidof 3.UDP协议格式 4.UDP的特点 5.面向数据报 6.UDP的缓冲区 7.UDP使用注意事项 8.基于UDP的应用层协议 总结 前言 在之前的文章中为大家介绍了关于网络协议栈第一层就是应用层,包含套接字的使用,在应用层编码实现服务…...
CK-GW06-E03与汇川PLC的EtherNet/IP通信
准备阶段: CK-GWO6-E03网关POE交换机网线汇川PLC编程软件汇川AC801-0221-U0R0型号PLC 1.打开汇川PLC编程软件lnoProShop(V1.6.2)SP2 新建工程,选择对应的PLC型号,编程语言选择为“结构化文本(ST)语言”,然…...
UI界面自动化BagePage
常用basepage模块代码 # -*- coding: utf-8 -*- # Desc: UI自动化测试的一些基础浏览器操作方法# 第三方库导入 import time from logging import config import randomimport allure from selenium.webdriver.common.alert import Alert from selenium.webdriver.remote.webe…...
北京开发APP的费用明细
开发APP项目时,在功能确定后需要知道有哪些可能的费用,安排项目预算。北京开发APP的费用明细可能会包括以下几个部分,每个部分都会产生一些费用。今天和大家分享APP费用明细有哪些,希望对大家有所帮助。北京木奇移动技术有限公司&…...
2023年MySQL核心技术第一篇
目录 一 . 存储:一个完整的数据存储过程是怎样的? 1.1 数据存储过程 1.1.1 创建MySQl 数据库 1.1.1.1 为什么我们要先创建一个数据库,而不是直接创建数据表? 1.1.1.2基本操作部分 1.2 选择索引问题 二 . 字段:这么多的…...
通讯协议056——全网独有的OPC HDA知识一之接口(十一)IOPCHDA_Playback
本文简单介绍OPC HDA规范的IOPCHDA_Playback(可选)接口方法,更多通信资源请登录网信智汇(wangxinzhihui.com)。 此接口支持历史服务器的播放功能。这提供了从历史服务器获得初始数据集的能力,然后获得历史数据的持续更新。这与异…...
数学建模:数据的预处理
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 数据预处理数据变换数据清洗缺失值处理异常值处理 数据预处理 数据变换 常见的数据变换的方式:通过某些简单的函数进行数据变换。 x ′ x 2 x ′ x x ′ log ( x ) ∇ f ( x k )…...
Linux土遁术之监测监测进程打开文件
分析问题过程中,追踪进程打开的文件可以在许多不同情况下有用,体现在以下几个方面: 故障排除和调试: 当程序出现问题、崩溃或异常行为时,追踪进程打开的文件可以帮助您找出问题的根本原因。这有助于快速定位错误&…...
css让多个盒子强制自动等宽
1.width: calc( 100 / n% ) 2.display:flex; flex:1;width:100px; 3.display:grid;grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); 但是其中某一个内容较长的时候 会破坏1:1:1的平衡 这个时候发现附件名字过长导致不等比例,通过查看阮一峰flex文…...
【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)
zhi.oscs1024.com 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件,用于在Airflow中管理和调度Apache Spar…...
树模型与集成学习:LightGBM
目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献:单边梯度抽样算法 LightGBM 的贡献:直方图算法 LightGBM 的贡献:互斥特征捆绑算法 LightGBM 的贡献:深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…...
PHP多语言代入电商平台api接口采集拼多多根据ID获取商品详情原数据示例
拼多多商品详情原数据API接口的作用是获取拼多多电商平台上某一商品的详细信息,包括商品的标题、价格、库存、图片、描述、包邮信息、销量、评价、优惠券等数据。通过该API接口可以获取到商品的原始数据,用于分析、筛选和展示商品信息。 pinduoduo.item…...
数据结构(Java实现)-二叉树(下)
获取二叉树的高度 检测值为value的元素是否存在(前序遍历) 层序遍历 判断一棵树是不是完全二叉树 获取节点的路径 二叉树的最近公共祖先...
如何利用 SmartX 存储性能测试工具 OWL 优化性能管理?
作者:深耕行业的 SmartX 金融团队 张瑞松 运维人员在日常管理集群时,有时难免会产生这样的困惑: 新业务准备上线,在具备多套存储的情况下,应如何选择承载业务的存储环境? 业务虚拟机刚上线时运行速度很快…...
模拟前端电路设计:高精度信号处理核心技术解析
1. 模拟前端电路设计概述 模拟前端电路是连接真实世界与数字系统的关键桥梁,它负责将传感器采集的微弱模拟信号进行调理、放大和转换,使其能够被后续的数字系统正确处理。作为一名从事硬件设计十余年的工程师,我处理过从医疗设备到工业控制的…...
Geoserver空间查询全解析:从基础bbox到高级CQL_FILTER的完整指南
Geoserver空间查询全解析:从基础bbox到高级CQL_FILTER的完整指南 当你面对海量地理空间数据时,如何快速准确地提取所需信息?Geoserver作为开源地理信息系统(GIS)的中枢神经,其强大的空间查询能力往往被开发…...
感知损失(Perceptual Loss)在图像风格迁移中的关键作用与实现
1. 为什么感知损失能让AI画出更像艺术家的画? 第一次用传统MSE损失做风格迁移时,我盯着生成的"梵高星空"直挠头——颜色位置都对,但怎么看都像小学生涂鸦。直到尝试了感知损失,画面突然有了笔触的韵律感。这背后的秘密…...
TurboQuant革命:KV-Cache压缩技术如何重塑大模型推理经济
上一篇:Qwen3.5-Max-Preview与国产大模型技术突破:阿里通义千问2026最新进展全解析 下一篇:2026年AI-Agent产业化全景:从概念验证到规模化部署的完整路径 摘要 2026年3月24日,Google Research发布了一项名为TurboQuan…...
I.MX6U-MINI开发板系统固化全流程:从uboot编译到rootfs烧录(附网络配置技巧)
I.MX6U-MINI开发板系统固化实战指南:从零构建到网络调优 第一次拿到I.MX6U-MINI开发板时,面对系统固化的多个环节总有种无从下手的感觉。作为嵌入式Linux开发的入门门槛,系统固化不仅关系到后续应用开发的基础环境,更是理解嵌入式…...
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南根据您提供的快报内容,我将从专业角度逐步分析欧美组合式一氧化碳(CO)及可燃气体报警器的关键信息,包括安全标准、风险因素、探测器区别、安装建议以及相关产…...
League Akari:英雄联盟玩家的终极智能工具箱 - 3大核心功能深度解析
League Akari:英雄联盟玩家的终极智能工具箱 - 3大核心功能深度解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟…...
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤 1. 镜像概述与核心优势 PyTorch 2.8深度学习镜像专为RTX 4090D显卡优化设计,提供开箱即用的深度学习开发环境。这个镜像最显著的特点是免去了复杂的环境配置过程,让开发者…...
VisualGDB跨平台调试避坑指南:用VS远程调试Linux程序(2023最新版配置)
VisualGDB跨平台调试实战:2023年VS远程开发Linux程序避坑指南 当Visual Studio开发者首次尝试在Linux环境下进行C开发时,往往会面临调试工具链断裂的困境。传统的gdb命令行调试方式与Windows开发者熟悉的图形化调试体验存在巨大鸿沟,而Visual…...
OpenTiny NEXT 前端智能化系列直播征文开启,带你系统学习 AI 前端与 WebAgent
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
