2016-06-08 36 views
2

我正在探索MarkLogic數據庫,並試圖通過使用MarkLogic內容泵將數據導入到MarkLogic數據庫中。這是csv文件的要點。使用MLCP插入MarkLogic DB時檢查空/空

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" 
} 

還有如何爲我們插入的每個文檔維護一個自動生成的primary_key/sequence?如果該ID已經存在,它應該合併/更新文檔。

在此先感謝。

回答

3

您可以使用自定義轉換來用自己的代碼過濾數據。

MLCP還有能力做一個唯一的ID - 但每次運行,而不是全局。但幸運的是,自定義轉換功能允許您也可以更改URI(如果您提供使其獨特的邏輯) - 解決您的兩個挑戰。

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

相關章節
- 4.17 - 自定義變換
- 4.17.5 - 樣品轉變(這裏補充你的代碼的內容過濾器在你的情況,你可能更喜歡用javascript調用函數,但這都是個人選擇)
- 4.17.6 - 更改URI

有趣注意4.17.6還包括解釋如何更改文檔類型。如果你是一個xslt的人,你可能會決定讓MLCP提供XML,然後是一個模板來清除空的元素,然後轉換並保存到最後的json對象。


一個值得注意的問題:如果你使用鋁塑複合帶的fastload選項,然後我想改變URI將否定fastload的(像什麼的)利益

+0

感謝您的回答。將檢查,並會試一試。 – DMA

+0

如果您只打一個節點,不需要某些MLCP功能的強大功能,那麼Justin的建議可能會更簡單。提供的示例NOde.js連接代碼是一個起點,然後您只需將該位添加到循環CSV中,將其清理並以JSON形式傳遞。但是,再次,學習MLCP轉換對於將來的使用也可能是有價值的,所以如果這是您將繼續需要的東西,這是一個很好的練習。 –

+0

明白了。謝謝大衛 – DMA

3

CSV不夠具體來區分空,空字符串和未定義。

例如,將執行以下操作CSV

amount,type,category 
1,,C 

地圖

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

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

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

如果你想在你的CSV是如何解析的更多的控制,另一種選擇是預先處理的CSV在Java或Node.js和受插入使用JavaNode.js客戶端API生成的JSON或XML文檔。

+0

感謝您的回答。是的,我甚至想到了同樣的事情。但仍然想知道是否有什麼可以使用mlcp完成。 – DMA