2015-05-28 2 views
1

У меня есть таблица Cassandra как:Cassandra агрегации для второй таблицы

CREATE TABLE sensor_data (
    sensor VARCHAR, 
    timestamp timestamp, 
    value float, 
    PRIMARY KEY ((sensor), timestamp) 
) 

И и агрегации таблицы.

CREATE TABLE sensor_data_aggregated (
    sensor VARCHAR, 
    aggregation VARCHAR /* hour or day */ 
    timestamp timestamp, 
    aggragation 
    min_timestamp timestamp, 
    min_value float, 
    max_timestamp timestamp, 
    max_value float, 
    avg_value float, 
    PRIMARY KEY ((sensor, aggregation), timestamp) 
) 

Есть ли возможность какого-либо триггера, чтобы заполнить «sensor_data_aggregated» таблицу автоматически при вставке, обновлении, удалить или «sensor_data» таблицы?

Мое текущее решение, которое должно было бы написать настраиваемый триггер, со вторым протоколом фиксации. И приложение, которое читает и обрезает этот журнал с ошибкой, чтобы сгенерировать агрегированные данные.

Но я также нашел информацию о том, что центр обработки данных datastax может сделать это, но не инструктировать, как это сделать?

Какое будет наилучшее решение для этого?

ответ

2

Вы можете реализовать свой собственный C* trigger для этого, который будет выполнять дополнительные запросы для вашей таблицы агрегации после каждой вставки строки в sensor_data.

Кроме того, для поддержания мин/макс значений вы можете использовать CAS and C* lightweight transactions как

update sensor_data_aggregated 
set min_value=123 
where 
    sensor='foo' 
    and aggregation='bar' 
    and ts='2015-01-01 00:00:00' 
if min_value>123; 

используя немного обновили схему («метка времени» является зарезервированным ключевым словом в cql3, вы не можете использовать его незаменяемый):

CREATE TABLE sensor_data_aggregated (
    sensor text, 
    aggregation text, 
    ts timestamp, 
    min_timestamp timestamp, 
    min_value float, 
    max_timestamp timestamp, 
    max_value float, 
    avg_value float, 
    PRIMARY KEY ((sensor, aggregation), ts) 
) 
+0

Извините, не могли бы вы указать, что вы ответили litle больше? Это не работает. https://gist.github.com/GreenRover/699e419de7b178e01c20 Как это правильно? – GreenRover

+0

Я обновил свой ответ. Первоначальная идея была в основном правильной, но с 2 синтаксическими ошибками cql3 :) – shutty

+0

Но как я могу заменить ваши фиксированные значения как «123» «foo» «bar» .. со значениями текущего текущего INSERT? – GreenRover

Смежные вопросы