亚马逊红移键不被强制执行 - 如何防止重复数据?(Amazon Redshift Keys are

2019-08-17 06:56发布

不仅是测试AWS红移 ,并且已经发现了,我会希望在重复只会失败键列插入一些欺骗数据,读取文档揭示了主键约束不会“强迫”。

任何人都想出了如何防止在主键(每“传统”的期望)重复。

由于任何红移先驱!

Answer 1:

我给你的UUID在创建记录时。 如果记录是固有的独特的,我使用类型4的UUID(随机),而当它们不是本人使用通过自然键作为输入类型5(SHA-1散列)。
然后,你可以按照这个指令通过AWS很容易进行UPSERTs。 如果输入有重复的,你应该能够通过发出SQL,看起来像这样在你的临时表来清理:

CREATE TABLE cleaned AS
SELECT
  pk_field,
  field_1,
  field_2,
  ...  
FROM (
       SELECT
         ROW_NUMBER() OVER (PARTITION BY pk_field order by pk_field) AS r,
       t.*
       from table1 t
     ) x
where x.r = 1


Answer 2:

如果来不及增加一个身份列ROWID使用( ALTER不会允许你添加一个IDENTITY在红移列),你可以这样做:

  • 获取所有重复数据删除的行到一个临时表(使用DISTINCT摆脱受骗者的)
  • 从主表中删除这些行
  • 行重新插入到主表

这里有一个例子:(假设id是你的钥匙对证愚弄,并data_table是你的表)

CREATE TEMP TABLE delete_dupe_row_list AS
    SELECT t.id FROM data_table t WHERE t.id IS NOT NULL GROUP BY t.id HAVING COUNT(t.id)>1;
CREATE TEMP TABLE delete_dupe_rows AS
    SELECT DISTINCT d.* FROM data_table d JOIN delete_dupe_row_list l ON l.id=d.id;
START TRANSACTION;
DELETE FROM data_table USING delete_dupe_row_list l WHERE l.id=data_table.id;
INSERT INTO data_table SELECT * FROM delete_dupe_rows;
COMMIT;
DROP TABLE delete_dupe_rows;
DROP TABLE delete_dupe_row_list;


Answer 3:

是啊你不能做到这一点。 从目前来看,我觉得你应该只插入重复数据(基本上是重复键)时间戳的一个额外的列。 因此,这将有一个特定行的所有版本,因为更新也镶入,而你查询红移,确保你选择最新的一个。



Answer 4:

一个快速和肮脏的方法是通过使用组

select max(<column_a>), max(<column_a>), <pk_column1>, <pk_column2>
from <table_name>
group by <pk_column1>, <pk_column2>


Answer 5:

经证实,他们不执行它:

唯一性,主键和外键约束仅供参考; 它们不是由亚马逊红移执行。 尽管如此,主键和外键被用来作为规划的提示,如果你的ETL过程中或在您的应用程序其他进程强制执行的完整性,他们应被宣布。

例如,查询规划使用某些统计计算主键和外键,可以推断,影响子查询解相关技术唯一性和引用关系,订购大量加入的,并消除冗余连接。

策划者利用这些重要的关系,但它假定在亚马逊红移表中的所有键都为加载有效。 如果您的应用程序允许无效的外键或主键,一些查询可以返回不正确的结果。 例如,如果主键不是唯一一个SELECT DISTINCT查询可能返回重复的行。 如果你怀疑其有效性不要为你的表定义键约束。 在另一方面,你应该永远当你知道它们是有效申报主键和外键和唯一性约束。

亚马逊红移不强制NOT NULL列约束。

http://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html



Answer 6:

我使用的身份自动增加我的主键。

这里有一个问题,我问在AWS论坛:

https://forums.aws.amazon.com/message.jspa?messageID=450157#450157



文章来源: Amazon Redshift Keys are not enforced - how to prevent duplicate data?