39 lines
3.1 KiB
Plaintext
39 lines
3.1 KiB
Plaintext
// 1. 기존 스키마 제약 조건 모두 삭제
|
|
DROP CONSTRAINT ON (j:Job) ASSERT j.id IS UNIQUE;
|
|
DROP CONSTRAINT ON (jt:JobType) ASSERT jt.type_id IS UNIQUE;
|
|
DROP CONSTRAINT ON (o:Object) ASSERT o.id IS UNIQUE;
|
|
DROP CONSTRAINT ON (ot:ObjectType) ASSERT ot.type_id IS UNIQUE;
|
|
DROP CONSTRAINT ON (s:Status) ASSERT s.status_id IS UNIQUE;
|
|
DROP CONSTRAINT ON (a:Activity) ASSERT a.id IS UNIQUE;
|
|
DROP CONSTRAINT ON (s:Scenario) ASSERT s.id IS UNIQUE;
|
|
|
|
// 2. 인덱스 생성
|
|
CREATE INDEX ON :Job(id);
|
|
CREATE INDEX ON :JobType(id);
|
|
CREATE INDEX ON :Object(id);
|
|
CREATE INDEX ON :ObjectType(id);
|
|
CREATE INDEX ON :Status(id);
|
|
CREATE INDEX ON :Activity(id);
|
|
CREATE INDEX ON :Scenario(id);
|
|
|
|
// 3. 노드 데이터 로드
|
|
LOAD CSV FROM "/data/job_types.csv" WITH HEADER AS row CREATE (n:JobType {type_id: row.id, name: row.name});
|
|
LOAD CSV FROM "/data/jobs.csv" WITH HEADER AS row CREATE (n:Job {id: row.id, name: row.name, duration: toInteger(row.duration), cost: toInteger(row.cost)});
|
|
LOAD CSV FROM "/data/object_types.csv" WITH HEADER AS row CREATE (n:ObjectType {type_id: row.id, name: row.name});
|
|
LOAD CSV FROM "/data/objects.csv" WITH HEADER AS row CREATE (n:Object {id: row.id, name: row.name});
|
|
LOAD CSV FROM "/data/mgmt_status.csv" WITH HEADER AS row CREATE (n:Status {status_id: row.id, name: row.status});
|
|
LOAD CSV FROM "/data/activities.csv" WITH HEADER AS row CREATE (n:Activity {id: row.id, name: row.name, description: row.description});
|
|
LOAD CSV FROM "/data/scenarios.csv" WITH HEADER AS row CREATE (n:Scenario {id: row.id, name: row.name, description: row.description});
|
|
|
|
// 4. 관계 데이터 로드
|
|
LOAD CSV FROM "/data/relations.csv" WITH HEADER AS row WHERE row.type = 'IS_A' AND row.from_id STARTS WITH 'J' MATCH (from:Job {id: row.from_id}), (to:JobType {type_id: row.to_id}) CREATE (from)-[:IS_A]->(to);
|
|
LOAD CSV FROM "/data/relations.csv" WITH HEADER AS row WHERE row.type = 'IS_A' AND row.from_id STARTS WITH 'O' MATCH (from:Object {id: row.from_id}), (to:ObjectType {type_id: row.to_id}) CREATE (from)-[:IS_A]->(to);
|
|
LOAD CSV FROM "/data/relations.csv" WITH HEADER AS row WHERE row.type = 'PRECEDES' MATCH (from:Job {id: row.from_id}), (to:Job {id: row.to_id}) CREATE (from)-[:PRECEDES]->(to);
|
|
LOAD CSV FROM "/data/relations.csv" WITH HEADER AS row WHERE row.type = 'HAS_STATUS' MATCH (from:Job {id: row.from_id}), (to:Status {status_id: row.to_id}) CREATE (from)-[:HAS_STATUS]->(to);
|
|
LOAD CSV FROM "/data/relations_new.csv" WITH HEADER AS row WHERE row.type = 'INCLUDES' MATCH (from:Scenario {id: row.from_id}), (to:Job {id: row.to_id}) CREATE (from)-[:INCLUDES]->(to);
|
|
LOAD CSV FROM "/data/relations_new.csv" WITH HEADER AS row WHERE row.type = 'DELTA_FROM' MATCH (from:Scenario {id: row.from_id}), (to:Scenario {id: row.to_id}) CREATE (from)-[:DELTA_FROM]->(to);
|
|
LOAD CSV FROM "/data/relations_new.csv" WITH HEADER AS row WHERE row.type = 'PERFORMS' MATCH (from:Job {id: row.from_id}), (to:Activity {id: row.to_id}) CREATE (from)-[:PERFORMS]->(to);
|
|
LOAD CSV FROM "/data/relations_new.csv" WITH HEADER AS row WHERE row.type = 'ACTS_ON' MATCH (from:Activity {id: row.from_id}), (to:Object {id: row.to_id}) CREATE (from)-[:ACTS_ON]->(to);
|
|
|
|
RETURN "Import successful!";
|