2017-07-21 34 views
1

在JSON頂級項二級指標,我把一個項目使用JSON到表中DynamoDB:在DynamoDB

String jsonString = "{" 
+ " \"jsonid\": 4711" 
+ " }"; 
Item item = new Item() 
.withPrimaryKey("Id", 1) 
.withJSON("jsondata", jsonString); 

table.putItem(item); 

的JSON存儲在屬性jsondata作爲

{ "jsonid" : { "N" : "4711" }} 

是它可能創建索引「jsonid」的索引?

還是我必須爲此創建一個額外的屬性?根據https://aws.amazon.com/dynamodb/faqs/它似乎應該是可能的,但我不明白如何指定索引。當通過控制檯創建索引時,「jsondata.jsonid」似乎不起作用。

「Q:?是DynamoDB查詢JSON數據有什麼不同

號您可以創建一個全球次級索引或任何頂層JSON元素本地二級索引例如,假設你存儲一個JSON文件其中包含以下關於某人的信息:名字,姓氏,郵政編碼以及他們所有朋友的列表,名字,姓氏和郵政編碼將是頂層的JSON元素,您可以創建一個索引讓您根據名字,姓氏或郵政編碼進行查詢,朋友列表不是頂級元素,因此您無法爲朋友列表編制索引。有關全局二級索引及其查詢功能的更多信息,請參閱第二級索引本FAQ中的索引部分。「

回答

0

當AWS文檔說頂級時,它們表示表級別屬性JSON(而不是屬性/字段級Json)。例如,基於AWS DynamoDB Json documentation example,Car是「頂級」,「Spec」是嵌套結構化的並被指定爲「文檔」。您無法在「Spec」上創建索引,但可以在「Car」的屬性上創建索引。同樣適用於您的問題中的示例。 「Person」的屬性將是頂級元素,但「Friends」將被嵌套,因此您無法真正在「Friends」上創建索引。

您的示例的一種可能的解決方案可能是取出「jsonid」元素,然後存儲JSON,例如:{ "N" : "4711" }然後您可以在N上創建索引。如果您的結構非常簡單,那麼您不需要甚至索引,指定N作爲主鍵也是足夠的。

這裏是Java SDK example on how to create indexes using DynamoDBMapper

+0

在這種情況下,文檔非常微妙(意思是令人困惑和明顯的誤導)。但看起來你是對的。 –

0

Dynamodb不允許在複雜類型(即Map,List等)上創建索引。您只能在標量數據類型上創建索引(即字符串,數字或二進制)。

的索引分區鍵和分類鍵(如果存在)的類型可以是字符串,數值,或二進制的任何鹼 表屬性。

在上述情況下,jsondata將被保存在DynamoDB表作爲地圖數據類型。因此,不能在屬性jsondata.jsonid上創建索引。