Neo4j - chapter 7.2 - import csv

2 분 소요

intro.

  • 이 부분은 원래 Neo4j chapter 7에 정리되어 있는 내용이나, 특별히 구분하여 정리하였다.

Importing data

  • 요즘의 데이터들은 csv의 형태로 관리되는 일이 많고, 이러한 데이터로부터 그래프를 생성하는 일들이 많다. 여기서는 Cypher를 사용하여, csv 데이터로부터 데이터를 바로 가져오는 방법, RDBMS로부터 데이터를 바로 가져오는 방법, 등을 설명할 것이다.

Importing normalized data using LOAD CSV

  • LOAD CSV를 사용하여, 로컬에 있는 파일을 neo4j로 가져오거나, row stream을 통해서 가져오는 방법등이 있다.
  • 간단히, 다음의 명령어를 통해서 가져올 수 있는데,
LOAD CSV WITH HEADERS FROM url-value
AS row        // row is a variable that is used to extract data
  • 예시로 사용할 Movie_to_load.csv의 데이터는 다음과 같이 존재합니다.
id,title,country,year,summary
1,Wall Street,USA,1987, Every dream has a price.
2,The American President,USA,1995, Why can't the most powerful man in the world have the one thing he wants most?
3,The Shawshank Redemption,USA,1994, Fear can hold you prisoner. Hope can set you free.
  • 위 데이터를 가져오기 위해서는 다음과 같은 쿼리를 사용하죠. 여기서 WITH HEADERS를 보시면, 위의 csv 파일에서 header에 맞춰서 값을 가져온다는 말인 것이죠. 만약, WITH HEADERS 없이, CSV를 가져오게 되면, 값들이 dictionary가 아니라 list로 반환됩니다.
LOAD CSV WITH HEADERS
FROM 'http://data.neo4j.com/intro-neo4j/movies_to_load.csv'
AS line
RETURN line
╒══════════════════════════════════════════════════════════════════════╕
│"line"                                                                │
╞══════════════════════════════════════════════════════════════════════╡
│{"summary":" Every dream has a price.","country":"USA","year":"1987","│
│id":"1","title":"Wall Street"}                                        │
├──────────────────────────────────────────────────────────────────────┤
│{"summary":" Why can't the most powerful man in the world have the one│
│ thing he wants most?","country":"USA","year":"1995","id":"2","title":│
│"The American President"}                                             │
├──────────────────────────────────────────────────────────────────────┤
│{"summary":" Fear can hold you prisoner. Hope can set you free.","coun│
│try":"USA","year":"1994","id":"3","title":"The Shawshank Redemption"} │
└──────────────────────────────────────────────────────────────────────┘
LOAD CSV
FROM 'http://data.neo4j.com/intro-neo4j/movies_to_load.csv'
AS line
RETURN line
╒══════════════════════════════════════════════════════════════════════╕
│"line"                                                                │
╞══════════════════════════════════════════════════════════════════════╡
│["id","title","country","year","summary"]                             │
├──────────────────────────────────────────────────────────────────────┤
│["1","Wall Street","USA","1987"," Every dream has a price."]          │
├──────────────────────────────────────────────────────────────────────┤
│["2","The American President","USA","1995"," Why can't the most powerf│
│ul man in the world have the one thing he wants most?"]               │
├──────────────────────────────────────────────────────────────────────┤
│["3","The Shawshank Redemption","USA","1994"," Fear can hold you priso│
│ner. Hope can set you free."]                                         │
└──────────────────────────────────────────────────────────────────────┘
  • 그리고, 읽어들인 데이터를 바로 Graph로 만들어주는 경우는 다음과 같이 쿼리를 작성하여 사용하면 됩니다.
LOAD CSV WITH HEADERS
FROM 'https://data.neo4j.com/intro-neo4j/movies_to_load.csv'
AS line
CREATE (movie:Movie { movieId: line.id, title: line.title, released: toInteger(line.year) , tagline: trim(line.summary)})

Importing denormalized data

  • 예시 데이터는 다음과 같습니다. 이전에는 csv의 형태로 comma로 구분되어 있었던 반면 여기서는 ;로 구분되어 있죠.
title;released;summary;actor;birthyear;characters
Back to the Future;1985;17 year old Marty McFly got home early last night. 30 years early.;Michael J. Fox;1961;Marty McFly
Back to the Future;1985;17 year old Marty McFly got home early last night. 30 years early.;Christopher Lloyd;1938;Dr. Emmet Brown
  • 이 데이터를 가져오기 위해서는 AS line FIELDTERMINATOR ';'를 통해 각 row가 무엇으로 구분되어 있는지를 명확하게 작성해줍니다.
LOAD CSV WITH HEADERS
FROM 'https://data.neo4j.com/intro-neo4j/movie_actor_roles_to_load.csv'
AS line FIELDTERMINATOR ';'
RETURN line
  • 또한, 너무 많은 데이터를 가져와야 할 경우에는, LOAD CSV 앞에 PERIODIC COMMIT를 붙여줘서, 처리를 주기적으로 메모리에 문제가 발생하지 않는 선에서 하도록 해줍니다.

wrap-up

  • 이 챕터에서는 데이터를 csv등으로부터 그래프DB에 집어넣는 방법을 정리하였습니다. 기본적으로는 csv로부터 가져오는 것만을 정리하였죠.

댓글남기기