이 문서에서는 Spanner Graph 설정 및 쿼리에서 만든 스키마 예시를 사용하여 Spanner Graph에서 속성 그래프를 만들고, 업데이트, 삭제하는 방법을 보여줍니다.
Spanner를 사용하면 다운타임 없이 스키마 업데이트를 수행할 수 있습니다. 다음 방법으로 기존 데이터베이스의 스키마를 업데이트할 수 있습니다.
Google Cloud 콘솔
Spanner 스튜디오 페이지에서 명령어를 제출합니다.
Spanner 스튜디오 페이지에 액세스하려면 데이터베이스 개요 또는 테이블 개요 페이지에서 Spanner 스튜디오를 클릭합니다. Spanner 스튜디오 액세스에 대한 자세한 내용은 Google Cloud 콘솔을 사용하여 데이터 관리를 참조하세요.
gcloud spanner
명령줄 도구gcloud spanner databases ddl update
명령어를 사용하여 명령어를 제출합니다.UpdateDatabaseDdl
RPC API
속성 그래프 스키마 만들기
속성 그래프 스키마에 대한 자세한 내용은 Spanner Graph 스키마 개요를 참조하세요.
속성 그래프 스키마를 만들려면 다음 단계를 수행합니다.
노드 입력 테이블
Person
및Account
를 만듭니다. 이러한 테이블은 속성 그래프 예시에서 노드 정의에 대한 입력 테이블로 사용됩니다.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);
에지 입력 테이블
PersonOwnAccount
및AccountTransferAccount
를 만듭니다. 이러한 테이블은 속성 그래프 예시에서 에지 정의에 대한 입력 테이블로 사용됩니다.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
문 예시를 사용하여 속성 그래프를 정의합니다.다음 예시에서는
Account
및Person
노드와PersonOwnAccount
및AccountTransferAccount
에지가 포함된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 문제 해결을 참조하세요.
속성 그래프 스키마 업데이트
다음 방법으로 속성 그래프 스키마를 업데이트할 수 있습니다.
- 새 노드 또는 에지 정의 추가
- 기존 노드 또는 에지 정의 업데이트
- 기존 노드 또는 에지 정의 삭제
어느 경우나 업데이트된 스키마를 사용해서 속성 그래프를 다시 만들어야 합니다.
새 노드 또는 에지 정의 추가
새 노드 및 새 에지 정의를 추가하려면 다음 단계를 수행합니다.
새 입력 테이블을 추가합니다.
새 그래프 요소 정의와 연결된 입력 테이블을 정의합니다. 2개의 새로운 입력 테이블
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;
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 );
기존 노드 또는 에지 정의 업데이트
기존 노드 또는 에지 정의를 업데이트하려면 다음 단계를 수행합니다.
입력 테이블 스키마를 업데이트합니다. 다음 예시에서는
mailing_address
열을 입력 테이블Person
에 추가합니다.ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);
CREATE OR REPLACE PROPERTY GRAPH
로 속성 그래프 스키마를 업데이트합니다. 다음 예시에서는CREATE OR REPLACE PROPERTY GRAPH
문을 사용하여 새 속성mailing_address
를Person
노드 정의에 추가합니다. 이 예시에서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;