Cassandra CQL:如何在动态列上执行类似WHERE的查询?

时间:2014-01-15 19:56:23

标签: cassandra thrift cql cql3 cassandra-cli

考虑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中过滤动态列值?

1 个答案:

答案 0 :(得分:1)

辅助索引允许您在不同的字段上搜索分区键/集群键中的字段。你可以在那里找到一些有用的文档:

http://www.datastax.com/docs/1.1/ddl/indexes

请务必阅读何时使用辅助索引 / 何时不使用辅助索引子句。 花时间思考如何查询列族可能是更重要的事情,当你使用Cassandra时,这一点,并确保你需要卡桑德拉。

相关问题