0

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

4

1 回答 1

1

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

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

请务必阅读何时使用二级索引/何时不使用二级索引子句。当您使用 Cassandra 时,花点时间思考如何查询列族可能是更重要的事情,并确保您需要Cassandra。

于 2014-01-22T17:38:39.027 回答