标签: influxql

InfluxDB Flux - 过滤字段与值匹配的位置

我将InfluxDBGrafana结合使用,并且有一个名为 的测量,items其中包含一些标签和一个名为 的字段itemType。我需要过滤itemType某个字符串所在的行。以下 InfluxQL 查询正是我所需要的:

SELECT * FROM "items" WHERE "itemType" = 'example'
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Flux中做同样的事情?

我目前有以下查询,它执行除按字段过滤之外的所有操作:

from(bucket: "dbname/autogen")
    |> range(start: 2020-10-12T01:56:34Z, stop: 2020-10-12T02:54:10Z)
    |> filter(fn:(r) => r._measurement == "items")
    |> aggregateWindow(every: 5m, fn: count)
Run Code Online (Sandbox Code Playgroud)

但是用 替换该filter函数filter(fn:(r) => r._measurement == "items" and r.itemType == "example")不会返回任何结果,即使上面的 InfluxQL 查询在 InfluxDB CLI 中使用时确实返回数据。

influxdb influxql

9
推荐指数
1
解决办法
2万
查看次数

合并influxdb中的不同粒度时间序列

我想存储交易以及最佳要价/出价数据,后者在InfluxDB中的更新速度比前者快得多。

我想,如果可能的话,使用一种允许我查询的模式:“对于市场X上的每笔交易,找到其时间标记<=该交易的时间标记的市场Y上的最佳要价/出价”。

(我将使用任何版本的Influx。)

例如,交易可能看起来像这样:

   Time      Price     Volume   Direction   Market
00:01.000     100        5          1       foo-bar
00:03.000     99         50         0       bar-baz       
00:03.050     99         25         0       foo-bar
00:04.000     101        15         1       bar-baz
Run Code Online (Sandbox Code Playgroud)

刻度数据可能更像这样:

   Time       Ask        Bid     Market
00:00.763     100         99    bar-baz
00:01.010     101         99    foo-bar
00:01.012     101         98    bar-baz
00:01.012     101         99    foo-bar
00:01:238     100         99    bar-baz
...
00:03:021     101         98    bar-baz
Run Code Online (Sandbox Code Playgroud)

我希望能够以某种方式加入某个市场(例如foo-bar)的每笔交易,而只有其他市场(例如bar-baz)上的最新卖/卖点数据点,才能得到如下结果:

   Time      Trade Price    Ask     Bid
00:01.000        100        100      99
00:03.050        99         101      98
Run Code Online (Sandbox Code Playgroud)

这样我就可以计算出市场foo-bar上的交易价格与最新报价的市场 …

database influxdb influxql influxdb-2

6
推荐指数
1
解决办法
63
查看次数

在组织 InfluxDB 数据库时,这两种方法中的哪一种最受青睐?

我试图决定如何在 InfluxDB 数据库中组织测量(我相信他们称之为架构设计和数据布局),但我认为这可能是一个更一般的数据库类型问题。

举一个简单的例子,我正在测量两个数量,温度湿度(我知道是有想象力的!),在两个位置,客厅室外

InfluxDB 具有插入数据点的语法

测量, tag_key=tag_value field_key=field_value

所以有两个明显的(至少对我而言)选择。简而言之,第一个选项将插入这样的数据点:

INSERT temperature,location=outside value=15
INSERT humidity,location=outside value=50
Run Code Online (Sandbox Code Playgroud)

而第二种选择会这样做:

INSERT sensor_measurements,location=outside temperature=15,humidity=50
Run Code Online (Sandbox Code Playgroud)

我的问题更高级:

  • 有没有首选/接受的方法来解决这个问题?
  • 如果我尝试将其扩展到更多数量/位置/数据类型,我会遇到其中任何一个问题吗?
  • 例如,如果我稍后尝试在 Grafana 中绘制这些内容,或者如果我稍后尝试实现许多InfluxQL 函数中的一些,这两种方法中的任何一种是否都具有优势?
  • 有没有人对此有任何一般建议?

