由于Amazon Redshift已针对阅读而非书写进行了优化,因此如何使用ETL工具管理渐变维度过程,在我的案例中是Pentaho数据集成?如何使用Pentaho处理在Amazon Redshift中缓慢变化的维度?
由于ETL工具会逐行更新/插入(维度查找/更新),所以性能会非常低。
有没有人已经通过这个问题?
由于Amazon Redshift已针对阅读而非书写进行了优化,因此如何使用ETL工具管理渐变维度过程,在我的案例中是Pentaho数据集成?如何使用Pentaho处理在Amazon Redshift中缓慢变化的维度?
由于ETL工具会逐行更新/插入(维度查找/更新),所以性能会非常低。
有没有人已经通过这个问题?
在红移更新缓慢,因为更新是在事务执行的操作的顺序:要更新到一个临时表
所有必须在节点间进行协调。
更新单个行可能需要更新1000行。更糟的是,由于更新时间太长且需要写入锁定,因此它们会长时间阻止查询,从而严重影响整个系统的性能。
有3种方式,使其更快(全部来自经验):
避免更新。
如果您有一个条件允许您区分新旧行,只需将新行添加到表中,然后使用该条件修改查询。您会惊讶地发现Redshift的运行速度更快 - 即使每个查询可能变得稍微复杂一点,因为没有任何更新会导致系统过载,但这些查询可能运行得更快(请确保dist键正确)。
例如,每个业务密钥的最大时间戳条件出人意料地运行得非常快(特别是如果您的业务密钥是您的远程密钥 - 这一切都将并行运行)。
这是最好的解决方案。
分批执行更新。
如果您的更新适用于一系列行,请使用where条件一次全部更新它们。 1000批次运作良好,但你的里程可能会有所不同。
创建一个表,在其中存储“新”行,然后在该表至少1000行之后使用连接进行更新。
实际上将更改/插入的维数行的百分比是多少?如果百分比很小(<20%左右),“尺寸查找/更新”步骤可能会很好。 –
我正面临同样的怀疑。让PDI维护本地MySQL实例中的维度表可能会更快,然后每次都在Redshift中执行截断和完全加载。你是怎么做到的? – GGGforce