AWS Redshift 批量插入 + 编码定义
Posted
技术标签:
【中文标题】AWS Redshift 批量插入 + 编码定义【英文标题】:AWS Redshift Bulk Insert + Encoding definition 【发布时间】:2014-06-19 16:38:26 【问题描述】:是否可以在定义数据类型和编码的同时使用create table as
语法对 REdshift 进行批量插入?正确的语法是什么?
EG 以下给出'as'附近的语法错误:
create table my_table (
a int not null encode runlength,
b int not null encode runlength
) distkey(a) sortkey (a, b) as (
select * from other_table
);
我只能通过仅定义列名(a 或 b)来使其工作,这是一个巨大的限制......
【问题讨论】:
您在寻找COPY
吗?
不这么认为。 COPY 仅来自 S3,对吗?
【参考方案1】:
您可以像这样在 CREATE TABLE ... AS 查询中指定 DIST 和 SORT 键:
CREATE TABLE new_table
DISTSTYLE KEY
DISTKEY ( my_dist )
SORTKEY ( my_sort )
AS
SELECT *
FROM old_table
;
根据文档:http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_AS.html 我不相信您可以使用 CREATE TABLE AS 更改源表中的压缩编码。
【讨论】:
【参考方案2】:此处提供了有关 Redshift CTAS 的更多详细信息:http://docs.aws.amazon.com/redshift/latest/dg/r_CTAS_usage_notes.html。简而言之,它没有提到您可以在 CTAS 语句中定义编码。但是您可以定义排序键和哈希键。此语句选择的默认编码为无。
但是,如果您想进行批量插入,为什么不分两步进行。
-
使用您的编码和排序/哈希键创建表 new_table
作为 select * from old_table 插入 new_table
【讨论】:
以上是关于AWS Redshift 批量插入 + 编码定义的主要内容,如果未能解决你的问题,请参考以下文章
AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容
AWS Redshift alter append 命令不适用于插入数据