我个人的想法:

在我看来,选项 1 更像是 InfluxDB 描述“测量”所暗示的内容。温度和湿度都是独立的量。但仅仅称其为“价值”似乎有点笨拙。

选项 2 似乎具有以下优势:湿度和温度共享完全相同的时间戳。这将很有用,例如,如果我想将数据导入其他软件并在两个数量之间进行关联,这意味着我不必进行任何插值或分箱来使它们匹配。

我不确定在选项 2 中只进行一个名为sensor_measurements的一般测量是否是一个坏主意,并且以后很难维护。

详细:


选项1

  • 对每个温度湿度进行单独的“测量” ,将位置用作“标签”,并将“字段”命名为

在时间t1,插入数据:

INSERT humidity,location=outside value=50
INSERT temperature,location=outside value=15
INSERT humidity,location=living_room …
Run Code Online (Sandbox Code Playgroud)

sql influxdb grafana influxql

6
推荐指数
1
解决办法
237
查看次数

Influxdb GROUP BY时间在错误的时间间隔或存储桶上聚合数据

最近,我们在InfluxDB的GROUP BY时间上面临一个非常烦人的问题。事实证明,如果我们尝试汇总每30天的数据,则InfluxDB会通过意外的时间段来汇总我们的数据。

例如以下查询:

SELECT COUNT(user_id) AS result FROM measurement1 WHERE time > '2017-12-31 23:59:59' AND time < '2019-01-01 23:59:59' GROUP BY time(30d) FILL(0);
Run Code Online (Sandbox Code Playgroud)

然后我们得到以下响应(以毫秒为单位的时间):

time                result
----                ------
1513728000000000000 0
1516320000000000000 0
1518912000000000000 0
1521504000000000000 0
1524096000000000000 0
1526688000000000000 0
1529280000000000000 0
1531872000000000000 0
1534464000000000000 4
1537056000000000000 1
1539648000000000000 0
1542240000000000000 0
1544832000000000000 0
Run Code Online (Sandbox Code Playgroud)

好了,将时间转换为正常日期后,我们发现返回的时间间隔是20/12 / 17、19 / 01/18到15/12/18(每30天)。

据我了解,聚合点是由influxdb根据时间上的第一个值(GROUP BY time(value))预先定义的。它甚至在文档中被提及,但规模更小-“预设时间边界”。但是,这些示例处理的是分钟和1天的汇总,并且可以通过offset参数轻松修复,因为这些标度的默认汇总间隔为午夜。

很好,但是在这里我们要处理很多天。在我们的例子中,我们无法使用offset参数,因为我们无法知道GROUP BY返回的时间间隔。

是否有任何源/公式/算法或任何东西可以帮助我们预测这些时间间隔,以便我们可以对它们进行抵消?如果没有这样的东西,那我们该如何克服这个问题呢?

我猜这一切的原因是性能,但是很奇怪的是,在他们的文档中没有提到此问题,因为这不是一种直观的行为。

编辑:我想我发现潮汐如何确定这些时间间隔-它总是从0个时代开始。如果是这样,那么我们可以在拍摄查询之前根据需要使用偏移量。我希望将其添加到他们的文档中,因为这可以为其他人节省大量时间,并且可以确认下一个版本中不会有重大更改。

time group-by influxdb influxql

5
推荐指数
0
解决办法
425
查看次数

与 InfluxQL 相比,flux 查询非常慢(慢 10 倍)

我正在将 influx1.x 升级到 influx2.x (将查询从 influxQL 更新为 Flux 语法)。对于非常简单的查询,当我尝试查询超过 500,000 个点时,性能会急剧下降,并且我不确定是否可以采取任何措施来改进查询以获得更好的性能

涌入QL:

select last("y") AS "y" from "mydata".autogen."profile" 
WHERE time >= '2019-01-01T00:00:00Z' and time <= '2019-01-07T23:59:59Z' 
GROUP BY time(1s) FILL(none)
Run Code Online (Sandbox Code Playgroud)

