从 S3 复制到 Redshift 不识别换行符
Posted
技术标签:
【中文标题】从 S3 复制到 Redshift 不识别换行符【英文标题】:COPY from S3 to Redshift not recognizing newline 【发布时间】:2015-06-29 19:38:12 【问题描述】:我正在尝试从 S3 存储桶向 Redshift PostgreSQL 表运行 COPY 命令,但出现以下错误(在 stl_load_errors 中):
err_code: 1207
err_reason: Invalid digit, Value '2', Pos 3, Type: Short
raw_field_value:
2
2/28/15
该文件有 2 行:
2/28/15,手机,android,0,1,3,2,2
2/28/15,手机,Android,0,4,1,2,2
CREATE TABLE
代码是:
create table aggregate_table( date date, variable varchar(15),source varchar(15), prepaid smallint, direction smallint, total smallint, carrier smallint, carrier_group smallint)
似乎换行符未被识别,并试图将第一行的结尾和第二行的开头作为一个值读取。我尝试过使用delimiter ','
和escape
,但似乎没有任何效果。
感谢您的帮助!
编辑:这是 COPY 命令(我也试过用 escape
结尾)
COPY aggregate_table FROM 's3://path_to_file.csv' CREDENTIALS 'aws_access_key_id=XXXX;aws_secret_access_key=XXXXX' CSV delimiter ',' DATEFORMAT AS 'MM/DD/YY';
【问题讨论】:
【参考方案1】:您需要将DATEFORMAT AS 'MM/DD/YY'
添加到您的COPY 命令中。否则 redshift 无法正确解析第一列中的日期,正如它所期望的 YYYY-MM-DD
。
请参阅http://docs.aws.amazon.com/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html 了解更多详情。
【讨论】:
感谢@quardome,但我遇到了同样的错误 我相信您也需要添加一个 CSV 选项。 我也试过了,不幸的是遇到了同样的错误 @zebrainatree,我刚刚验证它对我来说端到端有效(创建表,上传到 s3,复制)。全部使用您上面的确切命令。【参考方案2】:@quarterdome 感谢您与我一起解决这个问题!在你指出它有效之后,我又从头到尾尝试了一遍。事实证明,当我保存没有 .csv 扩展名的文件时,它起作用了! -
【讨论】:
以上是关于从 S3 复制到 Redshift 不识别换行符的主要内容,如果未能解决你的问题,请参考以下文章