如何在源文件中缺少分隔符时复制数据

时间:2017-06-28 07:04:46

标签: amazon-web-services amazon-redshift

假设我有一张4张红色转换表,其中 4列为:

Create Table m.mytab(
 col_1 BIGINT NOT NULL
 col_2 Varchar(200)
 col_3 Varchar(200)
 col_4 INT
);

我的源行文件包含以下数据:

 col_1^col_2^col_3^col_4
 myrowdata1^myrowdata2
 myrowdata3^myrowdata4
 .....

在这里,我想在mytab中加载此数据,我尝试使用redshift copy command作为:

copy m.mytab
from 's3://mybucket/folder/fileA.gz '
credentials 'aws_access_key_id=somexxx;aws_secret_access_key=somexxx'
DELIMITER '^'
GZIP
IGNOREHEADER 1
ACCEPTINVCHARS;

由于每行都缺少最后一个 2分隔符,我无法在此处加载数据,有人可以建议我如何解决此问题吗?

由于

1 个答案:

答案 0 :(得分:1)

1)尝试将FILLRECORD参数添加到COPY语句

有关详细信息,请参阅Data Conversion Parameters文档

2)如果所有行都缺少col3和col4,您只需创建一个仅包含col1和col2的临时表,将数据复制到临时表,然后发出

ALTER TABLE target_tablename
APPEND FROM staging_tablename
FILLTARGET;

这将非常有效地将数据移动到target_tablename(只需更改指针而不写入或删除数据)并注意缺少col3和col4。

有关该命令的更多信息:ALTER TABLE APPEND