Я рассматриваю Cassandra как промежуточное хранилище во время моего задания ETL для выполнения дедупликации данных.Получить первую строку для каждого ключа раздела в Cassandra
Предположим, у меня есть поток событий, каждый из которых имеет идентификатор бизнес-объекта, временную метку и некоторую ценность. Мне нужно получить только последнее значение с точки зрения временной метки для каждого бизнес-ключа, но события могут быть неупорядоченными.
Моя идея состояла в том, чтобы создать промежуточную таблицу с бизнес-идентификатор в качестве ключа секционирования и метку времени в качестве ключа кластеризации:
CREATE TABLE sample_keyspace.table1_copy1 (
id uuid,
time timestamp,
value text,
PRIMARY KEY (id, time)
) WITH CLUSTERING ORDER BY (time DESC)
Теперь, если я вставить данные в этой таблице я могу получить последнее значение для некоторого данного раздела ключ:.
select * from table1 where id = 96b29b4b-b60b-4be9-9fa3-efa903511f2d limit 1;
Но это потребует выдать такой запрос для каждого бизнес-ключ меня интересует
есть ли какой-то эффективный способ, которым я мог бы сделать это в CQL?
Я знаю, что у нас есть возможность перечислить все доступные ключи раздела (по select distinct id from table1
). Поэтому, если я посмотрю на модель хранения Cassandra, получение первой строки для каждого ключа раздела не должно быть слишком сложным.
Это поддерживается?