2

我正在探索 MarkLogic 数据库,并一直在尝试使用 MarkLogic 内容泵将数据导入其中。这是 csv 文件的要点。

firstname, middlename, lastname, address1, address2, city, state, zip, country
Rajath,,A,No 20 GN,16th cross,Bangalore,KA,560029,IN
Rajath1,,,No 75,,Dharwad,KA,560057,IN
Rajath2,,B,No 66,,Haveri,KA,560034,IN
Rajath3,,D,No 24A ,25th cross,Raichur,KA,560095,IN
Rajath4,,,No 36B,,Coorg,KA,,IN

我成功地将它插入数据库。这是插入的文档。

{
    "firstname" : "Rajath4",
    "middlename" : "",
    "lastname" : "",
    "address1" : "No 36B",
    "address2" : "",
    "city" : "Coorg",
    "state" : "KA",
    "zip" : "",
    "country" : "IN"
}

它甚至插入空白/空值。有没有办法指定在插入 ML 时忽略空白/空字段?这是我所期待的。

{
    "firstname" : "Rajath4",
    "address1" : "No 36B",
    "city" : "Coorg",
    "state" : "KA",
    "country" : "IN"
}

以及如何为我们插入的每个文档维护一个自动生成的主键/序列?如果 id 已经存在,它应该合并/更新文档。

提前致谢。

4

2 回答 2

3

CSV 不够具体,无法区分 null、空字符串和未定义。

例如,以下 CSV

amount,type,category
1,,C

映射到

{ "amount": 1, "type": null, "category": "C" }

或者

{ "amount": 1, "type": "", "category": "C" }

或者

{ "amount": 1, "category": "C" }

?

如果您想更好地控制 CSV 的解析方式,另一种选择是在 Java 或 Node.js 中预处理 CSV,并使用JavaNode.js客户端 API 插入生成的 JSON 或 XML 文档。

于 2016-06-08T19:11:33.277 回答
3

您可以使用自定义转换来使用您自己的代码过滤数据。

MLCP 也有能力做一个唯一的 ID - 但每次运行,而不是全局。但幸运的是,自定义转换功能还允许您根据需要更改 URI(因此您提供使其独一无二的逻辑) - 解决您的两个挑战。

文档:https://docs.marklogic.com/guide/mlcp.pdf

相关部分
- 4.17 - 自定义转换
- 4.17.5 - 示例转换(在此处添加您的代码以过滤内容。在您的情况下,您可能更喜欢在 javascript 中调用函数。但这都是个人选择。)
- 4.17 .6 - 更改 URI

有趣的注释 4.17.6 还包括解释如何更改文档类型。如果你是一个 xslt 人,你可能决定让 MLCP 提供 XML,然后是一个模板来清除空元素,然后在最后转换并保存到一个 json 对象。


注意事项:如果您将 MLCP 与 fastload 选项一起使用,那么我认为更改 URI 将抵消 fastload 的好处(或类似的东西)

于 2016-06-08T16:49:42.873 回答