当前位置: 首页 > news >正文

FLUX查询InfluxDB -- InfluxDB笔记三

1. 入门

from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -1h) // |>是管道符,后跟筛选条件

2. 序列、表和表流

序列是InfluxDB的概念,一个序列是由measurement、标签集、一个字段名称

表流是FLUX为了兼容关系型数据库和InfluxDB创造的概念

上图整体是表流,table 0、1是FLUX的两张表,对应InfluxDB的两个序列(rate、temp)

图上列名下的GROUP和NO GROUP :通过_measure、_field、code将表分组为多个子表、序列;通过Flux查询时,默认通过这三列分组

max() 最大值

        |> max() // 返回结果是每个序列各一行,值为最大值

 filter 过筛选滤
from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -4h) // |>是管道符,后跟筛选条件,过去4小时|> filter(fn: (r) => (r:["_measurement"]=="people"))// 筛选测量名称(表名)为people的数据|> filter(fn: (r) => (r:["code"]=="02"))// 筛选标签code为02的数据

  |> filter(fn: (r) => (r:["_measurement"]=="people", onEmpty: "keep"))// onEmpty会让返回的table序号返回未用过的序号,比如数据存储用到0、1、2、3,则会返回4、5

_value类型不同,查询结果会分开,导致数据处理出错。一般加筛选条件过滤,来统一类型

toInt()  

将查询结果的_value类型转为Long类型

原始带下划线的字段会与函数有一些约定,像_value/_time,缺失导致一些函数无法使用。

 map函数
import "array"
// map函数,遍历表流里面的每一条数据
array.from(rows: [{"name": "tony"}, {"name": "jack"}])|> map(fn: (r) => {return if r["name"] == "tony" then {"_name": "tony不是jack"} else {"_name": "jack不是tony"}
})
自定义管道函数
// 只能处理流数据,<-是管道函数的标识,table=<-就是流的占位符,调用时无需传入,如toInt()
big100 = (table=<-, x = 100.0) => {return table|> map(fn: (r) => ({r with "_value": r["_value"] * x}))
}from(bucket: "test_init")|> big100(x: 200.0)
开窗 | window和aggregateWindow

// 30s的开窗,改变了原有序列,把整个表流 按照窗口 重新分配(查询结果会出现序号远大于原有序号)

   |> window(period: 30s)

// 30s的开窗,不会改变原有序列,必须要指定一个函数

  |> aggregateWindow(period: 30s, every: 30s, fn: max)

yield和join

默认返回一个_result,如果想要实现同时返回多个表,需要使用yield来区分,否则会报错

yield主要是为了支持join(.full/.inner/.left/.right/.tables/time),但是不建议使用。建议使用java等语言来处理join的逻辑 (因为InfluxDB不支持缓存,建议使用redis来缓存)

from(bucket: "example_test01")|> range(start: -4h)|> yield(name: "tom")from(bucket: "example_test02")|> range(start: -4h)|> yield(name: "jack")
http://www.lryc.cn/news/159097.html

相关文章:

  • pico学习进程记录已经开发项目
  • C++(20):多重继承与虚继承
  • Vue + Element UI 前端篇(一):搭建开发环境
  • 系统错误码指示确立+日志模块手动配置
  • Java入门第三季
  • 【linux命令讲解大全】056.updatedb命令:创建或更新slocate数据库文件
  • 查看视频文件关键帧间隔
  • 如何在mac上安装多版本python并配置PATH
  • GPT-人工智能如何改变我们的编码方式
  • 混淆技术研究-混淆技术简介(1)
  • HTML5+CSS3+JS小实例:科技感满满的鼠标移动推开粒子特效
  • 某物联网数智化园区行业基于 KubeSphere 的云原生实践
  • MySQL查询数据库所有表名及其注释
  • 8月31日-9月1日 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)
  • Oracle RAC 删除CRS集群配置失败
  • Kafka3.0.0版本——消费者(消费者总体工作流程图解)
  • MacOS 为指定应用添加指定权限(浏览器无法使用摄像头、麦克风终极解决方案)
  • Mysql 流程控制
  • Java学习笔记之----I/O(输入/输出)二
  • 2024字节跳动校招面试真题汇总及其解答(一)
  • 【Nginx23】Nginx学习:响应头与Map变量操作
  • 前端代理报错Error occured while trying to proxy to: localhost:端口
  • QT DAY6
  • Slint学习文档
  • 【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法
  • 蓝桥杯练习题(3的倍数)
  • 安装Qe-7.2细节
  • 3.运行项目
  • 【算法题】2651. 计算列车到站时间
  • Mybatis传递实体对象只能直接获取,不能使用对象.属性方式获取