getschomp/commute-calculator-api

View on GitHub
lib/csv_import.cql

Summary

Maintainability
Test Coverage
// model validations may not be enforced when inserting through raw cypher.
// The neo4j ORM does not support the load csv command.

LOAD CSV WITH HEADERS FROM "file:/boston/agency.txt" AS agency
CREATE (
  a:`Nodes::Agency` {
    agency_id: agency.agency_id,
    name: agency.agency_name,
    url: agency.agency_url,
    timezone: agency.agency_timezone,
    lang: agency.lang,
    lon: agency.stop_lon,
    phone: agency.agency_phone,
    fare_url: agency.fare_url,
    email: agency.email
  }
);

LOAD CSV WITH HEADERS FROM "file:/boston/routes.txt" AS route
MATCH (a:`Nodes::Agency` {agency_id: route.agency_id})
CREATE (a)-[:operates]->(
  r:`Nodes::Route` {
    route_id: route.route_id,
    agency_id: route.agency_id,
    short_name: route.short_name,
    long_name: route.route_long_name,
    desc: route.route_desc,
    type: route.route_type,
    url: route.url,
    color: route.route_color,
    text_color: route.route_text_color
  }
);

MATCH (a:`Nodes::Agency`)-[:OPERATES]->(r:`Nodes::Route`) RETURN * LIMIT 100

LOAD CSV WITH HEADERS FROM "file:/boston/trips.txt" AS trip
MATCH (r:`Nodes::Route` {route_id: trip.route_id})
CREATE (r)<-[:follows]-(
  t:`Nodes::Trip` {
    route_id: trip.route_id,
    service_id: trip.service_id,
    trip_id: trip.trip_id,
    headsign: trip.trip_headsign,
    short_name: trip.trip_short_name,
    direction_id: trip.direction_id,
    block_id: trip.block_id,
    shape_id: trip.shape_id,
    wheelchair_accessible: trip.wheelchair_accessible,
    bikes_allowed: trip.bikes_allowed
  }
);

LOAD CSV WITH HEADERS FROM "file:/boston/stops.txt" AS stop
CREATE (
  s:`Nodes::Stop` {
    stop_id: stop.stop_id,
    code: stop.stop_code,
    name: stop.stop_name,
    desc: stop.stop_desc,
    lat: stop.stop_lat,
    lon: stop.stop_lon,
    zone_id: stop.zone_id,
    url: stop.stop_url,
    location_type: stop.location_type,
    parent_station: stop.parent_station,
    wheelchair_boarding: stop.wheelchair_boarding
  }
);

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:/boston/stop_times.txt' as stop_time
MATCH
  (t:`Nodes::Trip` {trip_id: stop_time.trip_id}),
  (s:`Nodes::Stop` {stop_id: stop_time.stop_id})
CREATE (t)<-[:part_of]-(
  st:`Nodes::StopTime` {
    trip_id: stop_time.trip_id,
    arrival_time: stop_time.arrival_time,
    departure_time: stop_time.departure_time,
    stop_sequence: stop_time.stop_sequence,
    stop_id: stop_time.stop_id,
    stop_headsign: stop_time.stop_id,
    pickup_type: stop_time.pickup_type,
    drop_off_type: stop_time.drop_off_type,
    shape_dist_traveled: stop_time.shape_dist_traveled,
    timepoint: stop_time.timepoint
  }
)-[:located_at]->(s);