如何在红移中保持参照完整性?

时间:2016-03-06 23:21:39

标签: sql amazon-redshift

RedShift不支持任何约束。他们不支持强制执行反对意见等反对意见。他们只有信息限制。

如何在RedShift中维护参照完整性?我们是否必须手动放置一堆触发器?

2 个答案:

答案 0 :(得分:3)

您必须接受检查ETL中约束的负担,并权衡给定约束的重要性。

经典'数据仓库场景数据主要来自传统的基于行的DB,其中强制执行数据完整性。在这种情况下,Redshift用于提供速度和/或比例,并且约束检查不是优先考虑的事项。

在一个现代的'数据湖情景数据主要来自非关系源,并且通常至少有一次"交付特征,例如,预计会有一定量的重复。

在我的Redshift每小时加载ETL中,我执行以下操作(每天添加1亿行或更多行):

  • 合并表:(几百万到几亿行)
    • 执行合并
    • 分析表(每张表需要2-10秒)ANALYZE merge_table;
    • 验证PK:SELECT COUNT(*) - COUNT(DISTINCT pk_col) FROM merge_table;
      • 每桌2-10秒,速度惊人。
  • 仅附加表格:(数十亿行)
    • 执行追加
    • 不要分析(太慢,没必要)
    • 仅在新数据范围内验证PK:SELECT COUNT(*) - COUNT(DISTINCT pk_col) FROM merge_table WHERE timestamp_col >= {new_data_start_timestamp};
      • 请注意,您希望将timestamp_col定义为SORTKEY
      • 只要使用排序键,只需几秒钟。

答案 1 :(得分:1)

触发器是一种选择,但它们在Redshift中也不受支持。假设您正在使用Redshift进行数据仓库功能,那么您的ETL过程就会受到影响,以确保数据保持参照完整性。