首页 > 解决方案 > 从 dynamoDb 中提取数据并将其移动到另一个表的最佳方法

问题描述

我有一张 500GB 的桌子。我想根据时间戳将数据传输到另一个表。表中有几个项目,我只想要另一个表中每个项目的最新条目。

考虑到桌子的大小,任何人都可以推荐最好的 aws 服务来快速轻松地完成它吗?

我遇到了 aws 胶水,hivecopyactivity。这是最好的解决方案还是我可以使用任何其他服务?

标签: amazon-web-servicesamazon-dynamodbextractetl

解决方案


(假设您现在可以在该表上添加全局二级索引 (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字段(即,使用其默认值)。有关这些微妙之处的更多详细信息,请参阅此答案


推荐阅读