2017-02-22 41 views
0

根据DataStax collections doc,集合总是作为一个整体来阅读。在引擎盖下,C *将集合存储为动态列的列表。 例如为什么CQL读取整个集合?

books map<text, int> 

将店为

{name=books:book_name_1, value=2001}, 
{name=books:book_name_2, value=2002} 

为什么就不能选择从地图的特定按键?

+0

的[选择从地图特定值(http://stackoverflow.com/questions/16024839/select-specific-value-from-map) –

回答

0

这是什么JSON结构? (这不是有效的JSON。)这不是一个Map如何存储在Cassandra内的列中。

无论如何,你可能会寻找以下:http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_query_collection_c.html

+0

会是怎样保存,然后可能的复制?我的理解是,每个映射entery都存储在Cassandra中作为一个动态列,其中的Key是映射名称和键的组合,并且该值是映射值 – EugeneMi

0

卡桑德拉阅读每列作为一个整体。
卡桑德拉只允许在主键上的where子句,如果你需要通过普通列进行过滤,你必须在其上创建索引。

对于你的情况,你需要分割地图,分为两个领域,使键作为主键

例如:

CREATE TABLE books(
    key text, 
    value int, 
    primary key(key) 
); 

现在,您可以通过按键来获得价值查询;

SELECT value FROM books WHERE key = ? 
+0

我不希望按列进行过滤。地图是作为一个动态列存储的,所以我期望能够读取该列而不是整个地图 – EugeneMi

+0

@EugeneMi你不能只读该列,你需要阅读整个 –

+0

检查这一个http ://stackoverflow.com/questions/16024839/select-specific-value-from-map –

相关问题