从 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_S3LOG
。 STL_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 时出错