Marklogic 如何使用mlcp加载多个(100K+;)XML文档而不遇到;“参数列表太长”;错误?

Marklogic 如何使用mlcp加载多个(100K+;)XML文档而不遇到;“参数列表太长”;错误?,marklogic,mlcp,Marklogic,Mlcp,当我试图在MacOS 10.10.4上使用mlcp将160000个XML文档加载到MarkLogic 8.0-2时,抛出mlcp-Hadoop2-1.3-1/bin/mlcp.sh:line 16:/usr/bin/java:参数列表太长错误 我发出的命令: mlcp导入-数据库FO-用户名sss4r-密码******-主机localhost-端口8003-模式本地-输入文件\u模式'*\.xml'-output\u uri\u replace”/Users/sss4r/Documents/FO

当我试图在MacOS 10.10.4上使用mlcp将160000个XML文档加载到MarkLogic 8.0-2时,抛出
mlcp-Hadoop2-1.3-1/bin/mlcp.sh:line 16:/usr/bin/java:参数列表太长
错误

我发出的命令:

mlcp导入-数据库FO-用户名sss4r-密码******-主机localhost-端口8003-模式本地-输入文件\u模式'*\.xml'-output\u uri\u replace”/Users/sss4r/Documents/FOPOC','-输入文件\u路径。

我意识到这可能是Unix shell的问题,mlcp正在使用文件系统工具返回名称列表。一个命令中可以处理的文件名数量有一个基于系统的限制

MarkLogician推荐的解决此问题的最佳实践是什么?是否尝试以较小的块进行批量加载?是否尝试修改系统的限制


谢谢。

MLCP不依赖shell扩展来加载文件。恐怕外壳扩展是在mlcp.sh内部进行的,但只是无意中进行的。如果删除输入文件模式参数,您可能会看到它将加载所有文件。一个快速修复方法是将文件放在子目录中,不使用文件模式,只需将子目录作为输入文件路径

Rob S.正在提供另一种解决方案来防止这种情况。将参数放在一个文件中,每个参数在单独的一行上,并用命令行上的
-options\u file
参数指向该文件。这样还可以避免引号和其他特殊字符被shell环境无意中解释的问题

详情如下:


PS:我已经提交了一个bug来改进MLCP(#33670)

首先,如果您在命令行参数值可能被shell插入时使用选项文件,您将省去很多麻烦。否则,你最终会反对壳牌的报价。Geert已经提供了该语法的链接,所以我不再重复

其次,
-input\u file\u模式
需要一个Java正则表达式<代码>*\.xml
可能不是您想要的。您的意思可能是
*\.xml
。有关mlcp使用的模式语言的链接,请参阅:


尝试使用选项文件,看看你是否有更好的运气:谢谢,@RobS.,这很有帮助。这些都是非常有用的信息,@grtjn,谢谢你提交错误报告。根据你的回答,我将继续对问题进行更精确的编辑。