2014-12-06 158 views
3

导入时在亚马逊红移加列我有一个表,我需要从多个CSV文件加载数据:红移与COPY

create table my_table (
    id integer, 
    name varchar(50) NULL 
    email varchar(50) NULL, 
    processed_file varchar(256) NULL 
); 

前三列指从文件中的数据。最后一列processed_filed表示从哪个文件导入记录。

我有Amazon S3中的文件,我不想用COPY命令导入它们。喜欢的东西:

COPY {table_name} FROM 's3://file-key' 
WITH CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxxx' 
DATEFORMAT 'auto' TIMEFORMAT 'auto' MAXERROR 0 ACCEPTINVCHARS '*' DELIMITER '\t' GZIP; 

有没有办法用COPY命令自动填充第四processed_file列,插入的文件的名称。

我可以在COPY后做一个UPDATE语句,但是我正在处理大量的数据,所以理想情况下我希望尽可能避免这种情况。

回答

0

其实这是可能的。我正在创建并加载没有额外processed_file_name列的数据,然后添加具有默认值的列。这是完整的过程

create table my_table (
    id integer, 
    name varchar(50) NULL 
    email varchar(50) NULL, 
); 

COPY {table_name} FROM 's3://file-key' 
WITH CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxxx' 
DATEFORMAT 'auto' TIMEFORMAT 'auto' MAXERROR 0 ACCEPTINVCHARS '*' DELIMITER '\t' GZIP; 

ALTER TABLE my_table ADD COLUMN processed_file_name varchar(256) NOT NULL DEFAULT '{file-name}'; 
+1

这并不能解决您提出的问题。您将静态值添加到您默认的列中。您加载的每个文件都以相同的值结束。试试这个,而不是http://stackoverflow.com/questions/16525175/amazon-redshift-how-to-copy-from-s3-and-set-a-job-id – ensslen 2015-06-04 17:00:27

4

这是不可能的。

您需要预先处理文件(包括名称列)或在加载后更新数据(但这样很难同时从多个文件执行批量加载,这是最有效的将数据加载到Redshift的方式)。

请参阅:Redshift COPY command documentation