我使用MLCP(MarkLogic Content Pump)成功地将一个非常干净(纯英文,没有花哨的符号或图像)的CSV文件加载到MarkLogic中,使其以第一行为列名,并且我了解到,当我尝试加载一些不干净的东西(即与其他语言和编码混合)时,它会失败。
我阅读了《摄入指南》(http://docs.marklogic.com/guide/ingestion/encoding?print=yes)这种编码在MLCP中是不可控的,所以我决定尝试一下Java API和xdmp Xquery。
当使用Java API时,我得到:第1549行的UTF-8转义序列无效--文档不是UTF-8编码的
如果我尝试在Query Console或Information Studio上的流中使用自动编码的xdmp加载它,它加载时没有问题,但MarkLogic不将第一行作为列名,而是将整个文件作为一个文档,这不是我想要的。
有没有一种方法可以在没有编码问题的情况下加载CSV文件,并将第一行作为列名?
提前谢谢。
RecordLoader可以做到这一点:http://marklogic.github.io/recordloader/
CONFIGURATION_CLASSNAME=com.marklogic.recordloader.xcc.DelimitedDataConfiguration
FIELD_DELIMITER=,
RECORD_NAME=my-root-element-name
使用这些属性和CSV文件运行recordloader.sh
。RecordLoader将期望第一行是一个标题列表,并将这些标题转换为元素名称。调整my-root-element-name
以适合自己,并将INPUT_ENCODING
设置为所需的任何编码。
请参阅https://github.com/marklogic/recordloader/blob/master/src/java/com/marklogic/recordloader/xcc/DelimitedDataConfiguration.java了解更多配置选项。