2016-07-28 21 views
3

Ich habe einige Daten, die in 2 CSV-Dateien ist, enthält die Eckpunkte und die andere Datei enthält die Kanten sind in der anderen Datei. Ich arbeite daran, wie ich das mit ETL einrichten kann und bin nahe, aber noch nicht ganz da - es funktioniert meistens, aber meine Kanten haben Eigenschaften und ich bin mir nicht sicher, ob sie richtig geladen werden. This question war hilfreich, aber mir fehlt noch etwas ...OrientDB ETL laden CSV mit Vertices in einer Datei und Kanten in einem anderen

Hier ist meine Daten:

vertices.csv:

label,data,date 
v01,0.1234,2015-01-01 
v02,0.5678,2015-01-02 
v03,0.9012,2015-01-03 

edges.csv:

u,v,weight,date 
v01,v02,12.4,2015-06-17 
v02,v03,17.9,2015-09-14 

Ich importiere meine Scheitelpunkte mit dieser:

commonVertices.json:

{ 
"begin": [ 
      { "let": { "name":  "$filePath", 
         "expression": "$fileDirectory.append($fileName)" 
         } 
      }, 
     ], 
"config": { "log": "info"}, 
"source": { "file": { "path": "$filePath" } }, 
"extractor": { "csv": { "ignoreEmptyLines": true, 
         "nullValue": "N/A", 
         "dateFormat": "yyyy-mm-dd" 
         } 
      }, 
"transformers": [ 
        { "vertex": { "class": "myVertex" } }, 
        { "code": { "language": "Javascript", 
            "code":  "print(' Current record: ' + record); record;" } 
        } 
       ], 
"loader": { "orientdb": { 
      "dbURL": "plocal:my_orientdb", 
      "dbType": "graph", 
      "batchCommit": 1000, 
      "classes": [ { "name": "myVertex", "extends", "V" }, 
         ], 
      "indexes": [] 
      } 
      } 
} 

vertices.json:

{ "config": { "log":   "info", 
       "fileDirectory": "./", 
       "fileName":  "vertices.csv" 
      } 
} 

commonEdges.json:

{ 
    "begin": [ 
     { "let": { "name": "$filePath", 
        "expression": "$fileDirectory.append($fileName)" 
       } 
     }, 
    ], 

    "config": { "log": "info" 
       }, 

    "source": { "file": { "path": "$filePath" } }, 

    "extractor": { "csv": { "ignoreEmptyLines": true, 
          "nullValue": "N/A", 
          "dateFormat": "yyyy-mm-dd" 
          } 
       }, 

    "transformers": [ 
      { "merge": { "joinFieldName": "u", "lookup": "myVertex.label" } }, 
      { "edge": { "class":   "myEdge", 
          "joinFieldName": "v", 
          "lookup":  "myVertex.label", 
          "direction":  "out", 
          "unresolvedLinkAction": "NOTHING" 
         } 
      }, 
      { "field": { "fieldNames": ["u", "v"], "operation": "remove" } } 
     ], 

    "loader": { 
     "orientdb": { 
      "dbURL": "plocal:my_orientdb", 
      "dbType": "graph", 
      "batchCommit": 1000, 
      "useLightweightEdges": false, 
      "classes": [ 
       { "name": "myEdge", "extends", "E" } 
      ], 
      "indexes": [] 
     } 
    } 
} 

edges.json:

{ 
    "config": { 
     "log": "info", 
     "fileDirectory": "./", 
     "fileName": "edges.csv" 
    } 
} 

ich es mit oetl.sh wie dies leite:

$ oetl.sh vertices.json commonVertices.json 
$ oetl.sh edges.json commonEdges.json 

Alles läuft, aber wenn ich die Kanten abfragen ... Ich bin zu Orientdb neu, es so vielleicht ist bekommen die Eigenschaften in meine Kanten, aber wenn ich die Kanten abfragen ich das Gewicht und das Datum nicht Felder sehen:

orientdb {db=my_orientdb}> SELECT FROM myEdge 
+----+-----+------+-----+-----+ 
|# |@RID |@CLASS|out |in | 
+----+-----+------+-----+-----+ 
|0 |#33:0|myEdge|#25:0|#26:0| 
|1 |#34:0|myEdge|#26:0|#27:0| 
+----+-----+------+-----+-----+ 

die Vertex-Tabelle enthält die [weight] Feld von meinem edges.csv und dem [Datum] Feld wird geplätschert ich auf eine seltsame Art und Weise. Der Tag des Monats wird immer auf den Tag der edge.csv Datei überschrieben, was unerwünscht ist, aber es ist mir seltsam, dass der Monat selbst nicht auch ändern bekommen:

orientdb {db=my_orientdb}> SELECT FROM myVertex 
+----+-----+--------+------+-------------------+-----+------+----------+---------+ 
|# |@RID |@CLASS |data |date    |label|weight|out_myEdge|in_myEdge| 
+----+-----+--------+------+-------------------+-----+------+----------+---------+ 
|0 |#25:0|myVertex|0.1234|2015-01-17 00:06:00|v01 |12.4 |[#33:0] |   | 
|1 |#26:0|myVertex|0.5678|2015-01-14 00:09:00|v02 |17.9 |[#34:0] |[#33:0] | 
|2 |#27:0|myVertex|0.9012|2015-01-03 00:01:00|v03 |  |   |[#34:0] | 
+----+-----+--------+------+-------------------+-----+------+----------+---------+ 

Ich bin sicher, dass es wahrscheinlich eine einfache Optimierung, jede Hilfe wäre großartig!

Antwort

5

Im Kantentransformator verwenden Sie edgeFields, um Eigenschaften in Kanten zu binden. Beispiel:

"transformers": [ 
      { "merge": { "joinFieldName": "u", "lookup": "myVertex.label" } }, 
      { "edge": { "class":   "myEdge", 
          "joinFieldName": "v", 
          "lookup":  "myVertex.label", 
          "edgeFields": { "weight": "${input.weight}", "date": "${input.date}" }, 
          "direction":  "out", 
          "unresolvedLinkAction": "NOTHING" 
         } 

      }, 
      { "field": { "fieldNames": ["u", "v"], "operation": "remove" } } 
     ], 

Ich hoffe, es hilft.

+0

Danke, das hat eines der zwei Probleme gelöst, die ich auf diesem einen habe. – TxAG98

+0

Ich habe ein Follow-up dazu in [eine andere Frage] (http://stackoverflow.com/questions/38702959/edge-properties-clobbering-vertex-properties-in-orientdb-from-etl) speziell für das Datumsfeld veröffentlicht Probleme ... – TxAG98