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

Glue写入Redshift报错Unrecognized scheme null 预期s3/s3n/s3a问询

AWS Glue写入Redshift报错Unrecognized scheme null; expected s3, s3n, or s3a排查方案

根因说明

该报错是写入Redshift时调用的临时目录参数没有传入合法S3路径,路径前缀缺失或参数为空导致路径协议(scheme)被识别为null,不符合S3路径要求。

排查步骤

  • 检查Glue作业运行参数配置:确认你配置的TempDir临时目录参数取值为完整S3路径,格式必须为s3://<bucket名称>/<自定义临时目录路径>/,禁止仅填写桶名、遗漏s3://前缀。
  • 检查作业参数传递逻辑:如果TempDir通过作业参数传入,确认参数键为--TempDir(前缀两个短横线不可省略),缺失前缀会导致args["TempDir"]返回空值,触发该报错。
  • 验证S3临时目录权限:确认Glue作业关联的IAM角色对该S3路径拥有s3:PutObject、s3:GetObject、s3:ListBucket权限,权限不足会导致路径读取失败返回null。

临时验证方案

你可以先把redshift_tmp_dir替换为固定的合法S3路径测试,确认问题是否由参数传递错误导致,示例如下:

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "data_input", table_name = "db_public_trx", transformation_ctx = "datasource0")
datasource1 = glueContext.create_dynamic_frame.from_catalog(database = "data_output", table_name = "redshiftdev_public_trx", transformation_ctx = "datasource1")

src_df =  datasource0.toDF()
dst_df =  datasource1.toDF()
merged_df = dst_df.union(src_df)
datasource3 = fromDF(merged_df,glueContext,"datasource3")

# 仅需修改redshift_tmp_dir取值,替换为你自己的S3临时目录路径
datasink = glueContext.write_dynamic_frame.from_catalog(
    frame = datasource3, 
    database = "data_output", 
    table_name = "redshiftdev_public_trx", 
    redshift_tmp_dir = "s3://<你的S3桶名>/glue_temp/", 
    transformation_ctx = "datasink"
)
job.commit()

额外注意事项

  • Glue 4.0及以上版本默认使用s3a作为S3文件系统协议,临时路径前缀写s3://即可,无需手动修改为s3a,Glue会自动适配。
  • 临时目录路径末尾建议加斜杠结尾,避免路径拼接出错。

内容的提问来源于stack exchange,提问作者Muhammad Ariq Naufal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03