amazon-web-services - 从 dynamoDb 中提取数据并将其移动到另一个表的最佳方法
问题描述
我有一张 500GB 的桌子。我想根据时间戳将数据传输到另一个表。表中有几个项目,我只想要另一个表中每个项目的最新条目。
考虑到桌子的大小,任何人都可以推荐最好的 aws 服务来快速轻松地完成它吗?
我遇到了 aws 胶水,hivecopyactivity。这是最好的解决方案还是我可以使用任何其他服务?
解决方案
(假设您现在可以在该表上添加全局二级索引 (GSI),即:您当前拥有 < 5 个 GSI)
在您的表上定义一个新的 GSI。GSI 的分区键将为x
. GSI 的排序键将为timestamp
. 一旦你定义了 GSI,你就可以对该索引进行查询ScanIndexForward
,设置为false
首先获取最新的项目。您需要提供x
您感兴趣的值。在以下示例请求中,它只是设置为'abc'
{
"TableName": "<your-table-name>",
"IndexName": "<your-GSI-name>",
"KeyConditionExpression": "x = :argx",
"ExpressionAttributeValues": {
":argx": {"S": "abc"}
},
"ScanIndexForward": false,
"Limit": 1
}
此查询查看具有给定x
值(在ExpressionAttributeValues
字段中设置)按降序排序(按 GSI 的排序键,即timestamp
字段)的项目,并选择第一个(Limit
设置为1
)。只要您不需要过滤(该FilterExpression
字段为空),那么您将通过发出单个 Query 请求获得所需的结果。
如果您确实想使用过滤,您将需要执行多个请求并取消设置该Limit
字段(即,使用其默认值)。有关这些微妙之处的更多详细信息,请参阅此答案。
推荐阅读
- c# - 是否可以配置显示 IText PdfSignatureApperance Layer2Text 的位置
- angular - 当文本框中的值已更改时,更新文本框前景色的最佳方法是什么?
- aframe - 如何访问(在 Aframe 中)webGLRenderer.localClippingEnabled?
- android - 如何将imageView缩放到RelativeLayout之外
- javascript - 如何以每个随机数具有不同值的方式在多个位置调用随机数?
- django-forms - 我无法一次更新模型集中的多个数据
- c# - 如何轻松地为 Json 对象创建一个类
- mariadb - 我想为大量查询请求扩展 mariadb 数据库
- jquery - 如果在 jquery 和 codeigniter 中检查和取消选中复选框的其他条件
- python-3.x - 自动在所有测试中注入对象或从 pytest 中的夹具中注入测试类