我在Cassandra有下表:
CREATE TABLE article (
id text,
price int,
validFrom timestamp,
PRIMARY KEY (id, validFrom)
) WITH CLUSTERING ORDER BY (validFrom DESC);
商品和历史价格信息(validfrom是新价格的时间戳)。商品价格经常变动。我想查询
特定物品的历史价格。
商品的最后价格。
根据我的理解,我可以通过以下查询解决这两个问题: select id, price from article where id = X validFrom < Y limit 1;
此查询使用项目id作为限制,查询使用分区键。由于聚类顺序是基于validfrom时间戳的倒序,cassandra可以高效地执行此查询。我说得对吗?
删除旧数据的最佳方法是什么(内部管理)。假设,我想删除所有 validFrom > 20150101 and validFrom < 20151231
. 因为我没有主键,所以即使我在validfrom上使用索引,这也是低效的,对吧?我怎样才能做到这一点?
2条答案
按热度按时间nhhxz33t1#
为了补充亚历克斯·奥特的回答,你的评论是不正确的:
此查询使用项目id作为限制,查询使用分区键。由于聚类顺序是基于价格的,cassandra可以高效地执行这个查询。
行不是按顺序排列的
price
. 他们是按validFrom
按相反的时间顺序。干杯!r7knjye22#
您可以使用外部工具:
使用spark cassandra接头(即使在本地模式下)点火。代码可以如下所示(注意,我正在使用
validfrom
作为名字,不是validFrom
,因为它没有在您的架构中转义):使用dsbulk查找匹配的条目并将它们输出到文件中(
output.csv
在我的情况下),然后执行删除: