Выбрать строку FROM в Grafana InfluxDB

У меня есть некоторые данные о продажах в InfluxDB, в основном каждые 10 секунд я записываю общее количество продаж из SQL, а затем разбиваю его на продажи различных товаров в полях. Таким образом, строка может выглядеть так:

time        Bicycles Shovels Hats Candles Sales
01/01/2019     12       6      2     4      24
02/01/2019     14       9      3     5      31

(Это фиктивные данные для этого вопроса, и они не отражают числа на изображениях, взятых из производственных тестов, которые я проводил с фактическими данными)

Важно подчеркнуть, что это накапливается, каждая запись увеличивается на количество продаж.

Затем я могу использовать Grafana, чтобы показать мне группу разницы (макс. (Продажи)) по времени (1d), чтобы показать общие продажи (в данном случае за день)

введите здесь описание изображения

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

Итак, у меня есть 3 запроса в Grafana:

SELECT time, max(difference) FROM (
   SELECT difference(max("Sales")) 
   FROM "autogen"."Paid_Orders" 
   WHERE $timeFilter 
   GROUP BY time(1d) fill(none)
)

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

Пример таблицы результатов

Проблема в том, что я не знаю, какая строка и какое поле. Обычно (в SQL) я бы сделал что-то вроде SELECT 'Sales' as Type и т. Д., Чтобы добавить в столбец с "Sales" в нем. Но я не могу рассматривать это как вариант ни в Grafana, ни в Influx.

  1. Я неправильно записываю данные и могу ли я использовать для этого теги?
  2. Как я могу определить строки в этой таблице?

person Tod    schedule 05.11.2019    source источник


Ответы (1)


да, ваша структура данных выглядит не очень хорошо. Вместо одной записи:

time        Bicycles Shovels Hats Candles Sales
01/01/2019     12       6      2     4      24

сохранить несколько записей с разными тегами item (продажи - это поле int):

time           item      sales 
01/01/2019     Bicycles  12  
01/01/2019     Shovels   6
01/01/2019     Hats      2
01/01/2019     Candles   4

Затем можно использовать группировку по времени AND item tag + функцию SPREAD для удаления подзапроса, например

SELECT time, SPREAD(sales) 
FROM "autogen"."Paid_Orders" 
WHERE $timeFilter 
GROUP BY time(1d), "item" fill(none)
person Jan Garaj    schedule 05.11.2019
comment
«Спасибо, я попробую это», - пришла в голову мысль вчера вечером, но я не был уверен. Отдам назад. Я начал с SPREAD, но, похоже, получал какие-то странные результаты. Возможно, это изменится, когда я правильно введу данные. - person Tod; 06.11.2019