【发布时间】:2019-04-21 05:23:17
【问题描述】:
是否可以在创建表后修改 Rangekey 列。例如添加新的列/属性并分配为表格的 RangeKey。尝试搜索但找不到任何关于更改 Range 或 Hash 键的文章
【问题讨论】:
标签: amazon-dynamodb
是否可以在创建表后修改 Rangekey 列。例如添加新的列/属性并分配为表格的 RangeKey。尝试搜索但找不到任何关于更改 Range 或 Hash 键的文章
【问题讨论】:
标签: amazon-dynamodb
不,很遗憾,在 DynamoDB 中创建表后,无法更改哈希键、范围键或索引。 DynamoDB UpdateItem API Documentation 清楚地表明了索引不能被修改的事实。我在文档中找不到任何明确声明表键无法修改但目前无法更改的引用。
请注意,除了哈希和范围键之外,DynamoDB 没有架构,您可以毫无问题地将其他属性添加到新项目。不幸的是,如果您需要修改散列键或范围键,则必须创建一个新表并迁移数据。
编辑(2014 年 1 月):DynamoDB 现在支持on the fly global secondary indexes
【讨论】:
要更改或创建额外的排序键,您需要创建一个新表并迁移到该表,因为这两个操作都无法对现有表执行。
DynamoDB 流使我们能够在不停机的情况下迁移表。我这样做非常有效,我遵循的步骤是:
扫描上一步创建的 GSI(或整个表)并使用以下过滤器:
FilterExpression = "attribute_not_exists(已迁移)"
使用迁移标志更新表中的每个项目(即:“已迁移”:{“S”:“0”},将其发送到 DynamoDB 流(使用 UpdateItem API,以确保不会发生数据丢失)。
注意:您可能希望在更新期间增加表上的写入容量单位。
遵循这些步骤应该可以确保您没有数据丢失和停机。
我已在我的博客上记录了这一点,并提供了帮助代码: https://www.abhayachauhan.com/2018/01/dynamodb-changing-table-schema/
【讨论】: