2016-11-04 3 views

ответ

1

Theres в post на материализованных представлениях. Вы можете использовать его для создания копии данных, собранных по часам. Затем используйте средние агрегатные функции при загрузке. Я думаю, что CASSANDRA-11871 Это то, что вы ищете, хотя и имеет все свои зависимости в group by, недавно был завершен, но пока не работал.

Любопытное просто гадание на вашу схему, но что-то вроде (оговорки на самом деле не тестировались):

CREATE TABLE load (
ref_equip text, 
ptd_assoc text, 
date timestamp, 
date_hour bigint, 
load float, 
PRIMARY KEY ((ref_equip, ptd_assoc), date) 
); 

CREATE MATERIALIZED VIEW load_by_hour AS 
SELECT * FROM load 
WHERE ref_equip IS NOT NULL AND ptd_assoc IS NOT NULL 
PRIMARY KEY ((ref_equip, ptd_assoc), date_hour, date); 

где date_hour просто отметка время с часовым разрешением, то есть разделить на 1000 * 60 * 60 (EPOC является мс) при установке insert. Может тогда выбрать средний

SELECT avg(load) FROM load_by_hour WHERE ref_equip='blarg' AND ptd_assoc='blargy' AND date_hour = 410632; 

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

CREATE TABLE load (
ref_equip text, 
ptd_assoc text, 
date timestamp, 
date_hour bigint, 
load float, 
PRIMARY KEY ((ref_equip, ptd_assoc, date_hour), date) 
); 
+0

Хамм, я понимаю использование материализованного представления, но я могу «Не понимаю, как вы можете преобразовать поле« date »в агрегированное число по часам с загрузкой поля в среднем по 4 * 15min ...:/ –

+0

В основном из того, что я понимаю, таблица' load' уже имеет date_hour определено, вы просто используете представление для запроса среднего значения, правильно? Итак, прежде чем вставлять данные в таблицу «load», я должен разделить временную метку уже в мс на 1000 * 60 * 60 ..? –

+0

date_hour - это ведро данных (вы не хотите бесконечных растущих разделов) и предоставить ключ для MV, чтобы скомпилировать. Создайте его, просто разделив метку времени точно. Затем, чтобы запросить его или ряд из них, вам просто нужно сделать это преобразование, чтобы знать разделы, которые нужно читать с –