Flux语言 -- InfluxDB笔记二

news2024/10/7 16:25:41

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 // 取反,返回true

s1 = "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)

 

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

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

相关文章

pdf怎么转换成jpg图片?

随着数字文档的广泛应用&#xff0c;将PDF转换为JPG图片格式成为了一个常见的需求。无论是为了在网页上展示内容&#xff0c;还是为了与他人分享图片&#xff0c;以下是一些简单的方法&#xff0c;帮助您将PDF文件快速转换为高质量的JPG图片。 方法一&#xff1a;在线PDF转JPG…

《穷爸爸与富爸爸》时间是最宝贵的资产,只有它对所有人都是公平的

《穷爸爸与富爸爸》时间是最宝贵的资产&#xff0c;只有它对所有人都是公平的 罗伯特清崎&#xff0c;日裔美国人&#xff0c;投资家、教育家、企业家。 萧明 译 文章目录 《穷爸爸与富爸爸》时间是最宝贵的资产&#xff0c;只有它对所有人都是公平的[toc]摘录各阶层现金流图支…

大模型 Dalle2 学习三部曲(一)clip学习

clip论文比较长48页&#xff0c;但是clip模型本身又比较简单&#xff0c;效果又奇好&#xff0c;正所谓大道至简&#xff0c;我们来学习一下clip论文中的一些技巧&#xff0c;可以让我们快速加深对clip模型的理解&#xff0c;以及大模型对推荐带来革命性的变化。 clip结构 首选…

线上问诊:数仓开发(一)

系列文章目录 线上问诊&#xff1a;业务数据采集 线上问诊&#xff1a;数仓数据同步 线上问诊&#xff1a;数仓开发(一) 文章目录 系列文章目录前言一、Hive on yarn二、数仓开发1.ODS开发2.DIM开发3.DWD开发 总结 前言 上次我们已经将MYSQL的数据传送到了HDFS&#xff0c;但…

【跟小嘉学 Rust 编程】二十三、Cargo 使用指南

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

四款简洁好看 自适应的APP下载单页源码

分享四款简洁好看 自适应的APP下载单页源码&#xff0c;采用了底部自动获取ICP备案号&#xff0c;还有蓝奏云文件直链解析。不光可以做APP下载引导页&#xff0c;也可以随便改下按钮做网站引导页&#xff0c;自由发挥即可&#xff01; 蓝奏云直链解析的好处&#xff1a;APP放在…

交换机之间用管理vlan互联,并用ACL进行管控的实例

交换机之间用管理vlan互联&#xff0c;用网管机可以对其进行运维&#xff0c; 拓朴描述&#xff1a; 网关起在S2上&#xff0c;管理vlan999&#xff0c;IP&#xff1a;1.1.1.1/30&#xff0c;lookback 0 地址用2.2.2.2/32当做外网接口IP S1上&#xff1a;管理vlan999&#x…

多线程与高并发——并发编程(3)

文章目录 三、锁1 锁的分类1.1 可重入锁、不可重入锁1.2 乐观锁、悲观锁1.3 公平锁、非公平锁1.4 互斥锁、共享锁2 深入synchronized2.1 类锁、对象锁2.2 synchronized的优化2.3 synchronized实现原理2.4 synchronized的锁升级2.5 重量级锁底层 ObjectMonitor3 深入ReentrantLo…

家政保洁行业小程序如何快速搭建

随着互联网的快速发展&#xff0c;家政保洁行业也逐渐向数字化转型。小程序作为一种轻量级应用&#xff0c;越来越成为各行各业进行线上推广的重要工具。那么&#xff0c;如何快速搭建家政保洁行业的小程序呢&#xff1f;本文将为你提供详细的步骤和指导。 一、准备开发环境 在…

合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)

容器 (Container) 容器是 lvgl 相当重要的一个控件了&#xff0c;可以设置布局&#xff0c;容器的大小也会自动进行调整&#xff0c;利用容器可以创建出自适应成都很高的界面布局。 代码示例 – 创建容器 cont lvgl.cont_create(lvgl.scr_act(), nil) lvgl.obj_set_auto_re…

