是否可以在创建表后修改Rangekey列。例如添加新列/属性并为表分配RangeKey。尝试搜索但无法找到有关更改范围或哈希键的任何文章
答案 0 :(得分:21)
不,遗憾的是,在DynamoDB中创建表后,无法更改散列键,范围键或索引。 DynamoDB UpdateItem
API Documentation清楚地表明索引无法修改。我无法在文档中找到明确指出表键无法修改的任何位置的引用,但目前它们无法更改。
请注意,除了散列和范围键之外,DynamoDB是无模式的,您可以将其他属性添加到新项目中而不会出现任何问题。不幸的是,如果您需要修改散列密钥或范围密钥,则必须创建新表并迁移数据。
修改(2014年1月):DynamoDB现在支持on the fly global secondary indexes
答案 1 :(得分:3)
要更改或创建其他排序键,您需要创建一个新表并迁移到该表,因为这两个操作都无法在现有表上完成。
DynamoDB流使我们能够在不停机的情况下迁移表。我做得非常有效,我遵循的步骤是:
扫描上一步(或整个表)中创建的GSI并使用以下过滤器:
FilterExpression =" attribute_not_exists(已迁移)"
使用迁移标志更新表中的每个项目(即:“Migrated”:{“S”:“0”},将其发送到DynamoDB Streams(使用UpdateItem API,以确保不会发生数据丢失)。
注意:您可能希望在更新期间增加表格上的写入容量单位。
遵循这些步骤应确保您没有数据丢失且无停机时间。
我已经在我的博客上记录了这一点,并提供了协助代码: https://www.abhayachauhan.com/2018/01/dynamodb-changing-table-schema/