Neo4j(Graph DB)로 만드는 Data Lineage (1) - Needs와 Cypher

Database/ETC DBMS / /
728x90

1.   Needs

1)   Data Lineage 필요성

Data ETL 해서 사용하다가 보면 해당 데이터가 어떤 원천 소스에서부터 시작된 데이터인지 파악하기 힘들다.

 

그렇기 때문에 현재 이르러서는 Data lineage라고 하여 데이터가 어떤 원천 데이터로부터 시작되었는가를 파악하기 위한 시스템을 구축하고 있다.

 

참조

데이터 거버넌스 & 데이터 도메인 & 데이터 리니지

 

2)   Why Neo4j?


Graph DB NodeNode Edge를 연결하는 DBMS. 따라서 NodeNode간의 관계를 파악하기 쉽고 관계 정보를 저장하기 쉽다.

 

그래서 Neo4j라는 Graph DBMS 를 통해 각 데이터들을 연결하고 관계를 정립하여 Data Lineage를 구축하는 방법을 구축해보고자 하였다.

 

참조

GraphDB 와 Neo4j 설치

 

 

2.   neo4j CRUD

1)   Cypher 기본 구조

(1)    모든 Node () 안에 정의 된다.

(2)    모든 Edge [] 안에 정의 된다.

(3)    별칭:Node(또는 Edge)명으로 하여 별칭을 사용할 수 있다.

(4)    Node(또는 Edge) LabelKey-Value 형태로 저장한다.

2)   Create

create  (LoginLog:EntitySource{

            strName:'LoginLog'

            strSourceType:'Mariadb 10.5.8'

            strSourceIP:'127.0.0.1'

            strSourceDB:'Logs'

            strComment:'사용자 로그인 정보'

        }),

        (LoginDate:Attr{

            strName:'LoginDate'

            strType:'date'

            strComment:'접속일'

        })-[:AttrToSrc]->(LoginLog);

 

(1)    Neo4j에서 Insert Create문으로 정의됨

(2)    Node Edge에 데이터를 정의하면 따로 생성해 두지 않아도 자동 생성됨

(3)    ‘ , ’ 를 통하여 여러 개를 동시에 Insert 가능

(4)    Edge (Node)-[Edge]->(Node) 형태로 생성할 수 있음

(5)    Edge의 생성 중 -> 는 방향성을 나타냄

3)   Read

match   (a:Attr)-[:AttrToSrc]->(b:EntitySource {strName:'LogoutLog'}),

        (d:EntityBigdata {strName:'LogoutLog'}) 

return *;

 

(1)    match라는 명령어로 데이터를 조회한다.

(2)    (Node), 또는 (Node)-[Edge]->(Node) 로 조회 후 데이터를 return 하거나 Create 하여 또 다른 Node(또는 Edge)를 생성할 수 있다.

(3)    데이터 조회의 조건문은 해당 Node(또는 Edge) Label을 입력하여 사용한다.

(4)    match 에서 ‘ , ‘ 를 사용하여 해당 데이터와 독립적인 별도의 데이터셋을 조회할 수 있다.

(5)    Node를 서로 독립적으로 조회함으로 모든 Edge로 조회 가능

(6)    모든 데이터 조회

match (n) return n

4)   Update

match (es:EntitySource{strName:'LoginLog'})

SET es.strComment='사용자 접속 로그 입니다.'

return es

 

(1)    match를 통해 데이터가 변경될 Row 조회

(2)    Set문을 통해 해당 Label의 데이터를 변경

(3)    return 으로 변경된 값을 조회

5)   Delete

(1)    해당 Node만 삭제

MATCH (n:Person {name'UNKNOWN'})

DELETE n

 

(2)    해당 Edge(Relation)만 삭제

MATCH (n {name'Andy'})-[r:KNOWS]->()

DELETE r

 

(3)    해당 Node 및 연결된 Edge 삭제

MATCH (n {name'Andy'})

DETACH DELETE n

 

(4)    모든 데이터 삭제

MATCH (n)

DETACH DELETE n

 

 

3.   출처

1)      https://neo4j.com/developer/cypher/updating/

2)      https://neo4j.com/docs/cypher-manual/current/clauses/delete/

728x90

'Database > ETC DBMS' 카테고리의 다른 글

Neo4j(Graph DB)로 만드는 Data Lineage (2) - 설계 및 구축  (0) 2021.07.29
Graph DB 와 Neo4j 설치  (0) 2021.07.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기