Pentaho表批量输入表输出

时间:2017-07-26 13:21:25

标签: mysql pentaho transformation kettle

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

PentahoProcessing

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

2 个答案:

答案 0 :(得分:5)

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

但是,常见的beginer陷阱是输出表上的Truncate table选项。如果您运行(不充分或并行处理)两次输出步骤,则每个将锁定另一个。永远。

要加速:您可以在输入中使用Lazy conversion复选框,以便数据保持字节格式,直到使用它为止。但我不确定你是否在一个简单的输入/输出表上获胜。如果在输出文件上写入日期或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)来执行此操作。选中该框后,如果出现问题,数据库的状态将回滚,就好像转换从未执行过一样。但我不建议你这样做。

答案 1 :(得分:1)

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

读取它们

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

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