You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS Glue将Redshift最新数据同步至DynamoDB并仅保留最新数据

解决方案:用AWS Glue同步Redshift最新数据到DynamoDB并保留最新版本

核心结论:不需要手动重建DynamoDB表,你可以通过以下几种自动化方式实现每周仅保留最新snapshot_day的数据:

方案1:Glue作业中动态删除并重建DynamoDB表(最直接高效)

如果你的DynamoDB表结构固定,每周重建表比逐条删除旧数据效率高得多。可以在Glue作业的Python脚本开头加入以下逻辑:

import boto3
from botocore.exceptions import ClientError

dynamodb = boto3.client('dynamodb')
table_name = '你的目标表名'

# 删除现有表
try:
    dynamodb.delete_table(TableName=table_name)
    # 等待表删除完成
    dynamodb.get_waiter('table_not_exists').wait(TableName=table_name)
except ClientError as e:
    if e.response['Error']['Code'] == 'ResourceNotFoundException':
        # 表不存在时直接跳过
        pass

# 重建表(复制原表结构,包括已配置的snapshot_day全局二级索引)
dynamodb.create_table(
    TableName=table_name,
    KeySchema=[
        {'AttributeName': '你的分区键', 'KeyType': 'HASH'},
        {'AttributeName': '你的排序键(可选)', 'KeyType': 'RANGE'}
    ],
    AttributeDefinitions=[
        {'AttributeName': '你的分区键', 'AttributeType': 'S'},
        {'AttributeName': '你的排序键(可选)', 'AttributeType': 'N'},
        {'AttributeName': 'snapshot_day', 'AttributeType': 'S'}
    ],
    ProvisionedThroughput={'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5},
    GlobalSecondaryIndexes=[
        {
            'IndexName': 'snapshot_day-index',
            'KeySchema': [{'AttributeName': 'snapshot_day', 'KeyType': 'HASH'}],
            'Projection': {'ProjectionType': 'ALL'},
            'ProvisionedThroughput': {'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5}
        }
    ]
)
# 等待表创建完成后再执行数据写入
dynamodb.get_waiter('table_exists').wait(TableName=table_name)

执行完这段代码后,再运行从Redshift拉取最新snapshot_day数据并写入DynamoDB的逻辑即可。

方案2:通过主键覆盖旧数据(无需删表)

如果你的Redshift表中每条记录有唯一业务主键(比如用户ID、订单ID等),可以将这个主键设为DynamoDB的分区键(或分区键+排序键的组合)。这样在Glue写入数据时,使用put_item或batch_write_item操作,新的同主键数据会自动覆盖旧数据。

这种方式无需删表,适合表数据量较大但主键明确的场景。注意要确保Glue作业每次拉取的是最新snapshot_day的全量数据,并且在Glue作业配置中禁用Job Bookmarks(因为你需要全量覆盖,而非增量同步)。

方案3:基于GSI清理旧数据(不推荐)

如果你不想删表也无法用主键覆盖,可以通过snapshot_day的GSI扫描出所有旧快照的数据,然后批量删除。但这种方式效率较低,尤其当表数据量大时,会消耗较多读写容量,仅适合数据量极小的场景。

关于Job Bookmarks的说明

Job Bookmarks是用来跟踪Glue作业已处理的数据,实现增量同步的。但你的需求是每周替换为最新全量数据,所以Job Bookmarks不适用——它会跳过之前处理过的数据,导致旧数据残留。你需要在Glue作业配置中禁用Job Bookmarks,或者每次运行前手动重置Bookmark。

内容的提问来源于stack exchange,提问作者cey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:45:37