Запросы в KairosDB/OpenTSDB

У меня есть 3 миллиона записей с такими записями, как:

~/Abharthan/kairosdb$ head -10 export.txt
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"1","building_type":"ElementarySchool","meter_type":"temperature","unit":"F"},"value":"34.85"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"2","building_type":"Park","meter_type":"temperature","unit":"F"},"value":"0"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"3","building_type":"Industrial","meter_type":"temperature","unit":"F"},"value":"0.07"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"4","building_type":"RecreationCenter","meter_type":"temperature","unit":"F"},"value":"0"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"5","building_type":"Park","meter_type":"temperature","unit":"F"},"value":"2.2"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"6","building_type":"CommunityCenter","meter_type":"temperature","unit":"F"},"value":"31.41"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"7","building_type":"Office","meter_type":"temperature","unit":"F"},"value":"0"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"8","building_type":"ElementarySchool","meter_type":"temperature","unit":"F"},"value":"10.88"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"9","building_type":"ElementarySchool","meter_type":"temperature","unit":"F"},"value":"42.27"}
    {"name": "meterreadings", "timestamp":"1359695700","tags": {"Building_id":"10","building_type":"ElementarySchool","meter_type":"temperature","unit":"F"},"value":"10.14"}

Это показания счетчиков за 1 год для каждого здания с building_id, собираемые каждый час.

Моя начальная временная метка данных: 1359695700, а конечная временная метка: 1422853200. Я хочу запросить эту БД, чтобы получить следующее:

Query hourly average for one building(say building_id:100) for one year (output expected of 8760 points)
Query monthly sum for one building for one year (output expected of 12 points)

Я написал следующие два запроса, чтобы получить результаты для двух вышеуказанных запросов:

Запрос1:

{ "start_absolute":1359695700, "end_absolute":1422853200, "метрики":[{"tags":{"Building_id":["100"]},"name":"показания счетчиков","агрегаторы":[{" имя":"среднее","align_sampling":true,"выборка":{"значение":"1","единица измерения":"часы"}}]}]}

Ответ: 200 {"запросы":[{"sample_size":70168,"результаты":[{"имя":"показания счетчика","group_by":[{"имя":"тип","тип":"число "}","tags":{"Building_id":["100"],"building_type":["MiddleSchool"],"meter_type":["температура"],"unit":["F"]}, "ценности": [[1359695700,42.45377343113282], [1360800000,36.42662912912908], [1364400000,41.12510250000007], [1368000000,54.915547499999946], [1371600000,65.07990000000015], [1375200000,55.8904375], [1378800000,47.33335249999986], [1382400000, 38,952450000000034], [1386000000,41.99267000000001], [1389600000,41.28209500000009], [1393200000,40.31645895895911], [1396800000,40.758327499999915], [1400400000,54.05608750000002], [1404000000,63.410385], [1407600000,65.38089749999993], [1411200000,45.99822500000001] ,[1414800000,39.669450137465724],[1418400000,39.039874999999945],[1422000000,41.795917721519]]}]}]}

Запрос 2:

{ "start_absolute":1359695700, "end_absolute":1422853200, "метрики":[{"tags":{"Building_id":["100"]},"name":"показания счетчиков","агрегаторы":[{" имя":"сумма","align_sampling":true,"выборка":{"значение":"1","единица измерения":"месяцы"}}]}]}

Ответ: 200 {"запросы":[{"sample_size":70168,"результаты":[{"имя":"показания счетчика","group_by":[{"имя":"тип","тип":"число "}","tags":{"Building_id":["100"],"building_type":["MiddleSchool"],"meter_type":["температура"],"unit":["F"]}, "значения":[[1359695700,3337957.570000005]]}]}]}

Я не получаю того, что ожидал, я что-то упускаю.


person Bharthan    schedule 18.08.2015    source источник


Ответы (1)


Ответ прост, как я указал ранее в качестве возможной проблемы :-) ср. Показатель ошибки Kairosdb[0](name=abcd). тег[xyz].value не может быть пустым

KairosDB имеет миллисекундную точность — все метки времени в KairosDB являются миллисекундами Unix.

Но ваши метки времени указаны в секундах Unix, и это ваша проблема.

Поэтому вам нужно умножить на 1000 все ваши временные метки в сборе данных и в запросах.

Например, query2 запрашивает все образцы менее чем за 24 часа с 16 января 1970 г. по 17 января 1970 г., так как вы агрегируете один месяц, вы получаете только один результат.

Например. для сбора данных:

{"name": "meterreadings", "timestamp":"1359695700000","tags": {"Building_id":"1","building_type":"ElementarySchool","meter_type":"temperature","unit":"F"},"value":"34.85"}
    {"name": "meterreadings", "timestamp":"1359695700000","tags": {"Building_id":"2","building_type":"Park","meter_type":"temperature","unit":"F"},"value":"0"}

... И запрос:

{ "start_absolute":1359695700000, "end_absolute":1422853200000, "metrics":[{"tags":{"Building_id":["100"]},"name":"meterreadings","aggregators":[{"name":"sum","align_sampling":true,"sampling":{"value":"1","unit":"months"}}]}]}
person Loic    schedule 18.08.2015
comment
Извините, у меня есть данные за 25 месяцев.. :D :D. - person Bharthan; 18.08.2015