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

Redshift导入S3 Parquet含binary列报错Assert code:1000求助

解决Redshift COPY Parquet时Binary列的类型错误问题

问题分析

你遇到的Assert code: 1000 context: Reached unreachable code - Invalid type: 6551错误,本质是Athena定义的binary列在Parquet文件中的存储格式,与Redshift的varbyte类型解析逻辑不兼容导致的。虽然两者理论上都对应Parquet的BYTE_ARRAY类型,但Athena生成Parquet文件时可能给binary列添加了额外元数据标记,导致Redshift无法正确识别类型。

解决方案

1. 确认Parquet文件的实际列类型

用parquet-tools工具查看目标Parquet文件的schema,验证binarycol的类型是否为BYTE_ARRAY:

parquet-tools schema s3://<your-s3-path>/target-file.parquet

如果输出中binarycol的类型是optional byte_array binarycol,说明类型本身没问题,问题出在解析逻辑。

2. 显式指定COPY命令的列列表

尝试在COPY命令中明确列出所有列,强制Redshift按指定顺序和类型映射解析:

COPY redshiftschema.tablename (id, col1, col2, col3, col4, binarycol)
FROM 's3://<path>/<tablename>.manifest'
iam_role 'redshift-role'
FORMAT AS PARQUET
manifest;

3. 通过Athena中转导出兼容格式

如果直接COPY仍报错,用Athena作为中间层重新生成Redshift兼容的Parquet文件:

  • 执行Athena的UNLOAD命令,将数据导出到临时S3路径:
UNLOAD ('SELECT * FROM your-athena-tablename')
TO 's3://<temp-s3-path>/export-'
IAM_ROLE 'arn:aws:iam::your-account-id:role/your-athena-role'
FORMAT PARQUET;
  • 再用COPY命令从临时路径导入Redshift:
COPY redshiftschema.tablename
FROM 's3://<temp-s3-path>/export-'
iam_role 'redshift-role'
FORMAT AS PARQUET;

4. 检查Redshift集群版本

旧版本Redshift对Parquet的BYTE_ARRAY类型支持存在bug,将集群升级到最新可用版本后重试。

内容的提问来源于stack exchange,提问作者Hamza E. Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:25:27