从InfluxDB中选择value为null

时间:2015-05-07 04:32:06

标签: influxdb

如果我的数据(概念上)是:

#  a b c 
  -------
1  1   1
2  1 1 0
3  1 0 1

然后在旧SQL语言中,语句为:

select * from table where b is null

我在InfluxDB查询语言文档中找不到类似的条件。

我正在使用数据,其中列中有可选的数值,我想选择此列为空/空的记录。由于这些是整数,它们似乎根本不适用于匹配的正则表达式,所以像where !~ /.*/这样的东西就出来了。

4 个答案:

答案 0 :(得分:10)

InfluxDB不理解NULL,如果在查询中使用is nullis not null,则会显示错误。为了找到类似于null的东西,我们需要查找空白空间,即使用空单引号作为

SELECT * FROM service_detail where username != ''

答案 1 :(得分:6)

InfluxDB中的

You cannot search for nulls< 0.9。您在Influx>中的will not be able to insert nulls = 0.9

答案 2 :(得分:0)

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

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

首先在子查询中使用fill()子句设置为无效值-1的子句查询数据,然后将其包装在外部查询中以查找丢失至少一个的行列(在OR表达式之间使用WHERE)或根本没有数据的行(在AND表达式之间使用WHERE)。

子查询如下:

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或一些类似的语法会更好,但是正如上面所链接的那样,他们似乎对此不太感兴趣。

答案 3 :(得分:0)

在 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 =~ /^$/)

=> 有效!