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

AWS Glue ETL作业输出文件丢失分区键,如何保留分区键?

解决AWS Glue ETL作业保留分区键的问题

AWS Glue默认会将分区键从输出数据文件中移除(因为这些键已作为S3分区前缀存储),若要在数据文件中保留这些字段,可通过以下两种方案实现:

方案一:使用preserve_partition_columns参数

在调用Glue的写操作时,通过additional_options添加该参数,直接让Glue保留分区键字段:

# 示例:将动态帧按year/month/day分区写入目标S3桶,同时保留分区键
sink = glueContext.write_dynamic_frame.from_options(
    frame=your_dynamic_frame,
    connection_type="s3",
    connection_options={
        "path": "s3://your-target-bucket/destination-path/",
        "partitionKeys": ["year", "month", "day"],
        "preserve_partition_columns": "true"  # 核心配置
    },
    format="parquet"  # 根据实际使用的文件格式调整,如csv、json等
)

方案二:手动确保分区键字段存在(兼容旧版Glue)

如果你的Glue版本不支持preserve_partition_columns,只需确保在整个ETL流程中未删除分区键字段,写入时指定分区键即可:

# 1. 确保转换过程中未过滤分区键(示例:若之前有字段操作,可显式保留)
from awsglue.dynamicframe import DynamicFrame
filtered_frame = your_dynamic_frame.select_fields(["year", "month", "day", "other_field1", "other_field2"])

# 2. 写入时指定分区键,字段会被保留在数据文件中
sink = glueContext.write_dynamic_frame.from_options(
    frame=filtered_frame,
    connection_type="s3",
    connection_options={
        "path": "s3://your-target-bucket/destination-path/",
        "partitionKeys": ["year", "month", "day"]
    },
    format="parquet"
)

注意事项

  • 避免在转换步骤中通过drop_fields或select_fields排除分区键字段
  • 如果输出关联Glue Catalog表,需确保表结构包含这些分区键字段,否则表元数据无法识别文件中的对应字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:17