select 来自 InfluxDB,其中值为空
select from InfluxDB where value is null
如果我的数据(概念上)是:
# a b c
-------
1 1 1
2 1 1 0
3 1 0 1
然后在遗留 SQL 语言中,语句将是:
select * from table where b is null
我在 InfluxDB 查询语言文档中找不到类似的情况。
我正在处理数据,其中一列中有可选的数值,我想 select 记录此列为 empty/null 的位置。由于这些是整数,它们似乎根本无法与匹配的正则表达式一起使用,因此 where !~ /.*/
之类的东西已经过时了。
You cannot search for nulls in InfluxDB <0.9. You will not be able to insert nulls 流入 >=0.9
InfluxDB 不理解 NULL
,如果在查询中使用 is null
或 is not null
将显示错误。为了找到类似于 null 的东西,我们需要寻找空的 space 即使用空单引号作为
SELECT * FROM service_detail where username != ''
对于至少存在一个 "invalid" 值(例如,以字节为单位的负大小)的字段,您可以创建一个查询,该查询允许您查找缺少数据的行,而无需修改存储的数据。
我有一个包含 5 个字段的指标:mac
、win
、win64
、linux
和 linux64
,并非每个字段都已填写在每一行中,有时由于当时没有可用数据而不会添加一行。
通过首先在子查询中将 fill()
子句设置为我的无效值 -1
来查询数据,然后我可以将其包装在外部查询中以查找丢失的行至少一列(在 WHERE
表达式之间使用 OR
)或完全没有数据的行(在 WHERE
表达式之间使用 AND
)。
子查询如下所示:
SELECT count(*) FROM "firefox" GROUP BY time(1d) fill(-1)
这给了我所有的行(每天一行),其中包含 1
(当天该字段的出现次数)或 -1
(缺失)作为为每个字段返回的值。
然后我可以使用这样的外部查询从中选择没有数据的行(请注意,在这种情况下,返回的字段都是 -1,因此没有意义,可以隐藏在您的可视化工具中,例如 Grafana):
SELECT * from (_INNER_QUERY_HERE_) WHERE count_linux = -1 AND count_linux64 = -1 AND count_mac = -1 AND count_win = -1 AND count_win64 = -1;
或者我可以像这样选择至少缺少一个字段的行:
SELECT * from (_INNER_QUERY_HERE_) WHERE count_linux = -1 OR count_linux64 = -1 OR count_mac = -1 OR count_win = -1 OR count_win64 = -1;
虽然仍有改进的余地,但您必须在外部查询中手动指定字段名称,而 WHERE * = -1
之类的会好得多。此外,根据您的数据大小,此查询将是 SLOOOOOOW,并且在您使用嵌套查询时按时间过滤非常混乱。显然,如果涌入的人只是向 influxql 添加 is null
或 not null
或一些类似的语法会更好,但正如上面所链接的那样,他们似乎对此不太感兴趣。
在OSS 2.0的Flux查询中,我遇到了同样的问题->无法搜索“null”标签
步骤:
如果您搜索“null”
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag == null)
=> 错误
如果您搜索“”
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag == "")
=> 你得不到任何结果
但使用正则表达式搜索空值:
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag =~ /^$/)
=> 有效!
如果我的数据(概念上)是:
# a b c
-------
1 1 1
2 1 1 0
3 1 0 1
然后在遗留 SQL 语言中,语句将是:
select * from table where b is null
我在 InfluxDB 查询语言文档中找不到类似的情况。
我正在处理数据,其中一列中有可选的数值,我想 select 记录此列为 empty/null 的位置。由于这些是整数,它们似乎根本无法与匹配的正则表达式一起使用,因此 where !~ /.*/
之类的东西已经过时了。
You cannot search for nulls in InfluxDB <0.9. You will not be able to insert nulls 流入 >=0.9
InfluxDB 不理解 NULL
,如果在查询中使用 is null
或 is not null
将显示错误。为了找到类似于 null 的东西,我们需要寻找空的 space 即使用空单引号作为
SELECT * FROM service_detail where username != ''
对于至少存在一个 "invalid" 值(例如,以字节为单位的负大小)的字段,您可以创建一个查询,该查询允许您查找缺少数据的行,而无需修改存储的数据。
我有一个包含 5 个字段的指标:mac
、win
、win64
、linux
和 linux64
,并非每个字段都已填写在每一行中,有时由于当时没有可用数据而不会添加一行。
通过首先在子查询中将 fill()
子句设置为我的无效值 -1
来查询数据,然后我可以将其包装在外部查询中以查找丢失的行至少一列(在 WHERE
表达式之间使用 OR
)或完全没有数据的行(在 WHERE
表达式之间使用 AND
)。
子查询如下所示:
SELECT count(*) FROM "firefox" GROUP BY time(1d) fill(-1)
这给了我所有的行(每天一行),其中包含 1
(当天该字段的出现次数)或 -1
(缺失)作为为每个字段返回的值。
然后我可以使用这样的外部查询从中选择没有数据的行(请注意,在这种情况下,返回的字段都是 -1,因此没有意义,可以隐藏在您的可视化工具中,例如 Grafana):
SELECT * from (_INNER_QUERY_HERE_) WHERE count_linux = -1 AND count_linux64 = -1 AND count_mac = -1 AND count_win = -1 AND count_win64 = -1;
或者我可以像这样选择至少缺少一个字段的行:
SELECT * from (_INNER_QUERY_HERE_) WHERE count_linux = -1 OR count_linux64 = -1 OR count_mac = -1 OR count_win = -1 OR count_win64 = -1;
虽然仍有改进的余地,但您必须在外部查询中手动指定字段名称,而 WHERE * = -1
之类的会好得多。此外,根据您的数据大小,此查询将是 SLOOOOOOW,并且在您使用嵌套查询时按时间过滤非常混乱。显然,如果涌入的人只是向 influxql 添加 is null
或 not null
或一些类似的语法会更好,但正如上面所链接的那样,他们似乎对此不太感兴趣。
在OSS 2.0的Flux查询中,我遇到了同样的问题->无法搜索“null”标签 步骤:
如果您搜索“null”
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag == null)
=> 错误
如果您搜索“”
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag == "")
=> 你得不到任何结果
但使用正则表达式搜索空值:
|> filter(fn: (r) => r["_measurement"] == "my_measurement" and r.my_tag =~ /^$/)
=> 有效!