Spanner Graph 스키마 개요

이 문서에서는 Spanner Graph 스키마에 대해 설명하고 예제를 통해 주요 개념을 보여줍니다. Spanner Graph에 대한 자세한 내용은 Spanner Graph 개요를 참조하세요.

속성 그래프 데이터 모델

속성 그래프를 사용하면 연결된 데이터를 모델링할 수 있습니다. 속성 그래프는 정보를 노드와 에지의 네트워크로 보여줍니다. 노드는 "고객", "제품", "위치"와 같은 데이터의 항목을 나타내며 에지는 "구매됨", "팔로우", "배치됨"과 같은 이러한 노드 사이의 관계를 보여줍니다.

노드와 에지 모두 다음 정보를 포함할 수 있습니다.

  • 노드와 에지를 집합으로 분류하는 라벨(예: 도시)
  • 키-값 쌍을 나타내는 속성(예: 인구)

그림 1의 예시는 금융 활동을 모델링하는 그래프 설계 방법을 보여줍니다. 이 그래프에는 노드로 모델링되는 다음 유형의 항목이 포함됩니다.

  • Person: 금융 활동을 수행하는 개인을 나타냅니다.
  • Account: 트랜잭션에 사용된 은행 계정을 나타냅니다.

이러한 항목은 다음과 같이 방향 지정된 에지로 표시되는 여러 유형의 관계로 연결됩니다.

  • Owns: 한 사람이 하나 이상의 계정을 소유합니다.
  • Transfers: 한 계정에서 다른 계정으로 자금이 이동합니다.

각 방향 에지는 소스 노드에서 대상 노드로 이어지는 단방향 관계를 나타냅니다. 예를 들어 Transfers 에지는 소스 Account를 대상 Account에 연결하며, 자금 흐름을 나타냅니다.

Spanner Graph 스키마 개요 다이어그램

그림 1. 여러 노드와 방향 에지가 포함된 그래프 예시.

노드와 에지는 속성의 형태로 추가적인 정보를 포함할 수 있습니다. 각 속성에는 이름과 값이 포함됩니다.

  • Person 노드에는 다음 속성이 포함됩니다.
    • name(STRING)
    • id(INT64)
  • Transfers 에지에는 다음 속성이 포함됩니다.
    • amount(FLOAT64)

방향 에지와 비방향 에지

그래프 예시에서는 항목 간 관계에서 특정 방향을 나타내는 방향 에지가 사용됩니다. 하지만 소셜 네트워크에서 "친구" 관계와 같은 일부 관계는 방향이 없으며, 고유한 시작점 또는 끝점 없이 상호적인 연결을 나타냅니다. 이 경우 하나의 에지가 각 방향을 나타내는 2개의 방향 에지를 사용해서 비방향 에지를 모델링할 수 있습니다.

Spanner Graph 스키마 설계

Spanner Graph를 사용하면 CREATE PROPERTY GRAPH 문을 사용하여 테이블로부터 그래프를 만들 수 있습니다. 그래프를 만드는 데 사용되는 테이블을 입력 테이블이라고 부릅니다. 이 접근 방법은 SQL:2023 표준에 속하는 SQL/PGQ(속성 그래프 쿼리)를 기반으로 합니다.

속성 그래프에서 노드 정의

노드를 정의하려면 NODE TABLES 절에 노드 정의를 추가합니다. 가장 간단한 노드 정의 형태에는 입력 테이블 이름만 포함됩니다. 입력 테이블의 행은 그래프 노드에 매핑됩니다.

다음 예시에서는 NODE TABLES 절을 사용하여 FinGraph 속성 그래프에서 Account 노드를 정의합니다. 노드 정의에는 입력 테이블 Account가 포함됩니다.

-- First, create an Account table.
CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

-- Next, use the Account table as input table of Account node definition.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account
  );

기본 라벨과 속성

기본적으로 모든 노드는 입력 테이블 이름을 해당 라벨로 사용하며, 입력 테이블의 모든 열은 노드 속성으로 노출됩니다.

위 예시에 대한 설명은 다음과 같습니다.

  • 각 계정 노드에 Account 라벨이 포함됩니다.
  • 각 계정 노드에 Account 테이블 열에서 생성된 [id, create_time] 속성이 포함됩니다.

요소 키

노드 정의는 또한 그래프 노드를 고유하게 식별하는 요소 키를 정의합니다.

  • 기본적으로 요소 키는 입력 테이블의 기본 키입니다.
  • 요소 키는 KEY 절로 명시적으로 정의할 수 있습니다.
  • 고유성 제약조건 UNIQUE INDEX가 있는 열은 요소 키로 사용될 수 있습니다.

다음 예시는 Account 노드 및 Person 노드를 정의합니다.

  • Account 노드는 기본적으로 Account 테이블의 기본 키를 해당 요소 키로 사용합니다.
  • 반면에 Person 노드는 KEY 절을 사용해서 id를 요소 키로 명시적으로 지정합니다.
CREATE TABLE Person (
  id           INT64 NOT NULL,
  name         STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id),
    Account
  );

입력 테이블의 행을 그래프의 노드에 매핑

  • null이 아닌 요소 키가 있는 각 행은 그래프에서 해당 요소 키로 식별된 고유 노드에 매핑됩니다.
  • null 요소 키가 있는 행은 무시됩니다.

속성 그래프에서 에지 정의

에지를 정의하려면 EDGE TABLES 절에 에지 정의를 추가합니다. 가장 간단한 에지 정의 형태에는 입력 테이블 이름만 포함됩니다. 입력 테이블의 행은 그래프 에지에 매핑됩니다.

소스 및 대상 노드 참조

