首页 > 解决方案 > Pentaho PDI MonetDB 批量加载程序步骤中的“加载数据时出错:42000”

问题描述

我想将大型 CSV 文件中的数据插入 MonetDB。我不能使用 MonetDB “mclient”,因为这个过程必须在 Docker 容器内的 Pentaho Server 应用程序中运行。MonetDB 也在 Docker 容器中。

这是我非常简单的转换:

在此处输入图像描述

当我测试转换时,我总是收到以下错误消息:

2021/03/20 22:37:37 - MonetDB bulk loader.0 - 加载数据时出错:42000!COPY INTO:记录分隔符包含“\r\n”,但在输入流中,“\r\n”正在被规范化进入'\n'

有谁知道发生了什么?

谢谢!

标签: pentahopentaho-data-integrationmonetdbpdi

解决方案


这与行尾有关。Pentaho 发出 COPY INTO 声明,

COPY INTO <table> FROM <file>
USING DELIMITERS ',', '\r\n'

在这里,\r\n表示 DOS/Windows 行结束符。\n自 Oct2020 版本以来,MonetDB在加载数据时始终将行尾从 DOS/Windows 规范化为 Unix 样式。以前,它有时会正常化,有时不会。但是,规范化\n意味着查找\r\n将产生包含整个文件的一大行,因此会出现错误消息。

我将向 MonetDB 提交一个补丁来自动USING '\r\n'替换'\n'. 从长远来看,这将解决它。

在短期内,我没有提供好的解决方案。我没有使用 Pentaho 的经验,但是查看源代码,似乎 Pentaho 使用的lines.separator\r\nWindows 上的系统属性。

这意味着,如果您可以访问 Mac 或 Linux 机器来运行 Pentaho,那么它就可以正常line.separator工作\n。否则,也许你可以问 Pentaho 的人是否可以使用类似java -Dline.separator="\n"的解决方法来启动 JVM,另请参阅这个 Stack Overflow 问题

否则,我们将不得不使用 Pentaho、MonetDB JDBC 驱动程序或 MonetDB 的补丁版本。我可以向您发送 JDBC 驱动程序的修补版本,在将查询发送到服务器之前自动替换为'\r\n''\n'但您必须自己弄清楚如何让 Pentaho 使用这个 JDBC 驱动程序而不是默认的驱动程序。


推荐阅读