从 Parquet S3 复制到 Redshift 和十进制与 int 类型

Posted

技术标签:

【中文标题】从 Parquet S3 复制到 Redshift 和十进制与 int 类型【英文标题】:COPY from Parquet S3 into Redshift and decimal vs. int types 【发布时间】:2019-03-06 22:47:23 【问题描述】:

我在尝试将数据从 S3 中的 Parquet 复制到 Redshift 时遇到此错误:

S3 Query Exception (Fetch). Task failed due to an internal error. File
 'https://...../part-00000-xxxxx.snappy.parquet  
has an incompatible Parquet schema for column 's3://table_name/.column_name'. 
Column type: INT, Parquet schema:
optional fixed_len_byte_array COLUMN_NAME

我怀疑这是因为 Parquet 文件的数字/十进制类型具有比 INT 列更精确的精度,但我相信所有实际值都在它们适合的范围内。 (错误没有指定行号。)

有没有办法强制在 COPY 上进行类型转换,并在单个行的基础上处理失败(如 CSV)而不是使整个文件失败?

【问题讨论】:

pg_catalog.stl_load_errors 中是否有与此负载相关的行? 以上错误来自SVL_S3LOGSTL_LOAD_ERRORS 为空。 【参考方案1】:

在类似的问题上花了一天时间,发现无法在 COPY 命令上强制类型。我正在使用 Pandas 构建镶木地板文件,并且必须将数据类型与 Redshift 中的数据类型匹配。对于整数,我有 Pandas int64 和 Redshift BIGINT。同样,我必须将 NUMERIC 列更改为 DOUBLE PRECISION (Pandas float64)。

文件作为一个整体失败,因为柱状文件(如镶木地板)的 COPY 命令会复制整个列,然后移动到下一列。所以没有办法让每一行都失败。见AWS Documentation。

【讨论】:

谢谢,这很有帮助

以上是关于从 Parquet S3 复制到 Redshift 和十进制与 int 类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3

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

将 csv 文件从 s3 复制到 redshift 的问题

从 s3 复制到 redshift

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

将文件(带有特定后缀)从 S3 复制到 Redshift