AWS Glue ETL任务写入S3成功但未创建Athena可查目录表
针对Glue ETL成功生成Parquet但未在Catalog创建表的问题,可按以下方向逐一排查:
验证Glue Job角色的Catalog权限
确认ETL任务使用的IAM角色拥有glue:CreateTable、glue:UpdateTable权限,且权限范围覆盖目标数据库postgres_glue_database。注意Crawler角色的权限不自动同步给ETL角色,需单独配置IAM策略,确保角色能对指定数据库执行元数据写入操作。核对数据库与表名的准确性
确认catalogDatabase参数值postgres_glue_database是Glue Catalog中已存在的数据库全称(区分大小写,无拼写/符号错误);同时确保catalogTableName未与库中现有表重名(尤其是JDBC源表),可临时改用新表名(如tableName_s3)测试。检查输出DataFrame的Schema与数据状态
在ETL代码中添加调试语句,验证ApplyMapping_node2的有效性:ApplyMapping_node2.printSchema() print(f"DataFrame row count: {ApplyMapping_node2.count()}")查看Job运行日志,确认Schema非空、数据行数>0。若Schema为空或无数据,Glue会跳过表创建操作。
分析CloudWatch日志中的关键错误
前往CloudWatch检索Glue Job的运行日志,搜索CreateTable、UpdateTable、AccessDenied、DatabaseNotFound等关键词,定位是否存在权限拒绝、数据库不存在、字段类型不支持等隐性报错。调整S3输出路径与更新行为参数
- 将S3路径从根目录
"s3://data-lake"改为专属子路径(如"s3://data-lake/tableName/"),避免与其他数据混淆导致元数据识别异常; - 尝试将
updateBehavior从"UPDATE_IN_DATABASE"改为"LOG"(仅记录元数据操作),观察日志是否有表创建的触发记录,再改回原参数验证。
- 将S3路径从根目录
验证Parquet格式配置
显式指定Parquet格式的压缩参数,排除格式配置问题:S3bucket_node3.setFormat("glueparquet", compression="snappy")或临时改用标准
parquet格式测试,确认是否为Glue优化格式的兼容问题。
内容的提问来源于stack exchange,提问作者davyioner

