复制没有 table 结构的 Redshift

Copy Redshift without table structure

我想通过复制指令将暂存 table 从 S3 加载到 Redshift,然后 select 一些字段并创建最终的 table,但我不知道如何在不知道所有结构的情况下从 s3 加载文件。

让我举个例子解释一下:

我在 s3 中有我的文件

col1   col2   col3
a       1     b
b       4     c

我想要一个只有 col2 的最终 table,所以我执行以下操作:

CREATE TEMPORARY TABLE stg(col1 varchar, col2 integer, col3 varchar);
COPY stg FROM myfile
CREDENTIALS
'aws_access_key_id=***;aws_secret_access_key=***'
 NULL as '' IGNOREHEADER AS 1
;
create table FINAL as
select
              col2
from stg

我想要类似的东西(所以我不需要知道结构,只需要知道它会有 col2):

CREATE TEMPORARY TABLE stg as (
COPY stg FROM myfile
CREDENTIALS
'aws_access_key_id=***;aws_secret_access_key=***'
 NULL as '' IGNOREHEADER AS 1
);

create table FINAL as
select
              col2
from stg

你做的是正确的过程。

通过 COPY 命令加载数据时无法“跳过”列。

另一种方法是 pre-process 文件并在 将数据加载到 Redshift 之前 删除不需要的列。