ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Neo4j csv파일 열기(LOAD CSV)
    Data & ML & AI/GraphDB(Neo4j) 2022. 7. 11. 00:43
    반응형

    많은 수의 원본데이터, raw데이터는 csv, 엑셀과 같은 테이블 형식의 데이터입니다.

    처음부터 그래프DB로 시작하는 극히 드문 경우가 아니라면 테이블 형식의 데이터를 그래프DB로 옮겨와야 한다는 뜻입니다.

     

    Neo4j에서 csv파일을 열고 데이터를 가져와 봅시다.

     

    products.csv
    0.00MB

     

     

    출처: http://data.neo4j.com/northwind/products.csv

     

     

    그 전에 주의사항

    데이터를 import 함에 있어 제약조건이 좀 있습니다.

     

    1) CSV파일만 load 가능하다.

    xlsx등의 기타 포맷은 지원하지 않습니다. (neo4j 밖에서 특정한 처리를 통해 csv로 변경해줘야 합니다.)

    Importing data와 관련한 구문으로, LOAD CSV 말고는 존재하지 않습니다. (https://neo4j.com/docs/cypher-manual/current/clauses/)

    csv파일 외에 API, RDBMS에서 가져오는 방법도 있지만 일단 여기서는 생략합니다.

     

     

     

    로컬에 저장된 데이터 읽어오기

    Neo4j Desktop에서 로컬 컴퓨터에서 원하는 디렉토리 파일을 cypher 구문으로 직접 읽어올 수는 없는 것으로 보입니다.

    때문에 Neo4j Desktop 프로그램 GUI상에서 먼저 세팅을 해주어야 합니다.

    1. csv파일을 import folder에 넣기

    1) 작업하고자 하는 DBMS 인스턴스에서 [Open folder]-[Import]를 누르면

    여기다가 파일들 붙여 넣으라고 창이 뜹니다....

    (보통은 파일 선택하기 창이 뜨지 않나...?)

     

    2) csv파일 복사+붙여넣기

    csv파일을 import폴더에 넣어줬습니다.

     

    2. LOAD CSV

    LOAD CSV WITH HEADERS FROM 'file:///products.csv' AS row
    RETURN row;

    LOAD CSV 구문을 활용해서 파일을 읽어올 수 있습니다.

    csv파일에 헤더(header)가 있다면 중간에 WITH HEADERS를 붙이면 됩니다.

    하지만 아직 데이터를 저장했다는 뜻은 아닙니다.

    데이터가 저장된건 아닙니다.

     

    3. CSV 파일 내의 데이터를 LOAD한 뒤 CREATE, SET하기

    데이터를 노드로 저장하기 위해서는 CREATE, SET 구문을 추가적으로 사용해줘야 합니다.

     

    1) CREATE, SET

    LOAD CSV WITH HEADERS FROM 'file:///products.csv' AS row
    CREATE (n:Product)
    SET n = row

    드디어 데이터가 노드형태로 저장되었습니다.
    그래프 형태로도 잘 보입니다.

    하지만 아직 문제가 남아있습니다.

    모든 데이터들이, 수치형 데이터들 마저도 모두 string 형태로 저장되어 있다는 것입니다.

    csv파일에 있던 모든 수치형 데이터가 string값이 되어버렸습니다.

     

    2) toFloat, toInteger

    SET이후에 아래와 같은 형태로 변경을 원하는 데이터를 지정해주면 됩니다.

    노드.속성명 = toFloat(row.칼럼명)
    LOAD CSV WITH HEADERS FROM 'file:///products.csv' AS row
    CREATE (n:Product)
    SET n = row,
    n.unitPrice = toFloat(row.unitPrice),
    n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder),
    n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")

    unitsInStock, reorderLevel등이 제대로 Integer, Float형 데이터로 받아들여졌습니다.

     

     

    온라인에서 데이터 읽어오기

    다음의 경우, 온라인에서도 데이터를 가져올 수 있습니다.

    • 웹사이트에서 csv파일에 대한 접근이 가능하도록 링크를 공유하는 경우(위의 products.csv처럼)
    • 구글 스프레드시트의 데이터를 가져오기
    //Example 1 - website
    LOAD CSV FROM 'https://data.neo4j.com/northwind/customers.csv'
    
    //Example 2 - Google
    LOAD CSV WITH HEADERS FROM 'https://docs.google.com/spreadsheets/d/<yourFilePath>/export?format=csv'

     

    반응형

    댓글

Designed by Tistory.