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
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
@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