Redshift 中的维度建模和 ETL

njk*_*oes 9 etl dimensional-modeling redshift

我一直在研究 Amazon 的 Redshift 数据库作为我们数据仓库未来可能的替代品。我的经验一直是使用维度建模和 Ralph Kimball 的方法,所以看到 Redshift 不支持自动递增列的串行数据类型等功能有点奇怪。

但是,AWS 大数据博客最近有一篇关于如何为星型架构优化 Redshift 的博客文章:https : //blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas -and-Interleaved-Sorting-on-Amazon-Redshift

我的问题是在 Redshift 中加载星型模式的最佳实践是什么?我在 Redshift 的任何文档中都找不到答案。

我倾向于将我的文件从 S3 导入到临时表中,然后在插入到目标表之前使用 SQL 进行诸如查找和生成代理键之类的转换。

这是其他人目前正在做的事情吗?是否有值得花钱的 ETL 工具使这更容易?

小智 9

使用 Kimball 而不是使用 Redshift,您肯定走在正确的轨道上。

这有很多模式,我在不同的用例中都使用过它们

  1. “ELT”模式 - 将源表完全加载到红移,在加载数据之前不要进行任何重大转换。为此,您可以加载到 s3,然后使用 redshift copy 命令,或者我建议使用“AWS 数据迁移服务”,它可以将源(例如 mysql 或 postgres)同步到目标(例如 redshift)然后,定期运行sql 在 redshift 中处理以填充暗淡然后是事实。如果您愿意,您可以使用第三方基于云的工具来“简化”此过程 - 例如 Matillion(我不建议使用第三方工具)
  2. “ETL 模式” - 使用 apache spark 转换飞行中的数据。并将暗淡和事实加载到 redshift spark->s3->redshift 中。我为此使用了 EMR,这很好。如果您使用 AWS Glue,这也是采用的方法
  3. 不要变形!- 类似于 1) 但只使用已加载的表。

请注意,如果您有一个包含重复值而不是事实和维度的宽表,Redshift 有时会更好地工作。这样做的原因是柱状方法让 Redshift 将不同的值压缩到一个非常有效的水平。我没有一个公式来说明何时使用多个维度与平坦的宽桌,唯一的方法就是尝试看看!

一些链接

适用于 Redshift taret 的 AWS DMS

AWS 胶水


Sam*_*Sam 1

我认为从 S3 加载是一种常见的模式。

我们需要强制执行唯一性约束,因此我们选择写入 Postgres,然后每 10 分钟将新数据复制到 Redshift。

我们使用https://github.com/uswitch/blueshift加载到 Redshift。