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 객체를 사용하여 표현됩니다.