【问题标题】:"Error loading data: 42000" in Pentaho PDI MonetDB bulk Loader stepPentaho PDI MonetDB 批量加载程序步骤中的“加载数据时出错:42000”
【发布时间】:2021-06-18 00:54:22
【问题描述】:

我想将大型 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'

有人知道发生了什么吗?

谢谢!

【问题讨论】:

  • 有人吗?????? :-(

标签: pentaho pentaho-data-integration monetdb pdi


【解决方案1】:

这与行尾有关。 Pentaho 发出 COPY INTO 语句,

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

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

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

在短期内我没有好的解决方案可以提供。我没有使用 Pentaho 的经验,但是查看 source code,似乎 Pentaho 使用了系统属性 lines.separator,在 Windows 上是 \r\n

这意味着,如果您可以访问 Mac 或 Linux 机器来运行 Pentaho,那么它将像 line.separator\n 那样工作。否则,也许您可​​以询问 Pentaho 的人是否可以使用 java -Dline.separator="\n" 之类的东西作为解决方法启动 JVM,另请参阅 this Stack Overflow question

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

【讨论】:

  • 感谢您的回复。我尝试在 Pentaho 的 JVM 启动中使用 java -Dline.separator="\n" ,但它不起作用。 Pentaho 甚至没有启动。我认为解决这个问题的最好方法是从长远来看,将这个补丁发送到 MonetDB。如果这对您来说不是问题,我会感谢您的努力。同时,我想我可以想出一个解决方法。如果我在 Linux 中从 Pentaho 进行批量插入,它会起作用吗?我认为文件必须是 Linux 风格:行以“\n”结尾。
  • 我预计但不能保证我们会很快发布修复此问题的 Oct2020 分支的更新。如果您在 Linux 上执行此操作,您可以使用 DOS 或 Unix 行尾,哪个都没有关系。
  • 版本 Oct2020-SP4 已经发布,应该可以解决这个问题
  • 好消息!我非常感谢您的支持和及时响应。非常感谢!我会尽快通知你结果。
猜你喜欢
  • 1970-01-01
  • 2014-01-25
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多