首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WHERE子句中的InfluxDB子查询

WHERE子句中的InfluxDB子查询
EN

Stack Overflow用户
提问于 2022-06-14 21:34:52
回答 1查看 135关注 0票数 1

有一些问题把我的大脑围绕着这个问题。我在InfluxDB 1.8.x中有两个表,下面是相关的数据布局

代码语言:javascript
复制
table a
-------------------------------------------
|time               |hostname|device_cache|
|6/14/2022 9:00:30PM|device1 |dm-4        |
|6/14/2022 9:00:30PM|device2 |dm-4        |
|6/14/2022 9:00:30PM|device3 |dm-8        |
-------------------------------------------

table b
-----------------------------------------------------
|time               |hostname|diskiodevice|diskiola1|
|6/14/2022 9:00:30PM|device1 |dm-0        |8        | 
|6/14/2022 9:00:30PM|device1 |dm-4        |7        |
|6/14/2022 9:00:30PM|device3 |dm-3        |9        |
|6/14/2022 9:00:30PM|device2 |dm-2        |8        |
|6/14/2022 9:00:30PM|device3 |dm-8        |15       |
|6/14/2022 9:00:30PM|device2 |dm-4        |9        |
|6/14/2022 9:00:30PM|device3 |dm-3        |1        |
-----------------------------------------------------

因此,我要做的是从表b中获取所有磁盘设备的diskiola1值,这些值被定义为表a中的特定主机名条目的device_cache项。以下是我尝试过的:

代码语言:javascript
复制
SELECT max("diskiola1")
FROM "table b"
WHERE hostname = 'device1'
AND
time > now() - 10m
AND
"cache_device" IN
( Select distinct("device_cache") as "cache_device" FROM "table a" WHERE hostname = 'device1')
GROUP BY time(20s)

我的目标是在图表中将其作为时间序列来显示给定主机在一段时间内仅针对device_cache项的device_cache值。这些数据是提供给我使用的,不幸的是,我不能修改它。

有人看到我哪里出错了吗?我收到的错误是ERR: error parsing query: found IN, expected ;

EN

回答 1

Stack Overflow用户

发布于 2022-06-15 03:42:03

不幸的是,在可预见的将来,InfluxQL不支持IN运算符(请参阅详细信息这里)。InfluxQL也不支持连接操作(请参阅详细信息这里)。

似乎您的"table_a“更像是映射表,而"table_b”实际上是在存储时间序列数据。假设主机名是标记,而device_cache是“表a”的字段;主机名是标记,而diskiodevice和diskiola1是“表b”的字段。您可以尝试使用使能通量并尝试以下示例代码:

代码语言:javascript
复制
aDistinctDeviceCache = from(bucket:"yourDatabaseName/yourRentionPolicyName")
|> range(start: 2018-05-22T23:30:00Z, stop: 2018-05-23T00:00:00Z)   // start and stop can be changed
|> filter(fn:(r) => r._measurement == "table a" and r.hostname == "device1" and r._field == "device_cache")
|> distinct()

bDevice1 = from(bucket:"yourDatabaseName/yourRentionPolicyName")
|> range(start: -10m)
|> filter(fn:(r) => r._measurement == "table b" and r.hostname == "device1")
|> rename(columns: {diskiodevice: "device_cache"})

maxDiskiola1ForDevice1 = 
join(tables:{aPlus:aDistinctDeviceCache, bPlus:bDevice1}, on:["hostname", "device_cache"])
|> window(every: 20s)
|> max("diskiola1")
|> yield()

这将首先从"table_a“获取不同的值,然后重命名"table_b”字段,以便我们可以在最后一步将两个表连接在一起。

这里有一些更多的技巧来转换你的InfluxQL到Flux子查询

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72623620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档