【问题标题】:Check for null/blank while inserting into MarkLogic DB using MLCP使用 MLCP 插入 MarkLogic DB 时检查空/空白
【发布时间】:2018-03-01 10:12:38
【问题描述】:

我正在探索 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 已经存在,它应该合并/更新文档。

提前致谢。

【问题讨论】:

    标签: marklogic marklogic-8 mlcp marklogic-7


    【解决方案1】:

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

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

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

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

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


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

    【讨论】:

    • 感谢您的回答。会检查并试一试。
    • 如果您只针对单个节点并且不需要某些 MLCP 功能的强大功能和稳健性,那么 Justin 的建议可能更简单。提供的示例 NOde.js 连接代码是一个起点,然后您只需添加位以循环通过 CSV、清理它并将其作为 JSON 传递。但话又说回来,学习 MLCP 变换可能对未来的使用也很有价值,所以如果您将继续需要它,这是一个很好的练习。
    • 知道了。谢谢大卫
    • 可以说我只想使用 mlcp 上传 csv 文件而不使用自定义转换,而是为我插入的每个文档创建一个主键或序列键,该怎么做?
    • 实现这一目标的最快方法是使用 AWK 并将 GUID 列添加到 CSV。然后将该列引用为 URI 的键...使用 MLCP,您可以使用“-generate_uri”选项,但这仅适用于每次导入,因此它不一定是唯一的(您需要)。您应该能够通过将每个导入的唯一 uri 前缀与提到的标志相结合来制作独特的东西。
    【解决方案2】:

    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 客户端插入生成的 JSON 或 XML 文档API。

    【讨论】:

    • 感谢您的回答。是的,即使我也想过同样的事情。但仍然想知道是否可以使用 mlcp 完成一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多