有一些问题把我的大脑围绕着这个问题。我在InfluxDB 1.8.x中有两个表,下面是相关的数据布局
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项。以下是我尝试过的:
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 ;
发布于 2022-06-15 03:42:03
不幸的是,在可预见的将来,InfluxQL不支持IN运算符(请参阅详细信息这里)。InfluxQL也不支持连接操作(请参阅详细信息这里)。
似乎您的"table_a“更像是映射表,而"table_b”实际上是在存储时间序列数据。假设主机名是标记,而device_cache是“表a”的字段;主机名是标记,而diskiodevice和diskiola1是“表b”的字段。您可以尝试使用使能通量并尝试以下示例代码:
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和子查询。
https://stackoverflow.com/questions/72623620
复制相似问题