RedShift不支持任何约束。他们不支持强制执行反对意见等反对意见。他们只有信息限制。
如何在RedShift中维护参照完整性?我们是否必须手动放置一堆触发器?
答案 0 :(得分:3)
您必须接受检查ETL中约束的负担,并权衡给定约束的重要性。
经典'数据仓库场景数据主要来自传统的基于行的DB,其中强制执行数据完整性。在这种情况下,Redshift用于提供速度和/或比例,并且约束检查不是优先考虑的事项。
在一个现代的'数据湖情景数据主要来自非关系源,并且通常至少有一次"交付特征,例如,预计会有一定量的重复。
在我的Redshift每小时加载ETL中,我执行以下操作(每天添加1亿行或更多行):
ANALYZE merge_table;
SELECT COUNT(*) - COUNT(DISTINCT pk_col) FROM merge_table;
SELECT COUNT(*) - COUNT(DISTINCT pk_col) FROM merge_table WHERE timestamp_col >= {new_data_start_timestamp};
timestamp_col
定义为SORTKEY
。答案 1 :(得分:1)
触发器是一种选择,但它们在Redshift中也不受支持。假设您正在使用Redshift进行数据仓库功能,那么您的ETL过程就会受到影响,以确保数据保持参照完整性。