当我尝试将数据从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)处理失败,而不是使整个文件失败?
答案 0 :(得分:0)
花了一天时间解决类似问题,并没有办法在COPY命令上强制输入类型。我正在用Pandas构建我的实木复合地板文件,并且不得不将数据类型与Redshift中的数据类型进行匹配。对于整数,我将Redshift BIGINT设置为int64熊猫。同样,我不得不将NUMERIC列更改为DOUBLE PRECISION(Pandas float64)。
文件整体失败,因为用于柱状文件(如镶木地板)的COPY命令复制整个列,然后移至下一个。因此,没有办法使每一行失败。参见AWS Documentation。