2017-02-22 77 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 –