通量:

data=from(bucket: "mydata")
|> range(start: 2019-01-01T00:00:00Z, stop: 2019-01-07T23:59:59Z)
|> filter(fn: (r) => r._measurement == "profile")
|> filter(fn: (r) => r._field=="y")
|> aggregateWindow(every: 1s, fn: last, createEmpty: false)
|> yield()
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

influxdb influxdb-python influxql influxdb-2 flux-influxdb

5
推荐指数
1
解决办法
2386
查看次数

使用 Flux 查询基于组查找总和 - InfluxDB

我正在尝试使用 Flux 查询语言来查找基于一个人的列的总和。如果我有以下输入表:

在此输入图像描述

如何使用 Flux 查询来获取以下输出表:

在此输入图像描述

到目前为止,我已经尝试过类似的操作,但出现错误:

from: (bucket: "example")
  |> range(start:v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r)=> r["_measurement"] == "test")
  |> group(columns: r["person"])
  |> reduce( fn: (r, accumulator) => ({sum: r._value + accumulator.sum}), identity: {sum: 0})
Run Code Online (Sandbox Code Playgroud)

mysql influxdb grafana influxql flux-influxdb

4
推荐指数
1
解决办法
9525
查看次数

使用InfluxDB差异函数

我的 influxdb 数据库中有一些测量数据,我可以通过以下方式查询:

select * from E_real_con
名称:E_real_con
时间值
---- -----
1537920001044785525 | 57160036.00
1538006401069651036 | 57227208.00
1538092800108297103 | 57294112.00
1538179200697333731 | 57366108.00

但是,“值”是一个累积值,我想获取两个连续值之间的增量/差值。

我尝试了以下方法:

SELECT difference(last(value)) FROM E_real_con WHERE time >= now() - 7d GROUP BY time(1d) fill(null)
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

ERR: unsupported difference iterator type: *query.stringInterruptIterator
Run Code Online (Sandbox Code Playgroud)

我很乐意获得一些如何解决我的问题的提示和反馈。

我正在使用 influxdb 1.6.1

多谢!克里斯托夫

influxdb influxql

3
推荐指数
1
解决办法
8610
查看次数

获取测量的标签值 - influxDB

我正在尝试获取给定测量的标签值。我在 influxDB 中进行了测量,如下所示。

> select * from "EVENT_LIVE"
name: EVENT_LIVE
time                GROUP_ID      COUNT
----                ------------- ---------
1531008000000000000 84            2
1531008000000000000 9             8
1532822400000000000 249           1
1534636800000000000 43            1
1534636800000000000 68            1
1535241600000000000 13            13
1535241600000000000 18            4
1535241600000000000 205           2
1535241600000000000 21            6
1535241600000000000 214           1
1535241600000000000 23            1
1535241600000000000 238           1
1535241600000000000 249           1
1535241600000000000 282           14
1535241600000000000 29            1
1535241600000000000 316           3
1535241600000000000 32            13
1535241600000000000 41            7
1535241600000000000 43            1
1535241600000000000 6             1
Run Code Online (Sandbox Code Playgroud)

此处测量的名称是EVENT_LIVEGROUP_ID …

influxdb influxql

3
推荐指数
1
解决办法
9193
查看次数

influxdb查询时如何写case?

我有一个Grafana + InfluxDB + Telegraf设置来监控我组织的服务器。我想制作一个仪表板,在其中监视多个服务器的计算机资源,例如 CPU、RAM 等。我想在 Grafana 仪表板中,如果我的服务器处理器高于 80%,则仅显示“0”;如果服务器处理器低于 80%,则显示“1”。为此,我如何使用CASE WHEN语句根据我设置的阈值显示 0/1。

influxdb grafana telegraf influxql

1
推荐指数
1
解决办法
8677
查看次数