【发布时间】:2016-03-06 23:21:39
【问题描述】:
RedShift 不支持任何约束。它们不支持强制约束,例如引用约束。它们只有信息限制。
如何在 RedShift 中维护参照完整性?我们是否必须手动放置一堆触发器?
【问题讨论】:
标签: sql amazon-redshift
RedShift 不支持任何约束。它们不支持强制约束,例如引用约束。它们只有信息限制。
如何在 RedShift 中维护参照完整性?我们是否必须手动放置一堆触发器?
【问题讨论】:
标签: sql amazon-redshift
您必须承担检查 ETL 中约束的负担,并权衡给定约束的重要性。
在“经典”数据仓库场景中,数据主要来自传统的基于行的数据库,其中强制执行数据完整性。在这种情况下,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。【讨论】:
触发器是一个选项,但 Redshift 也不支持它们。假设您将 Redshift 用于数据仓库功能,您的 ETL 流程将有责任确保数据保持引用完整性。
【讨论】: