在 Cassandra 中按地图值查询

Posted

技术标签:

【中文标题】在 Cassandra 中按地图值查询【英文标题】:Query by map values in Cassandra 【发布时间】:2014-02-25 13:48:50 【问题描述】:

假设我有这样的列族:

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 列, 替换、删除和查询。

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

谢谢, 伊万

【问题讨论】:

【参考方案1】:

需要添加二级索引才能通过key或value查询map:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 Cassandra 中按地图值查询的主要内容,如果未能解决你的问题,请参考以下文章

一些Cassandra+YCSB异常

Cassandra 中的手动压缩

在 cassandra 的地图中添加新值/更新现有值是不是会创建墓碑?

EMR LinkageError 上的 Spark + Cassandra

在 Cassandra 数据库中编写存储过程

国内哪些互联网公司使用了 Cassandra 数据库?