在Cassandra中按地图值查询

时间:2014-02-25 13:48:51

标签: nosql cassandra

让我们说我有这样的列族:

CREATE TABLE test(
id text,
meta map <text, text>,
PRIMARY KEY (key)
);

然后我将一些数据放到我的 meta 地图中,例如:{'username' : 'ivan'}

我想通过 meta 地图中的元素查询我的测试列系列。像这样:

SELECT * FROM test WHERE meta['username'] = 'ivan';

根据cassandra documentation,这应该是可能的:

  

顾名思义,地图将一件事映射到另一件事。地图是名称   和一对键入的值。使用地图类型,您可以存储   用户配置文件中与时间戳相关的信息。 每个元素   map在内部存储为一个可以修改的Cassandra列,   替换,删除和查询。

但我在网上找不到任何这样的例子,这真的有可能吗?

谢谢, 伊万

2 个答案:

答案 0 :(得分:1)

查询意味着您可以使用select语句获取它,而不是您可以在where子句中使用它。这就是为什么你不能将地图作为主键的一部分。

答案 1 :(得分:1)

您需要添加二级索引以按键或值查询地图:

CREATE INDEX meta_idx ON test (ENTRIES(meta));
SELECT * FROM test WHERE meta['username'] = 'ivan';

另请参阅:

https://docs.datastax.com/en/cql/3.3/cql/cql_using/useIndexColl.html