2016-05-18 26 views
1

由于Amazon Redshift已针对阅读而非书写进行了优化,因此如何使用ETL工具管理渐变维度过程,在我的案例中是Pentaho数据集成?如何使用Pentaho处理在Amazon Redshift中缓慢变化的维度?

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

有没有人已经通过这个问题?

+0

实际上将更改/插入的维数行的百分比是多少?如果百分比很小(<20%左右),“尺寸查找/更新”步骤可能会很好。 –

+0

我正面临同样的怀疑。让PDI维护本地MySQL实例中的维度表可能会更快,然后每次都在Redshift中执行截断和完全加载。你是怎么做到的? – GGGforce

回答

1

在红移更新缓慢,因为更新是在事务执行的操作的顺序:要更新到一个临时表

  • 删除这些行
  • 更新

    1. 选择行的行在临时表中根据更新条件
    2. 将更新行追加到原表

    所有必须在节点间进行协调。

    更新单个行可能需要更新1000行。更糟的是,由于更新时间太长且需要写入锁定,因此它们会长时间阻止查询,从而严重影响整个系统的性能。

    有3种方式,使其更快(全部来自经验):

    1. 避免更新。

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

      例如,每个业务密钥的最大时间戳条件出人意料地运行得非常快(特别是如果您的业务密钥是您的远程密钥 - 这一切都将并行运行)。

      这是最好的解决方案。

    2. 分批执行更新。

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

    3. 创建一个表,在其中存储“新”行,然后在该表至少1000行之后使用连接进行更新。