다음 예시에서는 다음을 사용하여 속성 그래프 FinGraph를 만듭니다.

  • PersonAccount 노드
  • PersonOwnAccount 에지
CREATE TABLE Person (
 id            INT64 NOT NULL,
 name          STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id            INT64 NOT NULL,
 create_time   TIMESTAMP,
) PRIMARY KEY (id);

CREATE TABLE PersonOwnAccount (
 id            INT64 NOT NULL,
 account_id    INT64 NOT NULL,
 create_time   TIMESTAMP,
 FOREIGN KEY (account_id) REFERENCES Account (id)
) PRIMARY KEY (id, account_id),
  INTERLEAVE IN PARENT Person;

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person,
    Account
  )
  EDGE TABLES (
    PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
  );

에지 정의는 SOURCE KEY, DESTINATION KEY, REFERENCES 절을 사용해서 소스 및 대상 노드 참조를 정의해야 합니다. 다음 예시는 PersonOwnAccount의 에지 정의를 사용하여 이 개념을 보여줍니다.

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

PersonOwnAccount 에지는 Person(소스)을 Account(대상) 노드에 연결합니다.

  • 에지의 SOURCE 노드는 해당 id가 에지 id와 동일한 Person 노드입니다.
  • 에지의 DESTINATION 노드는 해당 id가 에지 account_id와 동일한 Account 노드입니다.

또한 PersonOwnAccount 에지에는 다음이 적용됩니다.

  • 요소 키가 PersonOwnAccount 테이블의 기본 키입니다(즉, (id, account_id)).
  • 각 에지에 PersonOwnAccount 테이블의 열과 동일한 속성 집합이 포함됩니다.
  • 각 에지에 기본 PersonOwnAccount 라벨이 포함됩니다.

에지 입력 테이블의 행을 그래프의 에지에 매핑

  • 해당 요소 키가 null이 아닌 에지 입력 테이블의 각 행은 일반적으로 그래프에서 고유 에지로 매핑됩니다.
  • 행은 그래프에 있는 0개 또는 그 이상의 에지에 대응할 수 있습니다. 예를 들어 소스 노드 참조로 소스 노드 테이블에 있는 0개 또는 그 이상의 노드와 일치할 경우에 이러한 결과가 발생할 수 있습니다.
  • 여러 다른 노드 및 에지 정의에서 동일한 입력 테이블을 사용하여 서로 다른 노드 또는 에지 집합을 만들 수 있습니다. 자세한 내용은 노드 및 에지 입력 테이블 병합을 참조하세요.

라벨 및 속성 맞춤설정

LABELPROPERTIES 절을 사용해서 라벨 및 속성을 맞춤설정할 수 있습니다.

다음 예시에서는 PersonAccount라는 2개의 노드가 정의됩니다.

  • Person 노드는 Customer 라벨을 통해 address 속성을 expose합니다. address 속성은 입력 테이블 Person에서 citycountry 열을 참조하는 CONCAT(city, ", ", country), 표현식으로 정의됩니다.
  • Account의 경우 Account 노드는 Account 라벨을 통해 idcreate_time 속성을 노출합니다.
  • PersonAccount에는 [id, name] 속성이 있는 Entity 라벨이 포함됩니다.
    • Person의 경우 idname 속성은 입력 테이블 열에서 제공됩니다.
    • Account의 경우 name 속성은 입력 테이블의 nick_name 열을 참조합니다.
CREATE TABLE Person (
 id               INT64 NOT NULL,
 name             STRING(MAX),
 birthday         TIMESTAMP,
 country          STRING(MAX),
 city             STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id               INT64 NOT NULL,
 create_time      TIMESTAMP,
 is_blocked       BOOL,
 nick_name        STRING(MAX),
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Customer
        PROPERTIES (CONCAT(city, ", ", country) AS address)
      LABEL Entity PROPERTIES (id, name),
    Account KEY (id)
      LABEL Account PROPERTIES (id, create_time)
      LABEL Entity PROPERTIES (id, nick_name AS name)
  );

라벨 및 속성 일관성

그래프에서 라벨과 속성은 해당 이름으로 고유하게 식별됩니다. 동일한 이름의 라벨과 속성이 여러 노드 또는 에지 정의에 표시될 수 있습니다. 하지만 동일한 이름의 라벨과 속성은 다음 규칙을 따라야 합니다.

  • 동일한 이름의 속성은 값 유형이 동일해야 합니다.
  • 동일한 이름의 라벨은 동일한 속성 목록을 노출해야 합니다.

이전 예시에서 Entity 라벨은 PersonAccount 노드에 모두 정의되어 있습니다. 두 정의 모두 값 유형이 동일한 속성 이름 [id, name] 집합을 포함합니다.

그래프와 다른 스키마 객체 사이의 종속 항목

CREATE PROPERTY GRAPH로 만든 그래프에는 노드 및 에지 정의의 입력 테이블과 같은 다른 스키마 객체에 대한 종속 항목과 속성으로 참조되는 테이블 열이 포함됩니다. 스키마 변경으로 이러한 종속 항목 중 하나가 손상될 경우 변경이 허용되지 않습니다.

다음 문은 특히 id, create_time 열을 포함하는 FinGraphAccount 테이블 간에 종속 항목을 만듭니다.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

다음은 허용되지 않는 스키마 변경에 대한 예시입니다.

하지만 다음과 같은 스키마 변경은 수행할 수 있습니다.

  • 다른 스키마 요구사항에 따라 허용되는 경우 Account 테이블과 idcreate_time 열 스키마를 수정합니다. 자세한 내용은 스키마 업데이트 수행을 참조하세요.

다음 단계