首页 > 其他分享 >InfluxDB:如何进行连接,数学测量

InfluxDB:如何进行连接,数学测量

时间:2023-06-08 20:08:34浏览次数:45  
标签:field ._ 测量 Th2 InfluxDB start Th1 measurement 连接


如果您是InfluxData社区的成员,那么您可能希望在某些时候跨测量执行数学运算。你做了一些谷歌搜索并偶然发现了这个GitHub问题3552并且流下了一滴小小的泪水。好吧,今天我成了好消息的承载者。InfluxData发布了Flux技术预览Flux是一种新的查询语言和时间序列数据引擎,它具有跨测量执行数学运算的能力。

在本文中,我将分享两个如何跨测量执行数学运算的示例:

  1. 如何计算每个请求写入数据库的行的批量大小。以下示例是探索测量数学的最快方法。您可以简单地启动并运行沙箱,然后复制并粘贴代码以自行尝试。
  2. 如何“监控”热交换器的效率随着时间的推移。您可以找到此部件的数据集和Flux查询位于此仓库中

要了解Flux的所有功能,请查看规范和配套文档

如何计算每个请求写入数据库的行的批量大小

克隆沙并运行后./sandbox up,您将使整个TICK堆栈以容器化方式运行。“telegraf”数据库包含从本地计算机收集的多个指标。要计算要收集和写入InfluxDB的度量的批量大小,我们需要找到随时间写入数据库的行数,并将该值除以同一时间段内的写入请求数。

首先,过滤数据以隔离所写的写请求数和写入的行数。将该数据分别存储在两个表中,“httpd”和“write”。

httpd = from(bucket:"telegraf/autogen") |> range(start: dashboardTime) |> filter(fn:(r) => r._measurement == "influxdb_httpd" and r._field == "writeReq")

InfluxDB:如何进行连接,数学测量_时间戳

write = from(bucket:"telegraf/autogen") |> range(start: dashboardTime) |> filter(fn:(r) => r._measurement == "influxdb_write" and r._field == "pointReq")

InfluxDB:如何进行连接,数学测量_数据库_02

接下来,加入两个表。在加入默认为左连接。最后,我们使用Map函数划分这两个值,并计算仪表板时间(-5m)的平均批量大小。

avg_batch_size = join(tables:{httpd:httpd, write:write}, on:["_time"]) |> map(fn:(r) => ({ _value: r._value_write / r._value_httpd})) |> mean()

InfluxDB:如何进行连接,数学测量_时间戳_03

我将可视化类型更改为“Table”,因为我的Flux脚本只返回一个值。我们可以看到过去5分钟的平均批量大小是〜62行/写。

旁注:虽然这个查询很简单,但效率很低。它仅用于演示目的。如果要查看较长时间范围内的平均批量大小,可能需要1)窗口httpd表和写表,2)分别计算平均值和最大值。做这样的事情将允许您在跨测量执行数学之前聚合数据,这将更快,更有效。

如何“监测”热交换器的效率随着时间的推移

在这个例子中,我决定想象我是化工厂的操作员,我需要监控逆流热交换器的温度。我从四个不同的温度传感器收集冷(TC)和热(TH)流的温度。有两个入口(Tc2Th1)传感器和两个出口(Tc1Th2)传感器在位置x1x2分别。

InfluxDB:如何进行连接,数学测量_时间戳_04

做了一些假设后,我可以用这个公式计算传热效率:

InfluxDB:如何进行连接,数学测量_数据_05

我在两个不同的时间从每个传感器收集温度读数,总共8个点。此数据集很小,仅用于演示目的。我的数据库结构如下:

数据库

测量

标签键

标记值

字段键

字段值

时间戳

传感器

Tc1,Tc2,Th1,Th2

位置

x1,x2

温度

总共8个

t1,t2

由于温度读数存储在不同的测量中,我再次应用JoinMap来计算效率。我在Chronograf中使用Flux编辑器和Table视图来显示所有结果。

首先,我想收集每个传感器的温度读数。我从Th1开始。我需要准备数据。我删除了“_start”和“_stop”列,因为我没有执行任何组或窗口。我可以删除“_measurement”和“_field”,因为它们对我的所有数据都是相同的。最后,我对基于“位置”的任何分析不感兴趣,所以我也可以放弃它。我将只对相同时间戳的值执行数学运算,因此我保留“_time”列。

Th1 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Th1" and r._field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”])

InfluxDB:如何进行连接,数学测量_数据库_06

现在我可以应用相同的查询Th2

Th2 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Th2" and r._field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”])

InfluxDB:如何进行连接,数学测量_数据_07

接下来,我加入了两个表。

TH = join(tables: {Th1: Th1, Th2: Th2}, on: ["_time"])

InfluxDB:如何进行连接,数学测量_数据_08

Join默认为左连接。tables:{Th1: Th1, Th2: Th2}允许您指定后缀的命名(相当于Pandas中的“rsuffix / lsuffix”或SQL中的“table.id”语法)。

我也将这个逻辑应用于冷流:

TC = join(tables: {Tc1: Tc1, Tc2: Tc2}, on: ["_time"])

InfluxDB:如何进行连接,数学测量_时间戳_09


接下来,我和TH一起加入TC。

join(tables: {TC: TC, TH: TH}, on: ["_time"])

InfluxDB:如何进行连接,数学测量_数据_10

最后,我可以使用Map来计算所有测量的效率。这就是代码一起看起来的样子:

