-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathUpdateDBCypher.txt
129 lines (105 loc) · 5.21 KB
/
UpdateDBCypher.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// ============ START TRANSACTION ======
:begin
// =========================================================================================================
// ========================== CREATE CONCEPT_NEW NODES AND RELATIONSHIPS AMONG THEM ========================
// =========================================================================================================
LOAD CSV FROM 'file:///nodes.csv'
AS line
WITH line
MERGE (c:CONCEPT_NEW { id: line[0], label: line[1], synonyms: CASE line[2] WHEN null THEN '' ELSE split(line[2],'|') END, iso: CASE line[3] WHEN null THEN '' else line[3] END, default_parent: CASE line[4] WHEN null THEN '' else line[4] END});
LOAD CSV FROM 'file:///nodes.csv'
AS line
WITH line
MATCH (c:CONCEPT_NEW { id: line[0]})
FOREACH(ignoreMe IN CASE WHEN line[5] = 'TOPIC' THEN [1] ELSE [] END | SET c:TOPIC)
FOREACH(ignoreMe IN CASE WHEN line[5] = 'GEOGRAPHY' THEN [1] ELSE [] END | SET c:GEOGRAPHY)
FOREACH(ignoreMe IN CASE WHEN line[5] = 'DATA_TYPE' THEN [1] ELSE [] END | SET c:DATA_TYPE)
FOREACH(ignoreMe IN CASE WHEN line[5] = 'FREQUENCY' THEN [1] ELSE [] END | SET c:FREQUENCY)
FOREACH(ignoreMe IN CASE WHEN line[5] = 'TIME_PERIOD' THEN [1] ELSE [] END | SET c:TIME_PERIOD)
WITH count(c.id) as updated_nodes
// AFFECTS relationships
LOAD CSV FROM 'file:///affects.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:AFFECTS]->(c2);
// CAN_AFFECT relationships
LOAD CSV FROM 'file:///can_affect.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:CAN_AFFECT]->(c2);
// IS_A relationships
LOAD CSV FROM 'file:///is_a.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:IS_A]->(c2);
// IS_INVOLVED_IN relationships
LOAD CSV FROM 'file:///is_involved_in.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:IS_INVOLVED_IN]->(c2);
// LOCATED_AT relationships
LOAD CSV FROM 'file:///located_at.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:LOCATED_AT]->(c2);
// PART_OF relationships
LOAD CSV FROM 'file:///part_of.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:PART_OF]->(c2);
// QUALITY_OF relationships
LOAD CSV FROM 'file:///quality_of.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:QUALITY_OF]->(c2);
// RELATED_TO relationships
LOAD CSV FROM 'file:///related_to.csv'
AS line
WITH line
MATCH (c1:CONCEPT_NEW { id: line[0]}), (c2:CONCEPT_NEW { id: line[1]})
MERGE (c1)-[:RELATED_TO]->(c2);
// =========================================================================================================
// ============ "REPLICATE" EDGES AMONG DATASETS -> CONCEPT into DATASETS -> CONCEPT_NEW ===================
// =========================================================================================================
MATCH (d:DATASET)-[t:TAGGED_WITH]->(c:CONCEPT)
MATCH (c2:CONCEPT_NEW)
WHERE c.id = c2.id
MERGE (d)-[:TAGGED_WITH {application: t.application}]->(c2);
// =========================================================================================================
// ============ "REPLICATE" EDGES AMONG WIDGETS -> CONCEPT into WIDGETS -> CONCEPT_NEW =====================
// =========================================================================================================
MATCH (w:WIDGET)-[t:TAGGED_WITH]->(c:CONCEPT)
MATCH (c2:CONCEPT_NEW)
WHERE c.id = c2.id
MERGE (w)-[:TAGGED_WITH {application: t.application}]->(c2);
// =========================================================================================================
// ============ "REPLICATE" EDGES AMONG LAYERS -> CONCEPT into LAYERS -> CONCEPT_NEW =======================
// =========================================================================================================
MATCH (l:LAYER)-[t:TAGGED_WITH]->(c:CONCEPT)
MATCH (c2:CONCEPT_NEW)
WHERE c.id = c2.id
MERGE (l)-[:TAGGED_WITH {application: t.application}]->(c2);
// =========================================================================================================
// ============================== DETACH AND DELETE "OLD" CONCEPT NODES ====================================
// =========================================================================================================
MATCH (c:CONCEPT)
DETACH DELETE c;
// =========================================================================================================
// =========================== ADD CONCEPT LABEL TO CONCEPT_NEW NODES ======================================
// =========================================================================================================
MATCH (c:CONCEPT_NEW)
SET c :CONCEPT;
// =========================================================================================================
// =========================== REMOVE CONCEPT_NEW LABEL FROM CONCEPT NODES =================================
// =========================================================================================================
MATCH (c:CONCEPT_NEW)
REMOVE c :CONCEPT_NEW;
// ============ COMMIT TRANSACTION ======
:commit