【问题标题】:Incremental upload/update to PostgreSQL table using Pentaho DI使用 Pentaho DI 增量上传/更新到 PostgreSQL 表
【发布时间】:2018-11-11 18:20:56
【问题描述】:

我在 Pentaho 数据集成中有以下流程来读取 txt 文件并将其映射到 PostgreSQL 表。

我第一次运行此流程时一切正常,表格已填充。但是,如果稍后我想对同一个表进行增量更新,我需要截断它并再次运行流程。有什么方法可以让我只加载新的/更新的行吗?

在 PostgreSQL Bulk Load 操作符中,我只能看到“Truncate/Insert”选项,这非常低效,因为我的表非常大。

查看我的实现:

提前致谢!!

【问题讨论】:

    标签: postgresql pentaho-data-integration incremental-build


    【解决方案1】:

    四处寻找可能性,一些用户说 Bulk Loader 的唯一优势是具有非常大批量(上百万)行的性能。但是有办法解决这个问题。

    尝试使用 Table output 步骤,批量大小(步骤中的“提交大小”)为 5000,并更改执行步骤的副本数(取决于处理器的内核数有)说,4 个副本(双核 CPU 与 2 个逻辑核心 ea。)。您可以通过右键单击 GUI 中的步骤并设置所需的数量来更改份数。

    这会将输出并行化为 4 组插入,每个“循环”有 5000 行。如果这会导致 JVM 中的内存过载,您可以轻松地调整它并增加选项 PENTAHO_DI_JAVA_OPTIONS 中的内存使用量,只需将 Xms(最小值)和 XmX(最大值)上设置的数量加倍,我的设置为“-Xms2048m”“ -Xmx4096m"。

    我发现此步骤和 PostgreSQL 的唯一特点是您需要在该步骤中指定数据库字段,即使传入的行具有与表完全相同的布局。

    【讨论】:

    • 我认为要求是增量加载,而不是批量加载。请找到我的答案。你认为这是正确的做法吗?
    • 啊,是的,这错过了我的视线,因为这个“合并后同步”步骤更好,我会尽快编辑我的答案,或者如果你知道如何编辑你的答案步骤有效。否则,插入/更新步骤也可以正常工作,只是合并后同步处理插入/更新/删除。如果不需要删除,插入/更新将完全一样。
    【解决方案2】:

    您正在寻找增量负载。你可以通过两种方式做到这一点。

    1. 有一个名为“插入/更新”的步骤,这将用于进行增量加载。

    您可以选择指定要比较的关键列。然后在字段部分下选择“Y”进行更新。请为您在键比较下选择的那些列选择“N”。

    1. 使用表格输出并取消选中“截断表格”选项。从源表中检索数据时,在 where 子句中使用变量。首先从目标表中获取最大值并将该值设置为变量并包含在查询的 where 子句中。

    在这里编辑.. 如果您的数据源是平面文件,那么正如我所说,从目标表中获取最大值(日期/整数)并加入您的数据。之后使用过滤器行来获取增量数据。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2021-05-10
      • 2023-03-28
      相关资源
      最近更新 更多