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

如何在AWS Glue作业中从DynamoDB导入仅近10天的部分记录

解决Glue爬虫全表扫描DynamoDB的成本问题

我们的目标是让Glue作业仅爬取过去10天的数据,替代当前的全表扫描,降低DynamoDB读取成本。以下是三种可行方案:

方案一:配置Glue爬虫增量爬取(推荐)

这是最直接降低成本的方式,让爬虫只处理符合时间条件的增量数据:

  • 先确认DynamoDB表中有时间戳类型的字段(比如created_at或updated_at),用来标记数据的创建/更新时间
  • 打开AWS Glue控制台,找到对应的爬虫,进入编辑页面
  • 在「爬取策略」中选择「增量爬取」,指定刚才的时间戳字段作为增量判断依据,设置起始时间为「过去10天」(也可以配置成动态计算,每天运行时自动取当前日期减10天)
  • 保存设置后重新运行爬虫,后续每日作业只会爬取时间戳在过去10天内的新数据或更新数据

方案二:在Glue作业代码中过滤数据

如果暂时无法修改爬虫配置,可以在代码层直接过滤数据,但注意这种方式爬虫仍会全表扫描,成本优化有限:

from pyspark.sql.functions import current_date, date_sub
from awsglue.dynamicframe import DynamicFrame

# 从Glue Catalog获取原始动态帧
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "dbname", table_name = "dynamodb_audit", transformation_ctx = "datasource0")

# 转换为Spark DataFrame进行过滤操作
raw_df = datasource0.toDF()

# 过滤出过去10天的数据(假设时间戳字段为updated_at,类型为date/timestamp)
filtered_df = raw_df.filter(raw_df.updated_at >= date_sub(current_date(), 10))

# 转换回Glue DynamicFrame继续后续处理
filtered_dynamic_frame = DynamicFrame.fromDF(filtered_df, glueContext, "filtered_dynamic_frame")

方案三:直接从DynamoDB增量读取(跳过爬虫)

如果不想依赖Glue爬虫,可直接通过Glue连接DynamoDB并指定扫描条件,彻底避免全表扫描:

from pyspark.sql.functions import date_sub, current_date

# 计算10天前的日期格式(根据DynamoDB时间戳字段类型调整)
ten_days_ago = date_sub(current_date(), 10).strftime("%Y-%m-%d")

# 直接从DynamoDB读取符合条件的数据
datasource0 = glueContext.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.input.tableName": "dynamodb_audit",
        "dynamodb.splits": "10",  # 可根据表的规模调整分片数,提升读取效率
        "dynamodb.filter.expression": "updated_at >= :start_date",
        "dynamodb.filter.expression.values": f":start_date={ten_days_ago}"
    },
    transformation_ctx="datasource0"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:33