我正在使用 CloverETL 工具读取超过 100,000 行的大型 csv 文件,在将它们插入数据库表之前从数据库中转换一些查找值。
基本上我用过:
- 用于读取文件的平面文件阅读器
- 后跟一些“查找连接”以从数据库中转换一些值
- 然后是一个'ExtHashJoin'来链接所有数据(因为源没有排序)
- 然后将记录插入数据库。
非常简单的过程,适用于少量记录。但是当我尝试导入整个文件时,它只是内存不足(增加内存分配无济于事)。
我发现 ExtHashJoin 试图等到它加入所有记录后再开始插入它们,这似乎是问题所在,因为它必须将所有记录存储在内存中。我真的不需要那种行为。这些记录都是独立的,可以分批处理,例如一次每 1000 行,但我想不出办法让它这样做。
我还尝试设置不同的阶段值,但它仍然尝试在开始插入第一条记录之前将所有值连接起来。
如何告诉平面文件阅读器将记录分解并分批处理?
谢谢。
埃里克