如何在 Copy commd 中使用反斜杠字符将 s3 csv gz 文件加载到 Redshift

Posted

技术标签:

【中文标题】如何在 Copy commd 中使用反斜杠字符将 s3 csv gz 文件加载到 Redshift【英文标题】:How to load s3 csv gz file to Redshift in Copy commd with backslash character 【发布时间】:2018-04-13 03:31:29 【问题描述】:

一个s3文件是*.csv.gz,它以逗号分隔,但有些行有一些特殊的词。

CSV 文件数据样本: doc_key,doc_name,doc_brand,brand_inc,etl_load_date 8a14eff760993c84d2306b3547fc6bea,几乎加利福尼亚,美国,未知,2018-02-28 1fd23373942c9ffcdfc7223cd1114ee1,"ARIZONA \"9\" LLC",美国,未知,2018-02-28

从 's3://path/' 复制 stg.train_ticket 凭证'aws_access_key_id=aws_access_key_id;aws_secret_access_key=aws_secret_access_key' TRIMBLANKS TRUNCATECOLUMNS ACCEPTINVCHARS 日期格式为“自动” GZIP csv quote as '"' delimiter ',' IGNOREHEADER as 1;

我在 sqlworkbench 上运行了复制 cmd 并得到错误: 执行 SQL 命令时出错: 从 's3://path/' 复制 stg.train_ticket CREDENTIALS 'aws_access_key_id=aws_access_key_id;aws_secret_access...

亚马逊无效操作:加载到表“train_ticket”失败。检查'stl_load_errors'系统表以获取详细信息。 1 条语句失败。

检查了这个表 stl_load_errors 和详细的错误信息: 列:doc_name err_reason:CSV 的报价格式无效 raw_field_value:亚利桑那州\ 错误代码:1214

谁能帮忙看看如何转义反斜杠?

谢谢 汤姆

【问题讨论】:

【参考方案1】:

尝试用另一个反斜杠转义它。 即用\\word替换\word

【讨论】:

【参考方案2】:

您使用一些正则表达式或转义配置来更正您的数据,如果您根本无法做到这一点,请在您的复制命令中完全使用以下选项。

MAXERROR XXXXX(一些 X 数小于 1,00,000)。 例如

 copy stg.train_ticket from 's3://path/' CREDENTIALS 'aws_access_key_id=aws_access_key_id;aws_secret_access_key=aws_secret_access_key' TRIMBLANKS TRUNCATECOLUMNS ACCEPTINVCHARS dateformat as 'auto' GZIP csv quote as '"' delimiter ',' IGNOREHEADER as 1 MAXERROR as 10000;

这将使您能够继续加载数据,请参阅 followingAmazon RedShift 文档了解更多信息。虽然这是快速修复,但最终您必须设置一些逻辑来纠正您的数据转义问题。

【讨论】:

以上是关于如何在 Copy commd 中使用反斜杠字符将 s3 csv gz 文件加载到 Redshift的主要内容,如果未能解决你的问题,请参考以下文章

PHP中如何将反斜杠()替换为正斜杠(/)

如何使用单个反斜杠转义字符串的特殊字符

如何去掉Json字符串中反斜杠

如何将反斜杠替换为字符串Python中的不同字符

为啥JSON字符串当中会出现反斜杠?

如何将带有双反斜杠的字符串转换为单反斜杠