第 3 章 栈和队列(用递归函数求解迷宫问题(求出所有解))

1. 背景说明&#xff1a; 若迷宫 maze 中存在从入口 start 到出口 end 的通道&#xff0c;则求出所有合理解并求出最优解 迷宫示意图&#xff1a; 输入文本&#xff1a; 10 10181 3 1 7 2 3 2 7 3 5 3 6 4 2 4 3 4 4 5 4 6 2 6 6 7 2 7 3 7 4 7 6 7 7 8 11 18 8 2. 示例代码…

Ae 效果:CC Threads

生成/CC Threads Generate/CC Threads CC Threads&#xff08;CC 编织条&#xff09;效果基于当前图层像素生成编织条图案和纹理。可以用在各种设计中&#xff0c;如背景设计、图形设计、文字设计等。 ◆ ◆ ◆ 效果属性说明 Width 宽度 设置编织的宽度。 默认值为 50。值越大…

【计算机组成 课程笔记】3.1 算数运算和逻辑运算

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 3 - 1 - 301-算术运算和逻辑运算&#xff08;13-7--&#xff09;_哔哩哔哩_bilibili 计算机的核心功能就是运算&#xff0c;运算的基本类型包括算数运算和逻辑运算。想要了解计算机是如何实现运算的&#xff0c;我…

linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf

问题&#xff1a;权限不对的 解决&#xff1a; 1.检查文件的所有者和权限。 确保文件的所有者是正确的。 运行以下命令来确定文件的所有者和权限&#xff1a; ls -l /etc/ssh/ssh_config.d/05-redhat.conf 通常情况下&#xff0c;SSH配置文件应该属于root用户。如果所有者不是…

HDLBits 练习 Always if2

Always if2 一个常见的错误&#xff1a;如何避免产生锁存器。 当设计一的电路的时候&#xff0c;你首先应该从电路的角度去思考。 我想要一个逻辑门我想要一个有着3和输入和3输出的组合逻辑电路。我想要一个后边跟着一个触发器的组合逻辑电路。 你必须不能先写代码&#xf…

VC++6.0下载安装使用教程

一、前言 微软原版的 VC6.0 已经不容易找到&#xff0c;网上提供的都是经过第三方修改的版本&#xff0c;删除了一些使用不到的功能&#xff0c;增强了兼容性。这里我们使用 VC6.0 完整绿色版&#xff0c;它能够支持一般的 C/C 应用程序开发以及计算机二级考试。 二、VC6.0 下…

设计模式大白话——适配器模式

适配器模式 概述示例适配器的种类小结 概述 ​ 适配器其实非常好理解&#xff0c;放到生活中来&#xff0c;我们身边处处都有这样的例子&#xff0c;最常见的是用的比较多的各种转接线&#xff08;如&#xff1a;USB 转 Type-C&#xff09;&#xff0c;有了这个“适配器”&…

基于 kube-vip 部署 kubernetes 高可用集群

kube-vip 简介 kube-vip 是一个开源项目&#xff0c;旨在简化为 Kubernetes 集群提供负载均衡服务。 kube-vip 为 Kubernetes 集群提供虚拟 IP 和负载均衡器&#xff0c;用于控制平面&#xff08;用于构建高可用集群&#xff09;和 Kubernetes 服务类型&#xff0c;而无需依赖…

智己 LS6 用实力和你卷,最强 800v ?

2023 成都车展期间&#xff0c;智己 LS6 正式公布预售价格&#xff0c;新车预售价为 23-30 万元。新车会在 10 月份进行上市&#xff0c;11 月正式交付。 此前我们对智己 LS6 做过非常详细的静态体验&#xff0c;感兴趣的可点击此链接了解。 造型方面&#xff0c;新车前脸相比…

CNN(六):ResNeXt-50实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 ResNeXt是有何凯明团队在2017年CVPR会议上提出来的新型图像分类网络。它是ResNet的升级版&#xff0c;在ResNet的基础上&#xff0c;引入了ca…