Spanner Graph 스키마 관리

이 문서에서는 Spanner Graph 속성 스키마 관리에 관한 포괄적인 가이드를 제공하며, DDL 문을 사용하여 스키마를 만들고, 업데이트, 삭제하는 프로세스를 자세히 설명합니다.

속성 그래프 스키마에 대한 자세한 내용은 Spanner Graph 스키마 개요를 참조하세요. 속성 그래프 스키마를 만들 때 오류가 발생하면 Spanner Graph 문제 해결을 참고하세요.

속성 그래프 스키마 만들기

속성 그래프 스키마를 만들려면 다음 단계를 따르세요.

  1. 노드 입력 테이블을 만듭니다.
  2. 에지 입력 테이블을 만듭니다.
  3. 속성 그래프를 정의합니다.

속성 그래프 스키마를 만들 때는 권장사항을 고려하세요.

다음 섹션에서는 속성 그래프 스키마의 예를 만드는 방법을 보여줍니다.

노드 입력 테이블 만들기

다음은 속성 그래프 예시에서 노드 정의의 입력으로 사용되는 두 개의 노드 입력 테이블 PersonAccount를 만듭니다.

  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);

에지 입력 테이블 만들기

다음 코드는 예시 속성 그래프의 가장자리 정의를 위한 입력으로 두 개의 가장자리 입력 테이블 PersonOwnAccountAccountTransferAccount를 만듭니다.

  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 ON DELETE CASCADE;

  CREATE TABLE AccountTransferAccount (
    id               INT64 NOT NULL,
    to_id            INT64 NOT NULL,
    amount           FLOAT64,
    create_time      TIMESTAMP NOT NULL,
    order_number     STRING(MAX),
    FOREIGN KEY (to_id) REFERENCES Account (id)
  ) PRIMARY KEY (id, to_id, create_time),
    INTERLEAVE IN PARENT Account ON DELETE CASCADE;

속성 그래프 정의

다음 코드는 CREATE PROPERTY GRAPH 문을 사용하여 속성 그래프를 정의합니다. 이 문은 AccountPerson 노드와 PersonOwnAccountAccountTransferAccount 에지가 포함된 FinGraph라는 속성 그래프를 정의합니다.

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

속성 그래프 스키마 업데이트

속성 그래프 스키마를 만든 후 CREATE OR REPLACE PROPERTY GRAPH 문을 사용하여 업데이트합니다. 이 문은 원하는 업데이트로 그래프 스키마를 다시 만들어 변경사항을 적용합니다.

속성 그래프 스키마를 다음과 같이 변경할 수 있습니다.

  • 노드 또는 에지 정의 추가: 노드 및 에지의 새 입력 테이블을 만든 다음 CREATE OR REPLACE PROPERTY GRAPH 문을 사용하여 그래프에 새 정의를 추가합니다.

  • 노드 또는 에지 정의 업데이트: 기본 입력 테이블을 새 노드 및 에지 정의로 업데이트합니다. 그런 다음 CREATE OR REPLACE PROPERTY GRAPH 문을 사용하여 그래프의 정의를 업데이트합니다.

  • 노드 또는 에지 정의 삭제: CREATE OR REPLACE PROPERTY GRAPH 문을 사용하고 그래프에서 삭제할 정의를 생략합니다.

새 노드 또는 에지 정의 추가

새 노드 및 새 에지 정의를 추가하려면 다음 단계를 수행합니다.

  1. 새 노드 정의 입력 테이블 Company와 새 에지 정의 입력 테이블 PersonInvestCompany를 추가합니다.

    CREATE TABLE Company (
      id INT64 NOT NULL,
      name STRING(MAX)
    ) PRIMARY KEY (id);
    
    CREATE TABLE PersonInvestCompany (
      id INT64 NOT NULL,
      company_id INT64 NOT NULL,
      FOREIGN KEY (company_id) REFERENCES Company (id)
    ) PRIMARY KEY (id, company_id),
      INTERLEAVE IN PARENT Person ON DELETE CASCADE;
    
  2. 새로운 Company 노드 정의와 새로운 PersonInvestCompany 에지 정의를 추가하여 FinGraph 스키마를 업데이트합니다.

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account,
        Company
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns,
        PersonInvestCompany
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (company_id) REFERENCES Company
          LABEL Invests
      );
    

노드 또는 에지 정의 업데이트

기존 노드 또는 에지 정의를 업데이트하려면 먼저 기본 입력 테이블을 변경한 다음 CREATE OR REPLACE PROPERTY GRAPH 문을 사용하여 스키마 변경사항을 그래프에 적용합니다. 입력 테이블에서 노출된 속성을 맞춤설정하려면 PROPERTIES clause를 사용하세요. 자세한 내용은 라벨 및 속성 맞춤설정을 참고하세요.

다음 단계에서는 스키마의 기본 테이블을 업데이트한 다음 스키마에 업데이트를 적용하는 방법을 보여줍니다.

  1. mailing_address 열을 Person 기본 입력 테이블에 추가합니다.

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. Person 테이블의 변경사항을 스키마에 적용합니다. CREATE OR REPLACE PROPERTY GRAPH 문을 사용합니다. 입력 테이블 스키마가 변경되었기 때문에 Person 노드 정의는 업데이트된 Person 테이블 정의를 반영합니다.

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns
      );
    

노드 또는 에지 정의 삭제

기존 노드 또는 에지 정의를 삭제하려면 해당 노드 또는 에지 테이블 없이 속성 그래프를 다시 만듭니다.

다음은 CREATE OR REPLACE PROPERTY GRAPH 문에서 Person 노드 정의와 PersonOwnAccount 에지 정의를 생략하여 이를 삭제합니다.

  CREATE OR REPLACE PROPERTY GRAPH FinGraph
    NODE TABLES (
      Account
    )
    EDGE TABLES (
      AccountTransferAccount
        SOURCE KEY (id) REFERENCES Account
        DESTINATION KEY (to_id) REFERENCES Account
        LABEL Transfers
    );

속성 그래프 스키마 삭제

기본 입력 테이블에서 그래프 스키마를 삭제하려면 DROP PROPERTY GRAPH DDL 문을 사용합니다. 스키마를 삭제할 때는 기본 테이블의 데이터를 삭제할 수 없습니다.

다음 코드는 FinGraph 속성 그래프 스키마를 삭제합니다.

DROP PROPERTY GRAPH FinGraph;

다음 단계