考虑Cassandra中的以下简单表,其中一些值通过CQL3插入:
CREATE TABLE sometable (
id varchar,
name varchar,
value varchar,
PRIMARY KEY (id, name));
INSERT INTO sometable (id, name, value) VALUES ('Mary', 'Favorite Color', 'Red');
INSERT INTO sometable (id, name, value) VALUES ('George', 'Favorite Color', 'Green');
INSERT INTO sometable (id, name, value) VALUES ('Bob', 'Favorite Color', 'Red');
INSERT INTO sometable (id, name, value) VALUES ('Mary', 'Phone', '555-1234');
INSERT INTO sometable (id, name, value) VALUES ('George', 'Phone', '555-1212');
INSERT INTO sometable (id, name, value) VALUES ('Bob', 'Email', 'bob@bob.com');
假设我们想要获得喜欢的颜色为红色的每个人的电话号码。例如,像:
SELECT 'Phone' FROM sometable WHERE 'Favorite Color' = 'Red';
我能想到的唯一方法是选择所有感兴趣的列的名称,然后进行客户端过滤:
SELECT name, value from sometable WHERE name IN ('Favorite Color', 'Phone') allow filtering;
有没有办法在CQL或任何其他Cassandra API中过滤动态列值?
答案 0 :(得分:1)
辅助索引允许您在不同的字段上搜索分区键/集群键中的字段。你可以在那里找到一些有用的文档:
http://www.datastax.com/docs/1.1/ddl/indexes
请务必阅读何时使用辅助索引 / 何时不使用辅助索引子句。 花时间思考如何查询列族可能是更重要的事情,当你使用Cassandra时,这一点,并确保你需要卡桑德拉。