是否可以在創建表後修改Rangekey列。如添加新的列/屬性併爲表格指定RangeKey。嘗試搜索,但無法找到任何有關更改範圍或哈希鍵的文章DynamoDB更改範圍鍵列
8
A
回答
12
不幸的是,不幸的是,在DynamoDB中創建表之後,無法更改哈希鍵,範圍鍵或索引。 DynamoDB UpdateItem
API Documentation很清楚索引無法修改的事實。我無法在文檔中的任何位置找到明確指出表格密鑰無法修改的參考,但目前它們無法更改。
請注意,除hash和range鍵之外,DynamoDB是無模式的,您可以將其他屬性添加到新項目中而不會出現問題。不幸的是,如果您需要修改散列鍵或範圍鍵,則必須創建一個新表並遷移數據。
編輯(2014年1月):DynamoDB現在已經支持on the fly global secondary indexes
1
要更改或創建一個額外的排序關鍵字,你需要創建一個新表,並遷移到它,因爲這兩個動作不能在現有的表上完成。
DynamoDB流使我們能夠在沒有任何停機時間的情況下遷移表。我已經做到了這一點非常有效,我遵循的步驟如下:
- 創建一個新表(我們稱之爲NewTable)和所需的關鍵結構LSIs GSIs。
- 在原始表上啓用DynamoDB流
- 將Lambda與流關聯起來,該流將記錄推入NewTable。 (此Lambda應在步驟5中修剪移動標誌)
- [可選]在原始表格上創建一個GSI以加速掃描項目。確保此GSI僅具有屬性:主鍵和遷移(請參閱步驟5)。
掃描在先前步驟(或整個表)中創建的GSI和使用下面的過濾器:
FilterExpression =「attribute_not_exists(遷移)」
更新每個項目表中的與一個遷移標誌(即:「遷移」:{「S」:「0」},它把它發送到DynamoDB流(使用的updateItem API,以確保不會發生數據丟失)
注:你可能想增加寫入能力uni在更新期間在桌面上。
- Lambda將拾取所有項目,修剪Migrated標誌並將其推入NewTable。
- 所有項目都被遷移後,將代碼重新指定到新表
- 刪除原始表和Lambda函數,一旦開心一切都很好。
以下步驟應確保您沒有數據丟失和停機時間。
我已經記錄在本上我的博客,用代碼來幫助: https://www.abhayachauhan.com/2017/10/dynamodb-changing-table-schema
相關問題
- 1. DynamoDB:搜索哈希鍵或範圍鍵
- 2. DynamoDB:在一系列非連續範圍鍵中查詢範圍鍵
- 3. 使用散列鍵和帶有Boto3的範圍鍵查詢DynamoDB
- 4. 查詢的範圍在dynamodb主鍵
- 5. DynamoDb範圍鍵可以爲空嗎?
- 6. 更改Android TableLayout列範圍
- 7. 使用帶分區鍵和範圍鍵的LSI查詢Dynamodb
- 8. Powershell範圍更改?
- 9. 更改JavaScript範圍
- 10. 更改根範圍
- 11. DynamoDB獲取範圍鍵或全局輔助列的單列列表
- 12. 如何按日期查詢DynamoDB(範圍鍵),沒有明顯的散列鍵?
- 13. 將單個單元格範圍更改爲列範圍
- 14. Code Rush:更改成員範圍的鍵盤快捷鍵
- 15. 可以在dynamoDB PHP中僅使用散列鍵更新項目?我沒有範圍鍵值
- 16. DateTimePicker類更改範圍
- 17. 更改範圍成員
- 18. 範圍從Promise中更改
- 19. 更改onAfterChange的範圍jsViews
- 20. 範圍更改視圖
- 21. PHP:更改變量範圍
- 22. SSIS更改變量範圍
- 23. 動態更改Highstock範圍
- 24. 更改功能範圍
- 25. SpringBoot更改測試範圍
- 26. 。申請不更改範圍
- 27. 刷新$範圍更改
- 28. 更改所需的範圍
- 29. 通過哈希和範圍鍵查詢DynamoDB表
- 30. DynamoDB - 獲取所有行主鍵是在一個範圍內
所以,無論是分區鍵(主),也不是排序鍵可以修改? – Vadorequest
@Vadorequest是正確的 - 如果您需要修改,您需要創建一個新表並遷移您的數據。 – rpmartz
然後我猜最安全的方法是默認不使用散列鍵,並在需要時添加額外的索引。在創建表本身時應該是什麼應該是散列並且強制所有請求提供散列值來檢索項目可能是一個相當大的問題,如果這是一個不好的選擇。 – Vadorequest