(七)FLUX查询InfluxDB

news2024/11/24 16:34:42

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦!

第 7 章 FLUX查询InfluxDB

7.1 前言

1、本节内容较为重要

7.2 FLUX查询InfluxDB的语法

1、使用FLUX语言查询InfluxDB,必须以from -> range打头。range必须紧跟在from后面,不这么写的话会直接报错。

2、例如:

from(bucket: "test_init")
|> range(start: - 1 h)

7.3 表、表流以及序列

1、我们知道InfluxDB是使用序列的方式去管理数据的。而FLUX语言又企图兼容一些关系型数据库的查询,而关系型数据库里的数据结构就是一个有行有列的 table。因此对于FLUX语言来说,就需要将序列和表统一成一个东西。所以FLUX引入了表流的概念。简单来说,FLUX可以一次性查出多个序列,这个时候一个序列对应一张表,而表流其实就是多张表的集合。同时表流和表的关系其实是全表和子表的关系,子表是全表按照_field,tag_set和_measurement进行group by之后的结果。在这种情况下,如果调用聚合函数,其实只会在子表中进行聚合。

在这里插入图片描述
2、最后,如果一张表对应的是一个序列了,那么一张表里的一行其实就对应着序列中的一个数据点了。

7.4 filter维度过滤

1、使用filert函数可以对数据按照_measurement、标签集和字段级进行过滤,后面的课程会给大家讲解filter的性能问题。

7.5 类型转换函数与下划线字段

1、Flux语言中有很多不用指定字段名称的管道函数,比如toInt()。其实toInt()这个函数默认要求你的字段中必须要有_value字段,没有_value字段的话也会直接报错。

2、其实在我们查询出来的数据中,以下划线开头的字段其实代表了一种约定,就是FLUX中有很多函数想要正常运行时要依赖于这些下划线打头的字段的。所以原则上来说,程序员应该遵守这些约定,不要擅自更改下划线开头的字段。

7.6 map函数

1、map函数的作用是遍历表流中的每一条数据。

2、示例:

import "array"
a rray.from(rows: [{"name":"tony"},{"name":"jack"}]) |> map(fn: (r)=> {

return if r["name"] == "tony" then {"_name": "tony不是jack"} else {"_name":"jack不是tony"}
})

3、这里需要注意,map函数需要我们传递一个参数 fn,它要求传递一个单个参数输入,且输出必须是record的函数,其中输入数据的类型会是record。

7.7 自定义管道函数

1、此处,我们定义一个管道函数,它可以将表流中的_value字段的值乘上x倍。大家在接下来的示例中注意声明管道函数时所用的语法。

big100 = (table=<-,x) => {
return table |> map(fn: (r) => ({ (^) r with "_value":r["_value"]*x}))}接下来我们调用刚才声明的函数,最终整个脚本如下:big 100 = (table=<return table - ,x) => {|> map(fn: (r) => ({r with "_value":r["_value"]*x}))
}
from(bucket: "test_init")
|> range(start: -1h)
|> filter(fn: (r) => r["_measurement"] == "go_goroutines")
|> big100(x:100.00)

2、可以自行运行查看函数效果。这里需要强调的是,管道函数的第一个参数必须写成table=<-,它表示通过管道符输入进来的表流数据,需要注意,table并不一定写成table但是=<-的格式绝对不能变。

7.8 在文档中区分管道函数和普通函数

1、再次来到函数文档。

在这里插入图片描述

2、当我们看到一个函数文档,它会有一个区域叫做Function type Signature(函数签名),它表示着函数接收哪些参数以及会返回什么。最前面的小括号里的内容就是参数列表,如果参数列表的第一个参数是<-tables: stream[A],那就表示它是一个可以接收表流输入的管道函数。反之,如果没有<-tables: stream[A],那么它就是一个普通函数。

7.9 window和aggregateWindow函数

1、window函数和aggregateWindow函数其实代表着InfluxDB中的两种开窗方式,两者不同的地方在于,window函数会将整个表流重新分组。window开窗后,是按照序列+窗口的方式对整个表流进行分组。但是 aggregateWindow函数会保留原来的分组方式,这样一来,使用aggregateWindow函数进行开窗后的表流,仍然是按照序列的方式来分组的。

7.10 yield和join

