Files
memgraph-poc/import.cypher
2025-11-04 16:45:03 +09:00

93 lines
2.5 KiB
Plaintext

-- 1. (Optional) Clean up the database
MATCH (n) DETACH DELETE n;
-- 2. Create indexes for faster matching
CREATE INDEX ON :JobType(id);
CREATE INDEX ON :ObjectType(id);
CREATE INDEX ON :Job(id);
CREATE INDEX ON :Object(id);
CREATE INDEX ON :MgmtStatus(id);
-- 3. Create Nodes from CSV files
-- Job Types
LOAD CSV FROM '/data/job_types.csv' WITH HEADER AS row
CREATE (n:JobType {
id: row.id,
name: row.name,
standard_duration: toInteger(row.standard_duration),
standard_cost: toInteger(row.standard_cost)
});
-- Object Types
LOAD CSV FROM '/data/object_types.csv' WITH HEADER AS row
CREATE (n:ObjectType {
id: row.id,
name: row.name,
category: row.category
});
-- Job Instances
LOAD CSV FROM '/data/jobs.csv' WITH HEADER AS row
CREATE (n:Job {
id: toInteger(row.id),
name: row.name,
duration: toInteger(row.duration),
cost: toInteger(row.cost),
job_no: row.job_no
});
-- Object Instances
LOAD CSV FROM '/data/objects.csv' WITH HEADER AS row
CREATE (n:Object {
id: row.id,
name: row.name,
obj_no: row.obj_no
});
-- Management Status Nodes
LOAD CSV FROM '/data/mgmt_status.csv' WITH HEADER AS row
CREATE (n:MgmtStatus {
id: row.id,
type: row.type,
status: row.status
});
-- 4. Create Relationships from relations.csv
-- Job IS_A JobType
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
WITH row WHERE row.type = 'IS_A' AND toIntegerOrNull(row.from_id) IS NOT NULL
MATCH (from:Job {id: toInteger(row.from_id)})
MATCH (to:JobType {id: row.to_id})
CREATE (from)-[:IS_A]->(to);
-- Object IS_A ObjectType
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
WITH row WHERE row.type = 'IS_A' AND toIntegerOrNull(row.from_id) IS NULL
MATCH (from:Object {id: row.from_id})
MATCH (to:ObjectType {id: row.to_id})
CREATE (from)-[:IS_A]->(to);
-- Job PRECEDES Job
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
WITH row WHERE row.type = 'PRECEDES'
MATCH (from:Job {id: toInteger(row.from_id)})
MATCH (to:Job {id: toInteger(row.to_id)})
CREATE (from)-[:PRECEDES]->(to);
-- Job REQUIRES Object
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
WITH row WHERE row.type = 'REQUIRES'
MATCH (from:Job {id: toInteger(row.from_id)})
MATCH (to:Object {id: row.to_id})
CREATE (from)-[:REQUIRES {quantity: toInteger(row.quantity), unit: row.unit}]->(to);
-- Job HAS_STATUS MgmtStatus
LOAD CSV FROM '/data/relations.csv' WITH HEADER AS row
WITH row WHERE row.type = 'HAS_STATUS'
MATCH (from:Job {id: toInteger(row.from_id)})
MATCH (to:MgmtStatus {id: row.to_id})
CREATE (from)-[:HAS_STATUS]->(to);