如何使用 Pentaho 处理 Amazon Redshift 中缓慢变化的维度?

Posted

技术标签:

【中文标题】如何使用 Pentaho 处理 Amazon Redshift 中缓慢变化的维度?【英文标题】:How to handle Slowly Changing Dimension in Amazon Redshift using Pentaho? 【发布时间】:2016-05-18 20:43:26 【问题描述】:

由于 Amazon Redshift 针对读取而不是写入进行了优化,我如何使用 ETL 工具(在我的情况下为 Pentaho 数据集成)管理渐变维度过程?

由于 ETL 工具会逐行进行更新/插入(维度查找/更新),因此性能会非常低。

有人遇到过这个问题吗?

【问题讨论】:

实际更改/插入的维度行的百分比是多少?如果百分比很小(Dimension Lookup/Update 步骤可能没问题。 【参考方案1】:

Redshift 中的更新很慢,因为更新是在事务中执行的一系列操作:

    选择要更新到临时表中的行 删除这些行 根据更新条件更新临时表中的那些行 将更新的行追加到原始表中

所有这些都必须跨节点协调。

更新单行所需的时间可能与更新 1000 行一样长。更糟糕的是,由于更新时间过长并且需要写锁,它们会长时间阻塞查询,从而显着影响整体系统性能。

有 3 种方法可以让它更快(全部来自经验):

    避免更新。

    如果您有一个条件可以让您区分新行和旧行,只需将新行附加到表中,然后使用该条件修改您的查询。您会惊讶地发现 Redshift 的执行速度更快 - 即使每个查询可能变得有点复杂,因为没有更新会导致系统过载,这些查询可能会运行得更快(确保 dist 键是正确的)。

    例如,每个业务密钥的最大时间戳条件运行得非常快(尤其是如果您的业务密钥是您的 dist 密钥 - 这一切都将并行运行)。

    这是最好的解决方案。

    批量执行更新。

    如果您的更新适用于一系列行,请使用 where 条件一次更新它们。 1000 批次效果很好,但您的里程可能会有所不同。

    创建一个存储“新”行的表,然后在该表至少有 1000 行大后使用连接进行更新。

【讨论】:

以上是关于如何使用 Pentaho 处理 Amazon Redshift 中缓慢变化的维度?的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho 数据集成:错误处理

如何在 Amazon Elastic Mapreduce 之上使用 Hive 来处理 Amazon Simple DB 中的数据?

Pentaho Dashboard Error 处理组件

如何存储一行中的变量以在 Pentaho 水壶中的后续行中使用?

Pentaho 通用错误处理脚本

如何从 Amazon SES 检索响应?