使用MLCP

时间:2016-06-08 14:16:47

标签: marklogic marklogic-8 mlcp marklogic-7

我正在探索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时忽略空白/ null的字段? 这就是我所期待的。

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

还有如何为我们插入的每个文档维护一个自动生成的primary_key /序列?如果id已存在,则应合并/更新文档。

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

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

DOC: https://docs.marklogic.com/guide/mlcp.pdf

相关章节
    - 4.17 - 自定义转换
    - 4.17.5 - Sample Transform(这里添加你的代码来过滤内容。在你的情况下,你可能更喜欢在javascript中调用一个函数。但这都是个人选择。)
    - 4.17.6 - 更改URI

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

注意事项:如果你使用带有fastload选项的MLCP,那么我认为更改URI会否定fastload(或类似的东西)的好处

答案 1 :(得分: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,并使用Java或{{插入生成的JSON或XML文档3}}客户端API。