pentaho - 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'
有谁知道发生了什么?
谢谢!
解决方案
这与行尾有关。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\n
Windows 上的系统属性。
这意味着,如果您可以访问 Mac 或 Linux 机器来运行 Pentaho,那么它就可以正常line.separator
工作\n
。否则,也许你可以问 Pentaho 的人是否可以使用类似java -Dline.separator="\n"
的解决方法来启动 JVM,另请参阅这个 Stack Overflow 问题。
否则,我们将不得不使用 Pentaho、MonetDB JDBC 驱动程序或 MonetDB 的补丁版本。我可以向您发送 JDBC 驱动程序的修补版本,在将查询发送到服务器之前自动替换为'\r\n'
,'\n'
但您必须自己弄清楚如何让 Pentaho 使用这个 JDBC 驱动程序而不是默认的驱动程序。
推荐阅读
- java - 标记“布尔”上的 Spring Mockito 语法错误,此标记后预期的尺寸
- vue.js - 手表不能在 vscode 中工作?(Vuejs)
- javascript - 在每个组件中存储和访问全局标志/变量,值不断变化
- uwp - 禁用 UWP TitleBar 中的关闭按钮
- sql - 使用拆分从 MS SQL 中删除
- gradle - 未为任务启用 Gradle 构建缓存
- swift - 如何在段索引 chnage 上隐藏 ButtonBarPagerTabStripViewController 的 Childe View Controller
- ios - XCS_PRODUCT 路径中缺少 Xcode 9 bot 集成 ipa
- tensorflow - TensorFlow 对象检测 API 测试错误
- bash - Gradle 环境变量。从文件加载