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

AWS Redshift Spectrum读取Apache Parquet文件报错求助

问题原因排查与解决方法

问题原因

错误核心是数据类型不匹配:

  • Pandas读取CSV时,默认会把整数列识别为int64(64位整数)类型,导出Parquet文件时会保留该类型。
  • 你在Redshift Spectrum中定义的id列类型为integer,而Redshift的integer对应32位整数(int32),和Parquet文件里的int64类型不兼容,因此触发Spectrum扫描错误。

解决方法

提供两种可行方案:

方案1:调整Parquet导出时的数据类型

在Pandas导出前,将id列强制转换为32位整数,修改后的代码如下:

import pandas as pd

df = pd.read_csv('./data/students.csv')
# 将id列转为int32类型,匹配Redshift的integer类型
df['id'] = df['id'].astype('int32')
df.to_parquet('students.parquet')

重新生成Parquet文件并上传至S3后,执行查询即可正常运行。

方案2:修改Redshift外部表的列类型

将表定义中的id列类型改为bigint(Redshift的bigint对应64位整数,与Parquet的int64类型匹配),调整后的建表语句:

create external table imp.s1 (
id bigint,
name varchar(255),
gender varchar(255)
)
stored as PARQUET 
location 's3://sample/students/';

注:若原表已存在,需先删除原表再重新创建,或通过alter table语句调整列类型(部分场景下需重建表)。

内容的提问来源于stack exchange,提问作者WAEX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:55:24