繁体   English   中英

S3 中 Parquet 清单的 Redshift 副本失败,并表示 MANIFEST 参数需要 S3 对象的完整路径

[英]Redshift copy from Parquet manifest in S3 fails and says MANIFEST parameter requires full path of an S3 object

我正在使用 Firehose 将 Parquet 格式的记录放入 S3 存储桶中。 我已经手动定义了一个胶水表。

所以我有一个清单

{
  "entries": [
    {"url":"s3://my-bucket/file1.parquet"},
    {"url":"s3://my-bucket/file2.parquet"}
  ]
}

和一个复制命令,如

COPY schema_name.table_name
FROM 's3://my-bucket/manifest.json'
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456:role/RoleWithPermissionToRedshiftAndBucket'
PARQUET
MANIFEST;

它给出了这个在 Google 上有 0 个结果的神秘错误。

[XX000][500310] [Amazon](500310) Invalid operation: COPY with MANIFEST parameter requires full path of an S3 object.
Details:
-----------------------------------------------
error:  COPY with MANIFEST parameter requires full path of an S3 object.
code:      8001
context:
query:     23514459
location:  scan_range_manager.cpp:795
process:   padbmaster [pid=108497]
-----------------------------------------------;

在我看来,我肯定指定了完整路径,所以我不确定发生了什么。

错误的一件事是存储桶位于不同的区域,这也会阻止它工作。

您可能会收到此错误消息的一个原因是该存储桶是否在另一个 aws 账户中。

但实际上为我修复的是将 content_length 添加到清单中,因为镶木地板需要它。

{
  "entries": [
    {
      "url":"s3://my-bucket/file1.parquet",
      "mandatory":true,
      "meta":{
        "content_length":2893394
      }
    },
    {
      "url":"s3://my-bucket/file2.parquet",
      "mandatory":true,
      "meta":{
        "content_length":2883626
      }
    }
  ]
}


显然,如果您不考虑 content_length,您将收到一条不相关的错误消息。 这家伙犯了同样的错误并收到一条错误消息说

File has an invalid version number

使用复制命令和清单文件将镶木地板格式文件加载到 Amazon Redshift 时出错

确保您设置了正确的 CREDENTIALS 或 IAM_ROLE。

我通过更改我的 IAM_ROLE 修复了这个完全相同的错误COPY with MANIFEST parameter requires full path of an S3 objectCOPY with MANIFEST parameter requires full path of an S3 object - 从一个没有权限加载到这个表的角色。

(这方面的 Redshift 错误消息不好)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM