March 29th, 2016

404

InfluxDB

Главное от него впечатление - поманили вкусной SQL-конфеткой, а внутри - не тьюринг-полный DSL.

Сам-то SQL там терпимый и вопросов не вызывает. А вот математика на последователностями - вызывает.

Например, вот так вот выглядит построение графика утилизации сети (пропуская косметику) по данным с сетевых интерфейсов (которые пишутся "как есть", в форме значений счётчиков, а не bps'ов)
SELECT non_negative_derivative(max("value"), 10s)
                   FROM "interface_rx" 
                   WHERE "host" =~ /hostX +/
                             AND "instance" =~ /ethX +/ 
                             AND "type" = 'if_octets' 
                             AND $timeFilter
                   GROUP BY time(5m), "instance"
                   fill(null)



Вот простейшая SQL-задача - добавить условие в WHERE, которое отфильтрует их по минимальному значению в закверенной последовательности.

Интуитивное конфу говорит, что надо сделать что-то вида:

SELECT non_negative_derivative(max("value"), 10s) as MYVAL ...
WHERE ... AND max(myval) > 42 ...

Так нет, нельзя так делать. На выходе имеем "no datapoints" и всё тут.

Почему? Потому что irx не будет определено в WHERE clause. Почему? Потому что это не SQL, а фантик от SQL.

Проблема вообще начинается с того, что group by поддерживается только с обязательным group by time. Плюс только одна функция поверх последовательности (напр. non_negative_derivative):

"message": "error parsing query: derivative cannot be used with other fields"

Короче, идея зачётная, но сыыыырая... Математика над последовательностями не продумана, синтаксис явно подгонялся под SQL в ущерб выразительности и функциональности.