2017-03-15 2 views
0

Ich habe einen kleinen Beispieldatensatz mit 10 Zeilen, die ich aus einer CSV-Datei importiere mit Knoten namens TEvent mitNeo4j Spiel und Merge - seltsames Verhalten mit LOAD CSV

LOAD CSV WITH HEADERS FROM "file:///path/to/file.csv" AS rec 
CREATE (te: TEvent {l: rec.L, c: rec.C, t: rec.T, x: rec.X, us: rec.US, v: rec.V, d: rec.D, u: rec.U, h: rec.H, lc: rec.L+"_"+rec.C, lch: rec.L+"_"+rec.C+"_"+rec.H}) 

Die Beispieldatei Inhalte sind

L,C,T,H,V,D,U,X,US 

158,26823,2,2,.03,4.33,1.06,3,1 

854,26843,2,2,.13,14.04,3.21,5,1.79 

130,26861,2,2,.05,3.39,2.52,3,2.48 

818,26863,2,2,.13,2.15,1.42,5,1.27 

835,26880,2,2,.01,3.74,1.94,4,2.35 

873,26902,2,2,20.27,24.65,8.69,12,4.74 

187,26903,2,2,.15,.79,.5,4,.56 

167,26941,2,2,0,0,0,0,0 

147,26942,2,2,.36,.12,.27,2,.22 

130,26982,2,2,.17,7.49,7.06,3,6.48 

ich habe einen Zeitplan Index mit der folgenden Cypher Anweisung

WITH range(2014, 2020) AS years, range(1,12) as months, range(0,23) as hours 
    FOREACH(year IN years | 
    MERGE (y:Year {year: year}) 
    FOREACH(month IN months | 
     CREATE (m:Month {month: month}) 
     MERGE (y)-[:HAS_MONTH]->(m) 
     FOREACH(day IN (CASE 
         WHEN month IN [1,3,5,7,8,10,12] THEN range(1,31) 
         WHEN month = 2 THEN 
          CASE 
          WHEN year % 4 <> 0 THEN range(1,28) 
          WHEN year % 100 <> 0 THEN range(1,29) 
          WHEN year % 400 <> 0 THEN range(1,29) 
          ELSE range(1,28) 
          END 
         ELSE range(1,30) 
         END) |  
     CREATE (d:Day {day: day}) 
     MERGE (m)-[:HAS_DAY]->(d) 
     FOREACH(hour IN hours | 
       CREATE (h:Hour {hour: hour}) 
       MERGE (d)-[:HAS_HOUR]->(h))))) 
erstellt

Nun, ich versuche, die Eigenschaft H von dem TEvent Knoten zu der Stunde, in der Timeline erstellt beziehen

MATCH (te: TEvent) 

MATCH (y: Year {year: 2016})-[]->(m: Month {month: 7})-[]->(d: Day {day: 4})- []->(h:Hour {hour: te.h}) 

MERGE (h)<-[:AT]-(te) 

RETURN h; 

Diese kehrt mit (keine Änderungen, keine Aufzeichnungen) konsequent.

Dann habe ich drei Knoten mit

 CREATE (:A {h: 2}), (:A {h:3}), (:A{h:6}) 

Nun, wenn ich versuche, einen identischen Versuch, nur mit dem Etikett geändert

MATCH (te: A) 

MATCH (y: Year {year: 2016})-[]->(m: Month {month: 7})-[]->(d: Day {day: 4})-[]->(h:Hour) WHERE h.hour = te.h 

MERGE (h)<-[:AT]-(te) 

RETURN h; 

Dies gibt das erwartete Ergebnis

h 

"{""month"":7,""hour"":2,""year"":2016,""day"":4}" 

"{""month"":7,""hour"":3,""year"":2016,""day"":4}" 

"{""month"":7,""hour"":6,""year"":2016,""day"":4}" 

Ich verstehe nicht, warum der erste fehlschlägt und wie man ihn korrigiert.

Jede Hilfe wird geschätzt. TIA.

Cheers, Balakrishnan

+0

Sie haben uns nicht gezeigt, welche Eigenschaften auf den TEvent-Knoten vorhanden sind. Außerdem gibt es einen Tippfehler in der zweiten Zeile der: TEvent-Übereinstimmung, Sie verwenden eine Variable 'the', die in der Abfrage nicht vorhanden ist. Ich denke, Sie meinen' te'. Haben Sie sich auch die [GraphAware TimeTree] (https://github.com/graphaware/neo4j-timemetree) angesehen? Ich denke, das deckt ziemlich viel von dem ab, was Sie mit Datum/Uhrzeit machen. – InverseFalcon

+0

@InverseFalcon Danke, ich habe den Tippfehler in meiner Frage korrigiert. Die Eigenschaften von Ereignisknoten befinden sich im csv-Header, da ich einen Knoten pro Zeile erstelle. Ich fand die Struktur von Michael Hunger [Importieren von Wäldern in Neo4J] (http://jexp.de/blog/2014/04/importing-forests-into-neo4j/) und Mark Needham [Cypher-Erstellen eines TimeTree auf den Tag ] (http://www.markhneedham.com/blog/2014/04/19/neo4j-cypher-creating-a-time-tree-down-to-the-day/) und nutzten sie, um einen einfachen TimeTree für zu erstellen diese Bewertung. Ich schaue mir auch den TimeTree von GraphAware an, aber das Problem ist nicht mit dem TimeTree selbst. – crbkrishnan

Antwort

0

Die Zellen des CSV sind alle Strings standardmäßig.

Sie müssen toInt(row.h) für die Daten verwenden, die numerisch sind und in Ihrem Diagramm numerisch sein sollen.

+0

Danke @ michael-hunger, das löst das Problem für mich. – crbkrishnan

Verwandte Themen