我在 MySQL 中的输入表有 2000 万条记录,而在 Oracle 中的目标表是空的。我需要将整个表从 MySQL 加载到 Oracle 中。我只是使用表输入和表输出步骤。
我的目的不是在阅读时长时间锁定源表。
我试图实现的负载(记录数)有问题吗?
我可以在表输出中看到 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/