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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言-内存分布(STM32内存分析)

C/C内存分布 一、内存组成二、静态区域文本段 &#xff08;Text / 只读区域 RO&#xff09;已初始化读写数据段&#xff08;RW data -- Initialized Data Segment&#xff09;未初始化数据段&#xff08;BSS -- Block Started by Symbol&#xff09; 三、动态区域堆&#xff08…

后端面试话术集锦第三篇:spring cloud 面试话术

这是后端面试集锦第三篇博文——spring cloud面试话术❗❗❗ 1. 什么是Springcloud Spring Cloud是一系列框架的集合,它利用Spring Boot的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。 他的设计目的是为了简化Spring应用的搭建和开发…

C++算法 —— 分治(2)归并

文章目录 1、排序数组2、数组中的逆序对3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 排序数组 排序数组也可以用归并排序来做。 vector<int> tmp;//写成全局是因为如果在每一次小的排序中都创建一次&#xff0c;更消耗时间和空间&#xff0c;设置成全局的就更高…

强大的思维导图库SimpleMindMap

本文软件是网友 Frank Yang 推荐的&#xff1b; 什么是 SimpleMindMap &#xff1f; Simple Mind Map 是一个简单、强大的 Web 思维导图库&#xff0c;不依赖任何特定框架&#xff0c;可以帮助你快速开发思维导图产品。同时 Simple Mind Map 也是一个思维导图软件。无论你是开发…

13.动态渲染侧边栏

为什么要动态渲染&#xff1f; 比如我们现在需要以下侧边栏的数据&#xff1a; 如果一个个的去写标签会很麻烦&#xff0c;发现导航栏中的数据分为两类&#xff0c;一类是一级导航&#xff0c;另一位是二级导航&#xff08;有子页&#xff09;&#xff0c;因此直接写两个函数判…

MVC模式分层练习

新建库 新建表 插入点数据 先不用MVC模式写功能,来看下缺点是什么 新建一个空项目 选项项目使用的JDK 自己的IDEA总是要重启下 新建模块 因maven还没教 添加框架支持 添加后项目多了这些 添加些必要依赖 这里注意下,如果导入jar包不对可以重新导入下或者是jar包本身出了问…

中东 Shopify 如何使用 Bytebase 构建一站式数据库开发工作流

公司简介 Salla 是一家 2016 年成立&#xff0c;位于沙特麦加的自建站电商平台。 作为中东 Shopify&#xff0c;其最大的特点是支持阿拉伯语建站&#xff0c;并且提供更多适应中东地区特点的本地化服务。截止目前&#xff0c;已有 47,000 家店铺入驻 Salla&#xff0c;商品销售…

已解决‘jupyter‘ 不是内部或外部命令,也不是可运行的程序或批处理文件报错

本文摘要&#xff1a;本文已解决‘jupyter‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的相关报错问题&#xff0c;并系统性地总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲…

C++--动态规划其他问题

1.一和零 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0…

ubuntu学习(六)----文件编程实现cp指令

1 思路 Linux要想复制一份文件通常指令为&#xff1a; cp src.c des.c 其中src.c为源文件&#xff0c;des.c为目标文件。 要想通过文件编程实现cp效果&#xff0c;思路如下 1 首先打开源文件 src.c 2 读src到buf 3 创建des.c 4 将buf写入到des.c 5 close两个文件 2 实现 vi …

容器技术Linux Namespaces和Cgroups

对操作系统了解多少&#xff0c;仅仅敲个命令吗 操作系统虚拟化&#xff08;容器技术&#xff09;的发展历程 1979 年&#xff0c;UNIX 的第 7 个版本引入了 Chroot 特性。Chroot 现在被认为是第一个操作系统虚拟化&#xff08;Operating system level virtualization&#x…

如何在 Vue TypeScript 项目使用 emits 事件

Vue是构建出色的Web应用程序的最灵活、灵活和强大的JavaScript框架之一。Vue中最重要的概念和关键特性之一是能够促进应用程序组件之间的通信。让我们深入探讨一下Vue中的“emits”概念&#xff0c;并了解它们如何以流畅和无缝的方式实现父子组件之间的通信。 Vue中的emits是什…

工控上位机程序为什么只能用C语言?

工控上位机程序并不只能用C#开发&#xff0c;实际上在工业自动化领域中&#xff0c;常见的上位机开发语言包括但不限于以下几种&#xff1a;C#: C#是一种常用的编程语言&#xff0c;在工控领域中被广泛使用。它具有良好的面向对象特性和丰富的类库支持&#xff0c;可以实现高性…

艾昆纬携手亚马逊云科技赋能生物医药企业,加速武田数字化转型

IQVIA艾昆纬是全球以及中国医疗健康服务领域的领导者&#xff0c;利用其数据及分析&#xff0c;前沿数字化技术和医疗领域的专业知识&#xff0c;智能连接医疗生态的各个环节。过去几年&#xff0c;IQVIA艾昆纬所服务的生物医药行业客户武田中国也迎来了数字化转型的高潮。 武田…

习题练习 C语言(暑期第三弹)

自我小提升&#xff01; 前言一、存储地址二、逗号表达式三、除自身以外数组的乘积四、字节与二进制五、符号计算六、不用加减乘除做加法七、unsigned判断八、移位计算九、sizeof宏十、移位计算十一、移位计算十二、优先级判断十三、单词倒排总结 前言 重要的事说三遍&#xf…

工厂方法模式的概述和使用

目录 一、工厂方法模式概述1. 定义2. 使用动机 二、工厂方法模式结构1. 模式结构2. 时序图 三、工厂方法模式的使用实例四、工厂方法模式的优缺点五、工厂方法模式在Java中应用 原文链接 一、工厂方法模式概述 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式&…

python3+requests:接口自动化测试(二)

前言&#xff1a;上篇文章python3requestsunittest&#xff1a;接口自动化测试&#xff08;一&#xff09;&#xff1a;已经介绍了基于unittest框架的实现接口自动化&#xff0c;但是也存在一些问题&#xff0c;比如最明显的测试数据和业务没有区分开&#xff0c;接口用例不便于…

禅道项目管理系统 - 操作使用 (2023版)

1. 部门-用户-权限 新增部门 新增用户 设置权限 2. 项目集创建 项目集 - 添加项目集 3. 产品线创建 产品 - 产品线 4. 产品创建 产品 - 产品列表 - 添加产品 5. 产品计划创建 产品 - xx产品 - 计划 - 创建计划 我这里创建3个计划 (一期, 二期, 三期) 6. 研发需求 - 创建模块…

设计模式-中介者模式

文章目录 一、前言二、中介者模式1、定义2、未使用/使用中介者模式对比2.1、未使用中介者模式&#xff1a;2.2、使用中介者模式&#xff1a; 3、角色分析3.1、中介者&#xff08;Mediator&#xff09;&#xff1a;3.2、同事&#xff08;Colleague&#xff09;&#xff1a;3.3、…

Springboot2.0 上传图片 jar包导出启动(第二章)

目录 一&#xff0c;目录文件结构讲解二&#xff0c;文件上传实战三&#xff0c;jar包方式运行web项目的文件上传和访问处理&#xff08;核心知识&#xff09;最后 一&#xff0c;目录文件结构讲解 简介&#xff1a;讲解SpringBoot目录文件结构和官方推荐的目录规范 1、目录讲解…