Th1 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Th1" and r._field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”]) Th2 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Th2" and r. _field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”]) TH = join(tables: {Th1: Th1, Th2: Th2}, on: ["_time"]) Tc1 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Tc1" and r._field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”]) Tc2 = from(bucket: "sensors") |> range(start: dashboardTime) |> filter(fn: (r) => r._measurement == "Tc2" and r._field == "temperature") |> drop(columns:["_start", "_stop", "_measurement", "position", “_field”]) TCTH = join(tables: {Tc1: Tc1, Tc2: Tc2}, on: ["_time"]]) join(tables: {TC: TC, TH: TH}, on: ["_time"]) |> map(fn: (r) => (r._value_Tc2 - r._value_Tc1)/(r._value_Th1 - r._value_Th2)) |> yield(name: "efficiency")

InfluxDB:如何进行连接,数学测量_数据库_11

我可以看到传热效率随着时间的推移而降低。这是一个非常简单的Flux功能的例子,但它让我的想象力疯狂。我是否可以构建一个类似于仅使用OSS的DeltaV报警管理解决方案的监控和警报工具?可能不是,但我可以梦想有人可能。

如果您像我一样并且发现情境化和比较有用,我建议您阅读我即将进行的用户体验评论。在该评论中,我将Flux Joins与Pandas Joins进行了比较。Flux有一些特点。对我来说最明显的是|>管道前进。起初,我不喜欢它。我几乎从不使用烟斗和我的小拇指想到必须学习新的中风。现在,我发现它们大大提高了可读性。每个管道前进都返回一个结果。阅读Flux查询感觉就像阅读要点。

标签:field,._,测量,Th2,InfluxDB,start,Th1,measurement,连接
From: https://blog.51cto.com/u_16145034/6442596

相关文章

  • 总结vue3 的一些知识点:MySQL 连接的使用
    MySQL连接的使用在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。本章节我们将向大家介绍如何使用MySQL的JOIN在两个或多个表中查询数据。你可以在SELECT,UPDATE和DELETE语句中使用Mysql的JOI......
  • git服务器端安装并和客户端git连接
    接下来我们将以Centos为例搭建Git服务器。1、安装Git$yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develperl-devel$yuminstallgit接下来我们创建一个git用户组和用户,用来运行git服务:$groupaddgit$useraddgit-ggit2、创建证......
  • Kettle连接MySQL报错:Driver class 'org.gjt.mm.mysql.Driver' could not be found, ma
    在Windows系统里面安装kettle后打算连接MySQL的时候突然报错错误连接数据库[wanghui]:org.pentaho.di.core.exception.KettleDatabaseException:ErroroccurredwhiletryingtoconnecttothedatabaseDriverclass'org.gjt.mm.mysql.Driver'couldnotbefound,mak......
  • HDU - 5253 连接的管道 (卡鲁斯卡尔)最小生成树
    TimeLimit: 1000MS MemoryLimit: 32768KB 64bitIOFormat: %I64d&%I64uHDU-5253连接的管道Submit StatusDescription老Jack有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老Jack决定用管道将他的所有相邻的农田全部都串联起......
  • 如何设置Windows操作系统TIME_WAIT状态的TCP连接快速回收时间?
    大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(TransmissionControlProtocol)连接,操作系统默认TIME_WAIT的TCP连接回收时间是4分钟,TCP默认动态端口范围为开始端口49152,结束端口65535。这样会使回收TCP过慢导致系统吞吐量下降,甚至出现502访问失败问......
  • 如何优化拨号云主机的网络连接速度
    拨号云主机是一种基于拨号网络连接的云服务器,它与传统的有线、无线网络连接方式不同,需要通过调制解调器建立拨号连接,因此其网络连接速度相比其他云主机可能会较慢。为了优化拨号云主机的网络连接速度,下面将介绍几种有效的方法。1.选择合适的VPS提供商不同的VPS提供商提......
  • 1.3OpenFlow建立连接交互流程学习
    OpenFlow建立连接交互流程学习任务目的1、了解OpenFlow交换机与OpenFlow控制器建立TCP连接的过程。2、掌握配置安全通道中的OpenFlow版本的方法。3、掌握OpenFlow交换机和OpenFlow控制器的消息交互流程。任务环境设备名称软件环境(镜像)硬件环境控制器Ubuntu14.04......
  • 免密登录服务器,保持长连接
    环境:Ubuntu20.04背景每次登录服务器都需要输入密码,而且在本地终端中过了大概七八分钟,ssh连接就会断掉免密登录这里的密钥公钥生成默认你已经弄过,没有弄的自行谷歌一下。在本地终端中输入以下命令,修改细节可以参考下面的解释:ssh-copy-id-i~/.ssh/id_rsa.pubroot@ip......
  • gpio反转测量中断执行时间
    voidtxxx_gpio_pulse_opt_start(void){/*设置gpio输出低电平*//*设置gpio输出高电平*//*设置gpio输出低电平*/}voidtxxx_gpio_pulse_opt_runnnig(void){/*设置gpio输出高电平*//*设置gpio输出低电平*/} 初始化之前调用txxx_gpio_pulse_opt_start(),初始化后中断......
  • 各种数据库连接字符串
    SqlServer “DataSource=127.0.0.1;InitialCatalog=dbname;UserId=sa;Password=****;”Oracle"DataSource=127.0.0.1/dbname;port=1521;UserId=orcl;Password=***'*;"DB2"Server=127.0.0.1:50000;Database=dbname;UID=DBADM;PWD=****;"M......