Neo4j - загрузить CSV с последовательностью отношений - PullRequest
0 голосов
/ 02 мая 2019

Я планирую загрузить расписание поездов и станций в Neo4j из CSV.

Исходные данные

TrainNo TrainName   SEQ   StationCode   Arrival Departure Distance
1           TN_1          1      S1           8      9       0
1           TN_1          2      S2           10     11     10
1           TN_1          3      S3           12     1      15 
1           TN_1          4      S4           3      4       15
2           TN_2          1      S1         
2           TN_2          2      S2         
2           TN_2          3      S5         
2           TN_2          4      S6         
2           TN_2          5      S7         
2           TN_2          6      S8         

Мне нужно построить узлы и отношения, подобные этим

S1--(TrainNo,TrainName,SEQ,Arrival,Depature,Distance)--S2--(TrainNo,TrainName,SEQ,Arrival,Depature,Distance)--S3--(TrainNo,TrainName,SEQ,Arrival,Depature,Distance)-S4

В основном, TrainNo, TrainName, Seq, Arrival, Depature и Distance будутбыть на связи, и те же отношения будут формировать маршрут между станциями.

Neo4j - 3,5

1 Ответ

0 голосов
/ 03 мая 2019

вы можете сортировать и группировать по поездам и последовательности

load csv with headers from "" as row
with row order by TrainNo, SEQ
with TrainNo, collect(row) as stations
unwind range(stations, size(stations)-2) as idx
with TrainNo, stations[idx] as start, stations[idx+1] as end
match (s1:Station {code:start.StationCode})
match (s2:Station {code:end.StationCode})
// depends on your model
create (s1)-[:ROUTE {train:TrainNo}]->(s2);

// alternative
// move this before the unwind
match (train:Train {trainNo:TrainNo})
create (s1)-[:LEAVES]->(l:Leg)-[:ENTERS]>(s2)
craete (l)-[:OF_TRAIN]-(train);
...