1、当flux脚本中出现未被赋值给某个变量的表流时,InfluxDB执行FLUX脚本时会自动帮他们在管道的最后面加上|> yield(name: “_result”)函数,yield函数其实是指定了我们当前这个表流是整个 FLUX脚本最后返回的结果,而且这个结果的名字叫"_result"。当FLUX脚本中出现多个为赋值给变量的表流时,给多个表流自动补上|>yield(name:“_result”)就会出问题了,这是因为当有多个表流后面都有|>yield时,其实相当于一个FLUX脚本会返回多个结果。但是此处要求名称是不能重复的,所以当有多个未赋值的表流时,就必须显示指定yield(name:“xxx”),而且名称千万不可重复。

2、但是,在一个FLUX脚本里同时返回多个结果集并不是推荐的操作,这通常会让程序的逻辑变的很奇怪,我们之所以能在一个FLUX脚本里面写多次from函数,其实是为了方便我们进行join的。

3、再但是,我并不建议在FLUX脚本中使用join操作,这必须要谈到FLUX脚本的常见使用场景,就是每隔一段时间进行一次查询。如果这个时候,我用一个from从InfluxDB中查询数据,其中有code=01等机器编号信息。然后我再用一个from去查询mysql,得到一张机器的属性表。接下来对两张表进行 join,这在逻辑上很合理,但最大的问题就是FLUX脚本无法实现数据的缓存。如果我这个FLUX脚本是每 15 秒执行一次,那就会导致我们需要每 15 秒要去mysql上全表扫描一遍机器信息表,效率十分低下。

4、个人建议仅使用FLUX进行简单的查询,然后在应用层的程序里进行join操作。因此,本系列文章并不讲解FLUX语言的join操作。

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

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

相关文章

AbstractMethodError: com.xx.serviceImpl.xxx method is abstract

今日一语&#xff1a; 其实我们没有必要和其他人进行比较&#xff0c;我们要比较的是昨天的自己 只有这样才能得到救赎和解脱&#xff0c;否则就是泥潭中跳跃&#xff0c;山谷中呐喊 在翻阅其他博主的博客时&#xff0c;似乎大多分享的是因为数据源驱动或者中间件的版本太高或者…

SpringCloud - 狂神学习笔记

1. 常见面试题 1.1 什么是微服务&#xff1f; 1.2 微服务之间是如何独立通讯的&#xff1f; 1.3 SpringCloud 和 Dubbo有那些区别&#xff1f; 1.4 SpringBoot 和 SpringCloud&#xff0c;请谈谈你对他们的理解 1.5 什么是服务熔断&#xff1f;什么是服务降级&#xff1f;…

微调模型来完成热狗识别的图像分类任务

我们来实践一个具体的例子&#xff1a;热狗识别。将基于一个小数据集对在ImageNet数据集上训练好的ResNet模型进行微调。该小数据集含有数千张热狗或者其他事物的图像。我们将使用微调得到的模型来识别一张图像中是否包含热狗。 首先&#xff0c;导入实验所需的工具包。 impo…

“铸网-2023” | 持续保障江西省实网应急演练

​​日前&#xff0c;由江西省工业和信息化厅主办&#xff0c;江西省网络安全研究院承办&#xff0c;南京赛宁信息技术有限公司协办并提供全程技术支撑的“铸网-2023”江西省工业领域网络安全实网应急演练在江西南昌圆满收官。 一、应急演练43天 赛宁持续助推工业企业应急能力…

论文精度系列之详解图神经网络

论文地址:A Gentle Introduction to Graph Neural Networks 翻译:图表就在我们身边;现实世界的对象通常根据它们与其他事物的连接来定义。一组对象以及它们之间的连接自然地表示为图形。十多年来&#xff0c;研究人员已经开发了对图数据进行操作的神经网络&#xff08;称为图神…

二叉树题目:从根到叶的二进制数之和

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;从根到叶的二进制数之和 出处&#xff1a;1022. 从根到叶的二进制数之和 难度 3 级 题目描述 要求 给你二叉树…

vue权限按钮的实现

鉴权函数 由于下面几种方式都需要用到鉴权函数&#xff0c;所以将其放置在组件外面&#xff0c;供组件或其他文件调用。 // src/utils/hasPermission.jsimport { usePermissionStore } from /stores import array from lodash/array export const hasPermission (value, def…

火车头采集文章批量伪原创【php源码】

火车头采集是一款基于Python语言开发的网络爬虫工具&#xff0c;用于快速高效地从互联网上采集数据并存储到本地或远程数据库。它简单易用且功能强大&#xff0c;在各行各业广泛应用。 火车头采集器AI伪原创PHP源码&#xff1a; <?php header("Content-type: text/h…

C# WPF项目创建(基于VS 2019介绍)

