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

AWS Glue作业用create_dynamic_frame.from_catalog访问分区投影表数据失败如何解决

问题根因

分区投影是Athena原生提供的特性,相关分区配置仅被Athena查询引擎识别。Glue默认的create_dynamic_frame.from_catalog逻辑只会拉取Glue元数据中预先注册的分区列表,不会自动解析表的分区投影配置,因此在未手动注册分区的场景下会识别不到任何数据路径,返回0条记录。

无需预注册Glue分区的解决方案

方案1:Glue 4.0及以上版本直接开启分区投影支持

Glue 4.0及更高版本已经内置了分区投影配置识别能力,仅需在读取catalog表时新增allowPartitionProjection参数即可,代码示例:

data = glueContext.create_dynamic_frame.from_catalog(
    database="db", 
    table_name="a_table",
    additional_options = {"allowPartitionProjection": "true"}
)
print(data.count())

该方案改动最小,可完全复用现有表的分区投影配置。

方案2:直接读取S3路径并开启分区推断

如果你使用的是低于4.0的Glue版本,可以绕过Glue Catalog直接读取S3数据路径,手动开启分区推断自动识别路径中的分区字段,代码示例:

data = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={
        "paths": ["s3://<你的表数据根路径>/"],
        "recurse": True
    },
    format="<你的数据格式,如parquet、csv>",
    format_options={"withPartition": "true"}
)
print(data.count())

方案3:通过Athena数据源查询数据

直接在Glue中调用Athena执行查询,完全复用Athena的查询逻辑,不存在兼容性问题,代码示例:

athena_source = glueContext.read.format("athena")\
    .option("database", "db")\
    .option("query", "select * from a_table")\
    .option("output_location", "s3://<你的Athena查询结果存放路径>/")
data = athena_source.load()
print(data.count())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:33:03