我正在考虑将Cassandra作为ETL工作期间的中间存储来执行重复数据删除.
让我们假设我有一个事件流,每个事件都有一些业务实体ID,时间戳和一些值.我需要在每个业务键的事件时间戳方面获得最新值,但事件可能无序.
我的想法是创建具有业务ID作为分区键的staging表,并将时间戳作为集群键:
CREATE TABLE sample_keyspace.table1_copy1 (
id uuid,
time timestamp,
value text,
PRIMARY KEY (id, time)
) WITH CLUSTERING ORDER BY ( time DESC )
Run Code Online (Sandbox Code Playgroud)
现在,如果我在此表中插入一些数据,我可以获得某些给定分区键的最新值:
select * from table1 where id = 96b29b4b-b60b-4be9-9fa3-efa903511f2d limit 1;
Run Code Online (Sandbox Code Playgroud)
但是,这需要为我感兴趣的每个业务密钥发出这样的查询.
有没有一种有效的方法我可以在CQL中做到这一点?
我知道我们能够列出所有可用的分区键(by select distinct id from table1).因此,如果我查看Cassandra的存储模型,获取每个分区键的第一行应该不会太难.
这支持了吗?
Chr*_*ink 18
如果您使用的是3.6之后的版本,则可以在您的查询中选择一个名为PER PARTITION LIMIT(CASSANDRA-7017)的选项,您可以将其设置为1.这将不会自动完成,cqlsh直到3.10与CASSANDRA-12803.
SELECT * FROM table1 PER PARTITION LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |