【问题标题】:Error while loading parquet format file into Amazon Redshift using copy command and manifest file使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错
【发布时间】:2019-07-09 00:40:52
【问题描述】:

我正在尝试使用清单文件加载 parquet 文件并出现以下错误。

查询:124138 由于内部错误而失败。文件 'https://s3.amazonaws.com/sbredshift-east/data/000002_0 的版本号无效:)

这是我的复制命令

从“s3://sbredshift-east/manifest/supplier.manifest”复制测试表 IAM_ROLE 'arn:aws:iam::123456789:role/MyRedshiftRole123' 拼花格式 清单;

这是我的清单文件

**{  
   "entries":[  
      {  
         "url":"s3://sbredshift-east/data/000002_0",
         "mandatory":true,
         "meta":{  
            "content_length":1000
         }
      }
   ]
}**

我可以通过指定文件名使用复制命令加载相同的文件。

从 's3://sbredshift-east/data/000002_0' IAM_ROLE 'arn:aws:iam::123456789:role/MyRedshiftRole123' FORMAT AS PARQUET 复制测试表;

信息:加载到表“供应商”已完成,800000 条记录已成功加载。 复制

我的副本声明中可能有什么问题?

【问题讨论】:

  • 您找到解决方案了吗?
  • 如果您找到解决方案,请告诉我们。我没有看到 AWS 提供的有关使用清单加载镶木地板文件的适当文档
  • 我无法让它与使用 MANIFEST VERBOSE 卸载的镶木地板文件一起使用,尝试所有建议的“内容”和“元”属性排列。我的解决方案是在没有清单的情况下重新卸载为 CSV。我的目标是更改主键列的数据类型。经过时间和数据占用的差异可以忽略不计,但此时我在 50-60 个表中的数据不足 20GB,最大行数为 5400 万。

标签: amazon-redshift parquet


【解决方案1】:

当 content_length 值错误时会发生此错误。您必须指定正确的 content_length。您可以执行 s3 ls 命令来检查它。

aws s3 ls s3://sbredshift-east/data/
2019-12-27 11:15:19        539 sbredshift-east/data/000002_0

539(文件大小)应与清单文件中的 content_lenght 值相同。

当您在直接复制命令中不需要它时,我不知道他们为什么要使用这个元值。

¯\_(ツ)_/¯

【讨论】:

    【解决方案2】:

    我得到 parquet 副本以使用清单文件的唯一方法是添加带有 content_length 的元键。

    根据我在错误日志中收集到的信息,parquet(w/manifest)的 COPY 命令可能首先使用 Redshift Spectrum 作为外部表来读取文件。如果是这种情况,这个隐藏的步骤确实需要 content_step,这与他们关于 COPY 命令的初始声明相矛盾。

    https://docs.amazonaws.cn/en_us/redshift/latest/dg/loading-data-files-using-manifest.html

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2020-09-26
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      相关资源
      最近更新 更多