выберите из InfluxDB, где значение равно null

Если мои данные (концептуально) является:

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

тогда на устаревшем языке SQL оператор будет:

select * from table where b is null

Я не могу найти аналогичное условие в документации языка запросов InfluxDB.

Я работаю с данными, где есть необязательно числовое значение в столбце, и я хочу выбрать записи, где этот столбец пуст/null. Поскольку это целые числа, они, похоже, вообще не работают с соответствующими регулярными выражениями, поэтому что-то вроде where !~ /.*/ выходит.

3 ответов


InfluxDB не понимает NULL и покажет ошибку, если в запросе используется "is null" или "is not null". Чтобы найти что-то вроде null, нам нужно искать пустое пространство, т. е. использовать пустые одинарные кавычки как

SELECT * FROM service_detail where username != ''

вы не можете искать nulls в InfluxDB не сможет вставить нули в наплыве >=0.9


для полей, где существует хотя бы одно" недопустимое " значение (например, отрицательный размер в байтах), вы можете создать запрос, который позволяет находить строки с отсутствующими данными без изменения сохраненных данных.

у меня есть метрика с 5 полей: mac, win, win64, linux и linux64, не каждое поле заполняется в каждой строке, и иногда строка не будет добавлена из-за того, что у нее нет данных в то время.

при первом запросе данных с 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, а фильтрация по времени очень запутанна при использовании вложенных запросов. Очевидно, было бы лучше, если бы люди притока просто добавили is null или not null или какой-то аналогичный синтаксис для influxql, но, как было связано выше, они, похоже, не слишком заинтересованы в этом.