Pentaho Table 批量输入到 table 输出

Pentaho Table input to table output in batches

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

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

别担心,2000 万条记录对于 PDI 来说是一个小数字,如果它是开放输入的,您不会锁定 table。这就是为什么 Bulk load 用于输出 table 而不是输入 tables.

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

加快速度:您可以在输入时使用Lazy conversion复选框,这样数据在被使用之前保持字节格式。但我不确定你是否在简单的 input/output table 上赢得了一些东西。如果在写入输出文件时 Dates 或 Blob 出现问题,错误消息将非常含糊。

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

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

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

除了@AlainD 解决方案还有几个选项: - 调整 MySQL 以获得更好的插入性能 - 在 PDI 中使用 MySQL 批量加载程序步骤 - 使用 PDI 将 SQL 语句写入文件并使用 mysql-binary

读取它们

可以通过使用一些简单的 JDBC 连接设置来提高速度。

  • useServerPrepStmts= false
  • rewriteBatchedStatements=true
  • useCompression= true