使用亚马逊管道的红移副本因缺少主键而失败

Posted

技术标签:

【中文标题】使用亚马逊管道的红移副本因缺少主键而失败【英文标题】:redshift copy using amazon pipeline fails for missing primary key 【发布时间】:2015-02-19 00:28:11 【问题描述】:

我在 S3 上有一组文件,我正试图将它们加载到 redshift 中。 我正在使用亚马逊数据管道来做到这一点。向导获取了集群、数据库和文件格式信息,但我收到错误提示需要主键才能将表中的现有字段 (KEEP_EXISTING) 保留在表中

我的表架构是:

create table public.Bens_Analytics_IP_To_FileName(  
Day date not null encode delta32k,  
IP varchar(30) not null encode text255,  
FileName varchar(300) not null encode text32k,  
Count integer not null)  
distkey(Day)  
sortkey(Day,IP);  

然后我在表上添加了一个复合主键以查看它是否可以工作,但我得到了同样的错误。

create table public.Bens_Analytics_IP_To_FileName(  
Day date not null encode delta32k,  
IP varchar(30) not null encode text255,  
FileName varchar(300) not null encode text32k,  
Count integer not null,  
primary key(Day,IP,FileName))  
distkey(Day)  
sortkey(Day,IP);  

所以我决定添加一个标识列作为最后一列并将其设为主键,但随后 COPY 操作需要输入文件中该标识列的值,这没有多大意义

理想情况下,我希望它在没有主键或复合主键的情况下工作

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

文档状况不佳。他们添加了一个“mergeKey”概念,可以是任意键(announcement、docs)。您不必在表上定义主键。

但是您仍然需要提供一个键来执行新数据与 redshift 表中现有数据之间的连接。

【讨论】:

【参考方案2】:

在编辑管道中的参数下,有一个名为:myPrimaryKeys (optional) 的字段。在此处输入您的 Pk,而不是将其添加到您的表定义中。

【讨论】:

以上是关于使用亚马逊管道的红移副本因缺少主键而失败的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊红移,sqlworkbench/j

无法使用 psycopg2 从亚马逊红移读取列类型

亚马逊红移中的上次更新查询计数

从 R 连接到亚马逊红移时出错 - Windows 10

JDBC 创建表并插入亚马逊红移时出错

从亚马逊红移中选择最大嵌套 ID