Выберите из 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.

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

Ответ 2

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

SELECT * FROM service_detail where username != ''

Ответ 3

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

У меня есть метрика с 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 или каким-то подобным синтаксисом к influenxql, но, как было упомянуто выше, они не слишком заинтересованы в этом.