我在 MySQL 中的输入表有 2000 万条记录,而在 Oracle 中的目标表是空的。我需要将整个表从 MySQL 加载到 Oracle 中。我只是使用表输入和表输出步骤。

mysql - Pentaho Table 批量输入到表输出-LMLPHP

我的目的不是在阅读时长时间锁定源表。
我试图实现的负载(记录数)有问题吗?
我可以在表输出中看到 Use batch update for inserts 选项。我在表格输入中看不到类似的东西。有没有办法在 Pentaho 中执行批处理?

最佳答案

别担心,2000 万条记录对于 PDI 来说是一个很小的数字,如果表开放输入,您将不会锁定表。这就是 Bulk load 用于输出表而不是输入表的原因。

然而,一个常见的初学者陷阱是输出表上的 Truncate table 选项。如果您运行(无意或并行处理)两次输出步骤,每个步骤都会锁定另一个步骤。永远。

加速:您可以在输入时使用 Lazy conversion 复选框,以便数据在使用之前保持字节格式。但我不确定你在一个简单的输入/输出表上赢得了什么。如果在写入输出文件时 Dates 或 Blob 出现问题,错误消息将非常神秘。

您还可以通过增加提交大小(Oracle 中最糟糕的几次试验)和增加 number of rows in row set 来提高输出速度,这将增加 table input 读取的行数。为此,右键单击任意位置,然后单击 Properties/Miscelanous

我真正建议做的事情是增加 JVM 内存大小。使用编辑器(记事本或更好)编辑名为 spoon.bat 的文件。您会在第 94-96 行附近找到一行包含诸如“-Xmx256K”之类的内容。将其更改为“-Xmx4096M”(其中 4096 是机器 RAM 大小的一半)。

执行“批处理”有很多含义。其中之一是 Make the transformation database transactional 。您可以使用上面提到的 Number of row in rowset 正下方的复选框(在 PDI 最新版本中拼写为 Make the transformation database)。选中该框后,如果出现问题,数据库的状态将回滚,就好像从未执行过转换一样。但我不建议在你的情况下这样做。

关于mysql - Pentaho Table 批量输入到表输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45328274/

10-11 09:18
查看更多