【发布时间】:2019-12-11 08:03:48
【问题描述】:
我想与您分享我为 Amazon Redshift 制作的东西,它是 SCD(缓慢变化的维度)Type 2.987654321@的动态合并语句
此语句假设预先存在:
- 数据库中有两个架构 - dbimports 和 repo。 dbimports 模式用作暂存区,repo 将成为 SCD 类型 2 维度和事实的目标。
- repo 和 dbimports 架构中的表具有相同的名称以及来自源数据的相同列名称。
- repo 架构中的表将具有预设的主键。
- repo 架构中的表将具有三个附加列 - scd_key、is_active、inserted_date。 scd_key 是标识列,如果未强制执行主键约束,则可以省略。
请注意,我故意没有添加 end_date 列,因为我发现它在我的特定项目的情况下不可用。
这个语句的作用:
- 在 repo 架构中使用一个参数 (table_name varchar(256)) 创建一个存储过程。
- 从 table_name 参数中动态获取要合并的表名,并对 repo 模式中 dbimports 表与其镜像表之间的匹配行的 is_active 标志列(设置为 0)执行 UPDATE 语句。
- 动态定义 UPDATE 语句的连接条件。
- 在 is_active 标志设置为 1 和当前日期 (GETDATE()) 的情况下,从 dbimports 到 repo 架构进行 INSERT * INTO。
我知道如果您在普通 SQL 环境中构建它,这不是一项艰巨的任务,但您可能知道,Redshift 的 SQL 是“高度修改的”。这意味着大多数普通 SQL 的功能都像变量和触发器一样被删除,这使得这项任务很难弄清楚(至少对我来说是这样)。
希望这对任何人都有帮助。祝你好运。
【问题讨论】:
标签: sql amazon-redshift