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 nullis not null 将显示错误。为了找到类似于 null 的东西,我们需要寻找空的 space 即使用空单引号作为

SELECT * FROM service_detail where username != ''

对于至少存在一个 "invalid" 值(例如,以字节为单位的负大小)的字段,您可以创建一个查询,该查询允许您查找缺少数据的行,而无需修改存储的数据。

我有一个包含 5 个字段的指标:macwinwin64linuxlinux64,并非每个字段都已填写在每一行中,有时由于当时没有可用数据而不会添加一行。

通过首先在子查询中将 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 nullnot 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 =~ /^$/)

=> 有效!