CQL能否跨列过滤数据并排序?如何创建指定物化视图?
可行性分析与实现方案
完全可以实现你想要的物化视图,以下是具体的实现步骤和说明:
1. 原表定义(假设表名为user_locations)
如果原表还未创建,对应的CQL语句如下:
CREATE TABLE user_locations ( id INT, year INT, location TEXT, PRIMARY KEY (id, year) );
2. 创建目标物化视图
使用以下CQL语句创建满足需求的物化视图:
CREATE MATERIALIZED VIEW mv_ny_locations AS SELECT id, year, location FROM user_locations WHERE location = 'NewYork' AND id IS NOT NULL AND year IS NOT NULL PRIMARY KEY (id, year, location);
关键说明
- 过滤条件:
WHERE location = 'NewYork'实现了仅保留纽约的记录,同时必须添加id IS NOT NULL AND year IS NOT NULL(Cassandra要求物化视图的WHERE子句不能过滤主键列的空值)。 - 排序规则:物化视图的主键
(id, year, location)中,id是分区键,year和location是聚类键。Cassandra会在每个id的分区内,默认按year升序排序,同一年份下再按location升序排序,完全符合你的排序要求。如果需要降序,可在聚类键后添加DESC,例如PRIMARY KEY (id, year DESC, location DESC)。 - 数据同步:当原表插入、更新或删除数据时,物化视图会自动同步符合过滤条件的记录,最终得到你期望的结果集。
内容的提问来源于stack exchange,提问作者MengMeng
相关产品推荐
相关产品推荐

