Spanner Graph 스키마 만들기, 업데이트, 삭제

이 문서에서는 Spanner Graph 설정 및 쿼리에서 만든 스키마 예시를 사용하여 Spanner Graph에서 속성 그래프를 만들고, 업데이트, 삭제하는 방법을 보여줍니다.

Spanner를 사용하면 다운타임 없이 스키마 업데이트를 수행할 수 있습니다. 다음 방법으로 기존 데이터베이스의 스키마를 업데이트할 수 있습니다.

속성 그래프 스키마 만들기

속성 그래프 스키마에 대한 자세한 내용은 Spanner Graph 스키마 개요를 참조하세요.

속성 그래프 스키마를 만들려면 다음 단계를 수행합니다.

  1. 노드 입력 테이블 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);
    
  2. 에지 입력 테이블 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;
    
  3. 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
      );
    

이 예시는 다음 권장사항을 따릅니다.

자세한 내용은 그래프 스키마 설계 권장사항을 참조하세요.

일반적인 Spanner Graph 스키마 오류에 대한 자세한 내용은 Spanner Graph 문제 해결을 참조하세요.

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

다음 방법으로 속성 그래프 스키마를 업데이트할 수 있습니다.

  1. 새 노드 또는 에지 정의 추가
  2. 기존 노드 또는 에지 정의 업데이트
  3. 기존 노드 또는 에지 정의 삭제

어느 경우나 업데이트된 스키마를 사용해서 속성 그래프를 다시 만들어야 합니다.

새 노드 또는 에지 정의 추가

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

  1. 새 입력 테이블을 추가합니다.

    새 그래프 요소 정의와 연결된 입력 테이블을 정의합니다. 2개의 새로운 입력 테이블 CompanyPersonInvestCompany를 추가하는 다음 예시를 참조하세요.

    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. CREATE OR REPLACE PROPERTY GRAPH로 그래프를 업데이트합니다. 다음 예시에서는 새로운 노드 정의 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
      );
    

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

기존 노드 또는 에지 정의를 업데이트하려면 다음 단계를 수행합니다.

  1. 입력 테이블 스키마를 업데이트합니다. 다음 예시에서는 mailing_address 열을 입력 테이블 Person에 추가합니다.

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. CREATE OR REPLACE PROPERTY GRAPH로 속성 그래프 스키마를 업데이트합니다. 다음 예시에서는 CREATE OR REPLACE PROPERTY GRAPH 문을 사용하여 새 속성 mailing_addressPerson 노드 정의에 추가합니다. 이 예시에서 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
      );
    

    또한 PROPERTIES clause()를 사용하여 입력 테이블에서 노출된 속성을 맞춤설정할 수 있습니다. 자세한 내용은 라벨 및 속성 맞춤설정을 참조하세요.

기존 노드 또는 에지 정의 삭제

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

다음 예시에서는 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;

다음 단계