2016-06-08 11 views
2

Ich untersuche die MarkLogic-Datenbank und habe versucht, Daten mithilfe von MarkLogic Content Pump in diese Datenbank zu importieren. Hier ist der Kern der CSV-Datei.Beim Einfügen in MarkLogic DB mit MLCP auf null/leer prüfen

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 

Ich konnte erfolgreich in die DB einfügen. Hier ist das eingefügte Dokument.

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

Es fügt sogar die Werte ein, die leer sind/null. Gibt es eine Möglichkeit anzugeben, die Felder zu ignorieren, die beim Einfügen in ML leer sind? Hier ist was ich erwarte.

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

Und auch, wie eine automatisch generierte primary_key/sequence für jedes Dokument, das wir einfügen? Wenn die ID bereits existiert, sollte das Dokument zusammengeführt/aktualisiert werden.

Vielen Dank im Voraus.

Antwort

3

Sie können eine benutzerdefinierte Transformation zum Filtern der Daten mit Ihrem eigenen Code verwenden.

Auch MLCP hat die Fähigkeit, eine eindeutige ID - aber pro Lauf, nicht global. Aber glücklicherweise können Sie mit der benutzerdefinierten Transformationsfunktion auch den URI ändern, wenn Sie möchten (Sie stellen also die Logik zur Verfügung, um sie eindeutig zu machen), um beide Herausforderungen anzugehen.

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

Relevante Abschnitte.
- 4,17 - Individuelle Wandelt
- 4.17.5 - Beispiel-Transformation (hier Ihren Code hinzufügen, um den Inhalt zu filtern, die in Ihrem Fall, können Sie bevorzugen, eine Funktion in Javascript aufzurufen, aber das ist alles eine persönliche Wahl.)
- 4.17.6 - Ändern der URI

Fun Hinweis 4.17.6 enthält auch Erläuterungen zum Ändern des Dokumenttyps. Wenn Sie eine xslt-Person sind, könnten Sie sich dafür entscheiden, dass MLCP XML bereitstellt, dann eine Vorlage, um die leeren Elemente zu bereinigen und dann am Ende in ein json-Objekt umzuwandeln und zu speichern.


Ein Wort der Warnung: Wenn Sie MLKP mit der FASTLOAD- Option verwenden, dann denke ich, die URI ändern, werden die Vorteile der FASTLOAD- (oder so ähnlich) negieren

+0

danke für deine antwort. Werde es überprüfen und es versuchen. – DMA

+0

Wenn Sie nur einen einzigen Knoten treffen und nicht die Leistung und Robustheit einiger der MLCP-Funktionen benötigen, dann ist Justins Vorschlag wahrscheinlich einfacher. Der mitgelieferte Beispiel-NOde.js-Verbindungscode ist ein Anfangspunkt, und Sie müssen nur das Bit hinzufügen, um die CSV-Schleife durchzulaufen, sie zu bereinigen und als JSON weiterzuleiten. Aber auch das Lernen von MLKP-Transformationen kann sich für zukünftige Anwendungen als nützlich erweisen, also ist dies eine schöne Übung, wenn Sie etwas brauchen, das Sie weiterhin benötigen. –

+0

Bekam es. Danke David – DMA

3

CSV nicht spezifisch genug ist Unterscheide zwischen null, leerer und nicht definierter Zeichenfolge.

Zum Beispiel führt die folgenden CSV

amount,type,category 
1,,C 

Karte

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

oder

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

oder

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

? Wenn Sie mehr Kontrolle darüber haben möchten, wie Ihre CSV-Datei analysiert wird, besteht eine weitere Möglichkeit darin, die CSV-Datei in Java oder Node.js vorzuverarbeiten und die resultierenden JSON- oder XML-Dokumente mithilfe der Client-APIs Java oder einzufügen.

+0

Danke für Ihre Antwort. Ja, ich dachte sogar an dasselbe. Wollte aber immer noch wissen, ob es etwas gibt, was mit mlcp erledigt werden kann. – DMA