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
相关产品推荐
相关产品推荐

