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 批量插入 + 编码定义的主要内容,如果未能解决你的问题,请参考以下文章

批量插入的 Redshift 查询队列使用情况

在 AWS Redshift 中插入行的简单通知

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容

AWS Redshift alter append 命令不适用于插入数据

如何编写 AWS Glue 脚本以将新数据插入 Redshift 表

在 AWS Redshift、sql 工作台中手动将数据插入表中