Redshift 中的维度建模和 ETL
Dimensional Modeling and ETL in Redshift
我一直在研究 Amazon 的 Redshift 数据库作为我们数据仓库未来可能的替代品。我的经验一直是使用维度建模和 Ralph Kimball 的方法,所以看到 Redshift 不支持自动递增列的串行数据类型等功能时有点奇怪。
但是,AWS 大数据博客中的这篇最新博客 post 介绍了如何针对星型模式优化 Redshift:
https://blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas-and-Interleaved-Sorting-on-Amazon-Redshift
我的问题是关于在 Redshift 中加载星型模式的最佳做法是什么?我在 Redshift 的任何文档中都找不到这个答案。
我倾向于将我的文件从 S3 导入暂存表,然后使用 SQL 进行转换,例如在插入目标表之前进行查找和生成代理键。
这是其他人目前正在做的吗?是否有物有所值的 ETL 工具来简化此操作?
这是我使用的最佳实践:
- 将事件源的原始数据加载到table。
- 以 DWH 事实 table.
的格式将业务逻辑应用到阶段 table
- 通过运行 minus staging 中不同值的命令减去维度table.
找到新的维度值
- 在维度 table 中创建新行以使用事实数据或默认值实现参照完整性。
- 将暂存中的行添加到 DWH 事实 table。
在不同的过程中,如果有来自另一个来源的附加属性到维度 table,我是 运行 通过加载到 table 的更新插入过程,然后执行并使用 join 进行更新,然后仅插入新行。
性能思维 - 只要您可以在 redshift 中或之前在 EMR 或类似工具上执行此操作,那么如果您尝试使用 ETL 工具执行此操作会更好,该工具会在 Redshift 中生成大量插入命令。
我一直在研究 Amazon 的 Redshift 数据库作为我们数据仓库未来可能的替代品。我的经验一直是使用维度建模和 Ralph Kimball 的方法,所以看到 Redshift 不支持自动递增列的串行数据类型等功能时有点奇怪。
但是,AWS 大数据博客中的这篇最新博客 post 介绍了如何针对星型模式优化 Redshift: https://blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas-and-Interleaved-Sorting-on-Amazon-Redshift
我的问题是关于在 Redshift 中加载星型模式的最佳做法是什么?我在 Redshift 的任何文档中都找不到这个答案。
我倾向于将我的文件从 S3 导入暂存表,然后使用 SQL 进行转换,例如在插入目标表之前进行查找和生成代理键。
这是其他人目前正在做的吗?是否有物有所值的 ETL 工具来简化此操作?
这是我使用的最佳实践:
- 将事件源的原始数据加载到table。
- 以 DWH 事实 table. 的格式将业务逻辑应用到阶段 table
- 通过运行 minus staging 中不同值的命令减去维度table. 找到新的维度值
- 在维度 table 中创建新行以使用事实数据或默认值实现参照完整性。
- 将暂存中的行添加到 DWH 事实 table。
在不同的过程中,如果有来自另一个来源的附加属性到维度 table,我是 运行 通过加载到 table 的更新插入过程,然后执行并使用 join 进行更新,然后仅插入新行。
性能思维 - 只要您可以在 redshift 中或之前在 EMR 或类似工具上执行此操作,那么如果您尝试使用 ETL 工具执行此操作会更好,该工具会在 Redshift 中生成大量插入命令。