我在 Pentaho 数据集成中有以下流程来读取 txt 文件并将其映射到 PostgreSQL 表。
我第一次运行此流程时,一切正常,表格被填充。但是,如果稍后我想对同一个表进行增量更新,我需要截断它并再次运行流程。有什么方法可以让我只加载新的/更新的行吗?
在 PostgreSQL Bulk Load 操作符中,我只能看到“Truncate/Insert”选项,这是非常低效的,因为我的表非常大。
查看我的实现:
提前致谢!!
我在 Pentaho 数据集成中有以下流程来读取 txt 文件并将其映射到 PostgreSQL 表。
我第一次运行此流程时,一切正常,表格被填充。但是,如果稍后我想对同一个表进行增量更新,我需要截断它并再次运行流程。有什么方法可以让我只加载新的/更新的行吗?
在 PostgreSQL Bulk Load 操作符中,我只能看到“Truncate/Insert”选项,这是非常低效的,因为我的表非常大。
查看我的实现:
提前致谢!!
环顾四周,一些用户说 Bulk Loader 的唯一优势是具有非常大批量(上百万)行的性能。但是有办法对付这种情况。
尝试使用表输出步骤,批量大小(步骤中的“提交大小”)为 5000,并更改执行该步骤的副本数(取决于您的处理器拥有的内核数),例如 4 个副本(双核CPU 具有 2 个逻辑内核 ea。)。您可以通过右键单击 GUI 中的步骤并设置所需的数量来更改份数。
这会将输出并行化为 4 组插入,每个“循环”有 5000 行。如果这会导致 JVM 中的内存过载,您可以轻松地调整它并增加选项 PENTAHO_DI_JAVA_OPTIONS 中的内存使用量,只需将 Xms(最小值)和 XmX(最大值)上设置的数量加倍,我的设置为“-Xms2048m”“ -Xmx4096m”。
我在此步骤和 PostgreSQL 中发现的唯一特点是您需要在该步骤中指定数据库字段,即使传入的行具有与表完全相同的布局。
您正在寻找增量负载。你可以通过两种方式做到这一点。
您可以选择指定要比较的关键列。然后在字段部分下选择“Y”进行更新。请为您在键比较下选择的那些列选择“N”。
在这里编辑..如果您的数据源是平面文件,那么正如我所说,从目标表中获取最大值(日期/整数)并加入您的数据。之后使用过滤器行来获取增量数据。
希望这会有所帮助。