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

使用清单文件从多文件夹S3桶加载Parquet至Redshift失败求助

问题分析与解决方案

核心问题

  1. 清单文件不支持通配符:Redshift的manifest文件中,url字段无法识别*通配符,必须指定具体文件路径或使用前缀匹配(前缀匹配需直接在COPY命令中配置,而非清单内),当前写法会导致Redshift无法解析通配符对应的文件。
  2. 冗余参数干扰解析:FORMAT AS PARQUET已明确文件格式,PARQUET是自描述列存格式,不需要额外指定delimiter ',',该参数会干扰Redshift的文件解析逻辑。

解决步骤

步骤1:修正COPY命令

删除无效的delimiter ','参数,修正后命令如下:

copy dimproduct -- target table
  from 's3://redshift-load-queue/manifest.txt' -- source path
  iam_role 'arn:aws:iam::XXXX' 
  region 'us-west-2'
  FORMAT AS PARQUET;

步骤2:修复清单文件(或改用无清单写法)

选项A:生成包含所有文件的完整清单

用AWS CLI批量生成每个文件的条目,再组合成合法的manifest文件:

  1. 生成单个文件夹的文件条目(以folder1为例):
aws s3 ls s3://redshift-load-queue/folder1/ --recursive | grep ".parquet" | awk '{print "{\"url\":\"s3://redshift-load-queue/"$4"\", \"mandatory\":true}"}' > folder1_entries.txt
  1. 对folder2、folder3、folder4重复上述命令,生成各自的条目文件。
  2. 合并所有条目,整理成完整的manifest.json:
{
    "entries": [
        // 粘贴folder1_entries.txt的内容,条目间用逗号分隔
        // 粘贴folder2_entries.txt的内容
        // 粘贴folder3_entries.txt的内容
        // 粘贴folder4_entries.txt的内容
    ]
}

注意:最后一个条目后不能保留多余逗号。

选项B:直接使用COPY命令的多前缀匹配(无需清单)

如果不需要强制验证文件存在(即mandatory: true的需求),可直接在COPY命令中指定多个文件夹前缀,无需使用manifest文件:

copy dimproduct
  from 's3://redshift-load-queue/folder1/', 
       's3://redshift-load-queue/folder2/', 
       's3://redshift-load-queue/folder3/', 
       's3://redshift-load-queue/folder4/'
  iam_role 'arn:aws:iam::XXXX' 
  region 'us-west-2'
  FORMAT AS PARQUET;

步骤3:验证IAM权限

确保Redshift使用的IAM角色拥有以下权限:

  • s3:GetObject:针对s3://redshift-load-queue/*
  • s3:ListBucket:针对s3://redshift-load-queue

可通过检查角色的策略文档确认权限配置是否正确。

内容的提问来源于stack exchange,提问作者Angel D'souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:37