如何在 DynamoDB 中添加列
Posted
技术标签:
【中文标题】如何在 DynamoDB 中添加列【英文标题】:How to Add a Column in DynamoDB 【发布时间】:2014-10-25 16:48:16 【问题描述】:有没有办法在亚马逊 AWS 的 DynamoDB 中的现有表中添加新列?
谷歌没有帮助,
http://docs.aws.amazon.com/cli/latest/reference/dynamodb/update-table.html?highlight=update%20table 中的 UpdateTable 查询没有任何与添加新列相关的信息。
【问题讨论】:
【参考方案1】:DynamoDB 不需要架构定义,因此不存在“列”之类的东西。您可以添加一个具有新属性的新项目。
【讨论】:
所以,用户可以上传他们的“个人资料信息”和一个额外的字段,而 dynamo 会即时接受吗?还是我必须以管理员身份进入并添加它? @Costa 只要您的代码在其 PutItem 调用中包含新属性,DynamoDB 就会接受它。没有其他记录具有该属性并不重要。 如何从所有文档中删除一个属性? 不是在单个操作中,我相信您需要为每个操作迭代并调用 UpdateItem @HrushikeshDhumal 您可能看不到 UI 中的新字段,因为您没有查询它。 Dynamodb 将在项目中存储具有新属性的数据 - 除了哈希键(和排序键,如果存在)之外,不需要定义属性。【参考方案2】:好吧,让我们不要在关于“字段”和“列”之间区别的语义讨论中拖拖拉拉。 “列”这个词确实让我们想起了关系数据库,而 dynamodb 不是。本质上,这意味着 dynamodb 没有外键。
Dynamodb 确实有“主分区键”和“索引分区键”,就像关系数据库一样。
添加数据时确实需要尊重这些键。但除了这些要求之外,您不必预定义字段(前面提到的那些分区键除外)。
假设您是新手,一些额外的良好做法:
为每条记录添加一个数字字段,以以秒为单位存储创建时间。 Dynamodb 具有可选的清理功能,需要在您的数据中使用此类字段。 您不能在 dynamodb 中使用日期,因此您必须将其存储为数字字段或字符串。鉴于前面提到的注释,您可能更喜欢它们的数字类型。 不要在其中存储大文档,因为最大提取大小为 16MB,最大记录大小为 400KB。幸运的是,AWS 也有一个 DocumentDB。【讨论】:
有任何链接可以阅读更多关于以秒为单位存储创建时间的信息吗?谢谢。 @JuanitoFatas docs.aws.amazon.com/amazondynamodb/latest/developerguide/… ;例如,在 javascript 中,您可以使用const ttl = Math.floor((new Date().getTime()) / 1000)
。
@JuanitoFatas 怎么样Date.now()
根据文档,它应该在几秒钟内。所以你必须Math.floor(Date.now()/1000)
【参考方案3】:
我安装了 NoSQL Workbench,然后连接到现有的 DynamoDB 表并尝试通过添加新属性来更新现有的项目。 我发现我们只能添加具有这些类型之一的新属性 - “SS”、“NS”、“BS”(字符串集、数字集、二进制集)。 在 Workbench 中,我们可以为选择的操作生成代码。
我扫描了我的 dynamodb 表,并为每个项目添加了类型为“SS”的新属性,然后我再次扫描并更新了最近添加的新属性类型 -“S”,以便创建具有主键的全局二级索引 (GSI) - “pk2NewAttr”。
NoSQL Workbench 相关视频 - https://www.youtube.com/watch?v=Xn12QSNa4RE&feature=youtu.be&t=3666
Python 中的示例“如何扫描所有 dynamodb 表”-https://gist.github.com/pgolding
【讨论】:
【参考方案4】:在亚马逊 AWS 的 DynamoDB 中向现有表添加新列的方法:
我们可以通过两种方式将值存储在 DynamoDb 中, (i) 在 DynamoDB 的 RDBMS 结构类型中,我们可以通过执行相同的命令来添加新的 Coulmn,以保留“新列”条目,其中已在现有表中创建记录。我们可以将 DynamoDb 与具有某些列的值的记录/行一起使用,而其他列没有值。
(ii) 在 NoSQL 类型的结构中;我们将 Json 字符串存储在 Column 中,以根据要求保留所有属性。这里我们正在生成一个 json 字符串,我们必须将新属性添加到 json 字符串中,然后可以将其插入到同一列中,但使用新属性。
【讨论】:
以上是关于如何在 DynamoDB 中添加列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?
如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?