1.打开VS&#xff0c;选择《创建新项目》 2.选择《WPF应用程序》&#xff0c;如图 3. 项目名称根据需求自行命名&#xff0c;这边以“WpfApp1”来命名&#xff0c;位置自行选择&#xff0c;这边选择了"E:\test"&#xff0c;如图所示&#xff0c;“将解决方案和项目…

【广州华锐互动】VR模拟灭火逃生体验系统

VR模拟灭火逃生体验系统由广州华锐互动开发&#xff0c;是一种基于虚拟现实技术的应急演练与培训系统&#xff0c;可以真实模拟消防逃生场景&#xff0c;让体验者在沉浸式的虚拟环境中&#xff0c;根据正确的消防逃生方法提示&#xff0c;进行自救演练。这种科学普及方法是更加…

datafree KD CVPR2023 学习笔记(Abstract)

这个 是摘要的前部分 摘要 简单的提及 无数据的蒸馏 是怎么样的 和普通的蒸馏有一个本质的区别&#xff1a;没有训练数据 很火啊 最近 在对抗性的蒸馏框架中呢 存在一个问题 由于多个生成器生成的 非平稳分布的pseudo-samples 导致了学生网络的性能不好 提出一个解决方案的i…

Docker——数据管理与网络通信

Docker——数据管理与网络通信 一、Docker 的数据管理1&#xff0e;数据卷2&#xff0e;数据卷容器 二、端口映射三、容器互联&#xff08;使用centos镜像&#xff09;四、Docker 镜像的创建1&#xff0e;基于现有镜像创建1.1 首先启动一个镜像&#xff0c;在容器里做修改1.2 然…

如何搭建使用dubbo-Admin?

dubbo-Admin介绍 一款用于dubbo可视化界面操作的管理平台 dubbo-Admin特点 dubbo-Admin是dubbo的管理界面平台&#xff0c;且是一个前后端分离的项目&#xff0c;前端使用vue&#xff0c;后端使用springboot。 软件下载 dubbo-admin-0.5.0.zip 软件使用

Java文件的相对路径规则

前言 最近做项目&#xff0c;又涉及到Linux Java文件的相对路径&#xff0c;但是相对路径在不同的服务器或者docker上居然不一样&#xff0c;这个就很难受&#xff0c;只能用绝对路径解决&#xff0c;因为绝对路径是固定的路径&#xff0c;但是相对路径为什么会在不同的服务器…

将pdf转换成word怎么转换?掌握这几个转换方法就够了

将pdf转换成word怎么转换&#xff1f;将 PDF 转换成 Word 文档是一个常见的需求&#xff0c;我们需要编辑 PDF 文件中的文字内容&#xff0c;但是 PDF 文件并不方便直接编辑。下面介绍几个转换方法。 方法一&#xff1a;使用迅捷 PDF 转换器 这是一款专业的 PDF 转换工具&…

【2023】HashMap详细源码分析解读

前言 在弄清楚HashMap之前先介绍一下使用到的数据结构&#xff0c;在jdk1.8之后HashMap中为了优化效率加入了红黑树这种数据结构。 树 在计算机科学中&#xff0c;树&#xff08;英语&#xff1a;tree&#xff09;是一种抽象数据类型&#xff08;ADT&#xff09;或是实作这种…

2023年深圳杯数学建模 D题 基于机理的致伤工具推断

致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同&#xff0c;相同的致伤工具在人体组织上会形成不同的损伤形态&#xff0c;不同的致伤工具也可能形成相同的损伤形态。致伤工具品种繁多、形态各异&#xff0c;但大致可分为两类&#xff1a;锐器&…

结构体——位段

//结构体--位段 &#xff08;位 指二进制位 &#xff09; // 位段的声明与结构体是类似的 // 1&#xff0c;位段的成员必须是 int &#xff0c;unsigned int 或 signed int // 2&#xff0c;位段的成员名后边有一个冒号和一个数字。&#xff08;数字表示开辟需要的比特位个数&a…

【【51单片机的温度识别】】

51单片机的温度识别 这么热的天&#xff0c;再离我远一点 DS18B20温度读取 温度报警 我们这里对于单总线 也仿照I2C 总线的模样 以下是我们实现的onewire.c文件 #include <REGX52.H> //第一步从原理图触发先定义端口sbit OneWire_DQP3^7;//第一步初始化unsigned char…

商城-学习整理-基础-前端(四)

目录 一、技术栈介绍二、ES61、简介2、什么是ECMAScript3、ES6 新特性1、let 声明变量2、const 声明常量&#xff08;只读变量&#xff09;3、解构表达式1&#xff09;数组解构2&#xff09;对象解构 4、字符串扩展1&#xff09;、几个新的 API2&#xff09;、字符串模板 5、函…