Ответ 1
Вы не можете искать пустые значения в InfluxDB <0,9. Вы не сможете вставить нули в Influx> = 0,9
Если мои данные (концептуально):
# a b c
-------
1 1 1
2 1 1 0
3 1 0 1
Затем в устаревшем языке SQL утверждение будет выглядеть следующим образом:
select * from table where b is null
Я не могу найти аналогичное условие в документации по языку запросов InfluxDB.
Я работаю с данными, где есть необязательное числовое значение в столбце, и я хочу выбрать записи, где этот столбец пуст/нуль. Поскольку они являются целыми числами, они, похоже, вообще не работают с соответствующими регулярными выражениями, поэтому что-то вроде where !~ /.*/
отсутствует.
Вы не можете искать пустые значения в InfluxDB <0,9. Вы не сможете вставить нули в Influx> = 0,9
InfluxDB не понимает NULL
и будет отображать ошибку, если в запросе используется значение is null
или is not null
. Чтобы найти что-то, похожее на нуль, нам нужно искать пустое пространство, т.е. использовать пустые одинарные кавычки как
SELECT * FROM service_detail where username != ''
Для полей, где существует хотя бы одно "недопустимое" значение (например, отрицательный размер в байтах), вы можете создать запрос, который позволит вам найти строки с отсутствующими данными, не изменяя сохраненные данные.
У меня есть метрика с 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, но, как было упомянуто выше, они не слишком заинтересованы в этом.