Snowflake cloud data platform 复制包含阿拉伯文本的数据行的S3文件会导致记录结束,复制失败

Snowflake cloud data platform 复制包含阿拉伯文本的数据行的S3文件会导致记录结束,复制失败,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我将一个表从Redshift卸载到S3。该表有212列宽。某些行中的某些字段包含阿拉伯语文本 下面是我使用的Redshidt Unload命令: unload ('select * from dataw.testing') to 's3://uarchive-live/rpt_all/rpt_all.txt' iam_role 'arn:aws:iam::12345678988:role/service-role' GZIP DELIMITER '\t' null as '' ; 当我试图将

我将一个表从Redshift卸载到S3。该表有212列宽。某些行中的某些字段包含阿拉伯语文本

下面是我使用的Redshidt Unload命令:

unload ('select * from dataw.testing')
to 's3://uarchive-live/rpt_all/rpt_all.txt'
iam_role 'arn:aws:iam::12345678988:role/service-role'
GZIP 
DELIMITER '\t'
null as ''
;
当我试图将此文件复制到Snowflake中时,出现了一个错误

预期解析列“RPT_ALL”[“AUTO_TRAF_RETR_CNT”:211]“RPT_ALL”[u 250/RPT_ALL.txt0000_part_113.gz],第9684行,字符1187行,第9684列,“RPT_ALL”[“AUTO_TRAF_RETR_CNT”:211]时到达记录末尾

错误中引用的字段名不是记录中的最后一个字段,在该字段之后还有两个字段

我从字段中删除了阿拉伯文文本并将其留空,然后再次尝试复制,这次复制没有错误

以下是我使用的雪花文件格式:

CREATE FILE FORMAT IF NOT EXISTS "DEV"."PUBLIC"."ff_noheader" TYPE = 'CSV' RECORD_DELIMITER = '\n' FIELD_DELIMITER = '\t' SKIP_HEADER = 0 COMPRESSION = 'GZIP' TIMESTAMP_FORMAT = 'AUTO' TRIM_SPACE = TRUE REPLACE_INVALID_CHARACTERS = TRUE;
COPY INTO "DEV"."PUBLIC"."RPT_ALL" FROM @"stg_All"/snowflk_test.csv FILE_FORMAT="DEV"."PUBLIC"."ff_noheader";
下面是我正在使用的雪花复制命令:

CREATE FILE FORMAT IF NOT EXISTS "DEV"."PUBLIC"."ff_noheader" TYPE = 'CSV' RECORD_DELIMITER = '\n' FIELD_DELIMITER = '\t' SKIP_HEADER = 0 COMPRESSION = 'GZIP' TIMESTAMP_FORMAT = 'AUTO' TRIM_SPACE = TRUE REPLACE_INVALID_CHARACTERS = TRUE;
COPY INTO "DEV"."PUBLIC"."RPT_ALL" FROM @"stg_All"/snowflk_test.csv FILE_FORMAT="DEV"."PUBLIC"."ff_noheader";
我需要在Snowflake中配置什么来接受此阿拉伯语文本,以便记录的结尾不会损坏


谢谢

我不是雪花专家,但我用过它,我调试过很多类似的问题

我最初的想法是,为什么会得到意外的EOR,也就是\n,是因为您的数据包含\n。如果您的数据已\n,则读取数据时,这将看起来像EOR。我不相信有办法在Redshift UNLOAD命令中更改EOR。因此,您需要在Redshift UNLOAD命令中转义,以便在字符之前添加反斜杠,如\n。您还需要告诉Snowflake转义字符是什么-escape='\'(我认为在这个语句中需要双反斜杠)。[您可能还需要引用您的字段,但当您遇到此字段隐藏的任何问题时,您就会知道这一点。]

另一种方法是使用一种不同的卸载格式,这种格式不受重载字符含义的影响


有一种可能是因为与阿拉伯文文本相关的字符编码问题,但我认为不会,因为红移和雪花都是基于UTF-8的系统。可能,但不太可能。

谢谢您的回复。我在Redshift卸载中添加了ESCAPE参数,这次成功了。