본문 바로가기
GDB & Cypher/간단한 사용법

[Cypher] 노드&엣지 생성/제거하기(CREATE/DELETE Node&Edge)

by 열정주니어 2023. 1. 9.
반응형

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다.

 

이전 포스팅들을 통해 그래프와 레이블을 생성하고 삭제하는 방법까지 알아보았다.

Cypher - 레이블 생성 & 삭제하기

 

Cypher - 레이블 생성&삭제하기(CREATE/DROP LABEL)

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 이전 포스팅에서 그래프를 생성하고 삭제하는 방법까지 알아보았다. Cypher - 그래프 생성&삭제하기

jobdahan-tech.tistory.com

이번 포스팅에서는 노드&엣지를 생성하고 삭제하는 방법을 알아본다.

 

노드&엣지 생성하기(CREATE Node&Edge)

이전 포스팅에서 언급한 바와 같이 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 애플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

노드&엣지를 생성하는 쿼리는 다음과 같다.

CREATE (:vlabel_name {property: 'property_name'});
CREATE (:vlabel_name {property: 'property_name'})-[:elabel_name]->(:vlabel_name {property: 'property_name2'});

CREATE절은 노드&엣지 생성하는 명령이며  생성할 노드 혹은 엣지를 패턴으로 작성하여 사용한다. 패턴을 표현하는 방법에 대해서는 다음의 포스팅을 참고하도록 한다.

 

노드&엣지 제거하기(DELETE Node&Edge)

노드와 엣지를 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

노드와 엣지를 삭제하는 쿼리는 다음과 같다.

-- Delete Node
MATCH (v:vlabel_name {property:'property_name'})
DELETE v;

-- Delete Edge
MATCH (v:vlabel_name {property:'property_name'})-[r:elabel_name]->(v2:vlabel_name {property:'property_name2'})
DELETE l;

DELETE절은 노드 or 엣지를 제거하는 절이며 MATCH절을 통해 제거하고자 하는 노드 or 엣지를 찾고 DELETE절에 variable을 표기하여 해당 노드 or 엣지를 제거한다. 단, 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거된다.

 

예시

이전 포스팅에서 GDB 설명 포스팅의 예시 그래프를 이용하여 sns_network라는 이름의 그래프를 만들고, n_user, e_follow라는 레이블을 생성했다. 다음으로 각 노드와 엣지를 생성해야 한다.

위의 그래프에서 노드의 정보 사용자 정보이고 엣지의 정보 팔로우 정보이므로 사용자 정보 테이블을 이용하여 노드를 생성하고 팔로우 정보 테이블을 이용하여 엣지를 생성한다.

-- Create Node
CREATE (:n_user {name:'김OO', gender:'M', age:27, address:'서울'});
CREATE (:n_user {name:'이OO', gender:'W', age:22, address:'인천'});
CREATE (:n_user {name:'박OO', gender:'W', age:30, address:'부산'});
-- Create Edge
MATCH (v:n_user{name:'김OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:3, comment:5}]->(v2);
MATCH (v:n_user{name:'이OO'}), (v2:n_user{name:'김OO'})
CREATE (v)-[:e_follow {like:2, comment:5}]->(v2);
MATCH (v:n_user{name:'박OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:0, comment:1}]->(v2);

노드와 엣지를 생성하는 쿼리는 위와같다.

 

엣지를 생성할 때 CREATE절만 사용하면 row마다 새로운 노드와 엣지가 생성되므로 노드가 중복이 되어 생성된다. 따라서, MATCH절을 이용하여 엣지를 생성할 노드들을 정해준 후 엣지를 생성해야 한다.

 

노드와 엣지를 한번에 생성한 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려주고, 다음으로 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 생성된 것을 알 수 있다.

지금까지 사용자 정보 테이블을 이용하여 노드, 팔로우 정보 테이블을 이용하여 엣지를 생성하였다.

 

이를 DELETE절을 이용하여 제거해주도록 한다.

-- Delete Edge
MATCH (v:n_user{name:'김OO'})-[r:e_follow{like:3}]->(v2:n_user{name:'이OO'})
DELETE r;
MATCH (v:n_user{name:'이OO'})-[r:e_follow{like:2}]->(v2:n_user{name:'김OO'})
DELETE r;
MATCH (v:n_user{name:'박OO'})-[r:e_follow{like:0}]->(v2:n_user{name:'이OO'})
DELETE r;

-- Delete Node
MATCH (v:n_user{name:'김OO'})
DELETE v;
MATCH (v:n_user{name:'이OO'})
DELETE v;
MATCH (v:n_user{name:'박OO'})
DELETE v;

위에서 설명한바와 같이 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거되므로 엣지를 먼저 제거한 후 노드를 제거한다.

 

노드와 엣지를 제거하는 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메시지를 통해 노드와 엣지가 제거된 것을 알 수 있고, 2번을 통해 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 제거된 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 노드와 엣지를 생성하고 제거하는 방법을 알아보았다.

 

다음 포스팅에서는 그래프 질의를 통해 데이터를 조회하는 방법을 다뤄보며 이번시간에 적재한 데이터가 잘 적재되었는지도 확인 해보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형