0

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

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

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

查看我的实现:

在此处输入图像描述

提前致谢!!

4

2 回答 2

1

环顾四周,一些用户说 Bulk Loader 的唯一优势是具有非常大批量(上百万)行的性能。但是有办法对付这种情况。

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

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

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

于 2018-11-13T18:02:43.743 回答
0

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

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

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

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

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

希望这会有所帮助。

于 2018-11-14T15:51:39.077 回答