Cypher 시작하기

이 절에서는 Cypher와 다음 내용을 소개합니다.

  • 그래프와 패턴에 대한 기본적인 이해

  • 간단한 문제 해결

  • Cypher 구문 작성

AgensGraph는 그래프 데이터를 조회하고 처리하기 위한 쿼리 언어인 Cypher를 지원합니다. Cypher는 SQL과 유사한 선언형 언어입니다. AgensGraph의 그래프는 정점과 간선으로 구성됩니다. 정점과 간선은 여러 개의 속성을 가질 수 있습니다. 실제 데이터는 패턴 형태의 단순 그래프로 구성됩니다. AgensGraph는 Cypher를 통해 그래프의 패턴을 검색하고 처리합니다.

그래프 생성

AgensGraph는 하나의 데이터베이스에 여러 개의 그래프를 저장할 수 있습니다. Cypher는 여러 그래프를 구분하지 못합니다. AgensGraph는 DDL과 Cypher를 사용하여 그래프를 생성하고 관리하기 위한 변수를 지원합니다. 다음 구문은 network라는 그래프를 생성하고 현재 그래프로 설정합니다.

CREATE GRAPH network;
SET graph_path = network;

이 예제에서는 graph_path 변수가 network로 설정됩니다. 그러나 그래프를 생성하기 전에 graph_path가 설정되지 않은 경우, 그래프가 생성된 후 자동으로 설정됩니다.

사용자 생성

CREATE ROLE user1 LOGIN IN ROLE graph_owner;
DROP ROLE user1;

데이터베이스 객체에 대한 소유권 및 기타 권한을 관리하기 위해 새로운 사용자를 생성할 수 있습니다. 새 사용자가 그래프에 레이블을 생성하려면, 해당 사용자는 그래프를 생성한 사용자와 동일한 그룹에 속해야 합니다. 사용자 생성과 관련한 추가 옵션은 이 링크를 참고하시기 바랍니다.

레이블 생성

원칙적으로 그래프 데이터를 생성하기 전에 레이블을 먼저 생성해야 합니다. 그러나 편의를 위해, Cypher의 CREATE를 실행할 때 레이블이 지정되면 해당 레이블이 자동으로 생성됩니다. AgensGraph에서는 정점과 간선에 대해 각각 하나의 레이블을 가져야 합니다. 다음 예제는 person이라는 정점 레이블과 knows라는 간선 레이블을 생성합니다.

CREATE VLABEL person;
CREATE ELABEL knows;
CREATE (n:movie {title:'Matrix'});

정점과 간선 생성

이 절에서는 Cypher의 CREATE를 사용하여 person 정점과 knows 간선을 생성합니다. CREATE 절은 정점과 간선으로 구성된 패턴을 생성합니다. (variable:label {property: value, ...})는 정점 형식이고, -[variable:label {property: value, ...}]-는 간선 형식입니다. 간선의 방향은 < 또는 >로 나타낼 수 있습니다. 정점과 간선의 형식에서 변수는 있을 수도 있고 없을 수도 있습니다.

참고 : AgensGraph는 간선 패턴에서 --를 지원하지 않습니다. --는 문장 끝의 주석을 의미합니다.

다음 예제에서는 “Tom knows Summer”, “Pat knows Nikki”, “Olive knows Todd”와 같은 패턴이 생성됩니다.

CREATE (:person {name: 'Tom'})-[:knows]->(:person {name: 'Summer'});
CREATE (:person {name: 'Pat'})-[:knows]->(:person {name: 'Nikki'});
CREATE (:person {name: 'Olive'})-[:knows]->(:person {name: 'Todd'});

AgensGraph는 정점/간선 속성에 jsonb 타입을 사용합니다. 속성은 JSON 객체를 사용하여 표현됩니다.