使用MLCP插入MarkLogic DB时检查是否为空/空白

问题描述 投票:2回答: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时忽略空白/ null的字段?这是我所期待的。

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

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

提前致谢。

marklogic marklogic-8 mlcp marklogic-7
2个回答
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对象。


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


3
投票

CSV不够具体,无法区分null,空字符串和undefined。

例如,执行以下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文档。

© www.soinside.com 2019 - 2024. All rights reserved.