复制没有 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 之前 删除不需要的列。
我想通过复制指令将暂存 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 之前 删除不需要的列。