이 문서에서는 노드와 에지를 삽입, 업데이트, 삭제하여 Spanner Graph에서 데이터를 관리하는 방법을 보여줍니다. Spanner Graph는 테이블의 데이터를 그래프 노드 및 에지에 매핑합니다. 그래프에서 데이터를 변경하려면 해당 입력 테이블에서 데이터를 변경해야 합니다. Google Cloud 콘솔, Google Cloud CLI 또는 Spanner 클라이언트 라이브러리를 사용하여 그래프 데이터를 관리할 수 있습니다.
Spanner Graph 설정
Spanner Graph에서 데이터를 관리하려면 다음을 수행하여 Spanner Graph를 설정해야 합니다.
Spanner 인스턴스에서 데이터베이스를 만듭니다.
데이터베이스에 그래프 데이터 삽입
이 섹션의 예시에서는 이전 단계에서 Spanner Graph를 설정할 때 만든 인스턴스와 데이터베이스를 사용합니다.
노드 또는 에지 삽입
노드 또는 에지를 노드 또는 에지 테이블에 삽입하려면 Google Cloud 콘솔, gcloud CLI 또는 Spanner 클라이언트 라이브러리를 사용합니다.
Google Cloud 콘솔 및 gcloud CLI에서 GoogleSQL 데이터 조작 언어(DML)를 사용할 수 있습니다. Spanner 클라이언트 라이브러리에서는 DML 또는 변형 API를 사용할 수 있습니다.
에지를 삽입하기 전에 에지로 연결된 소스 및 대상 노드가 존재하는지 확인합니다. 에지에 연결된 소스 또는 대상 노드가 존재하지 않을 때 에지를 삽입하면 참조 무결성 위반 오류가 발생할 수 있습니다. 자세한 내용은 누락된 소스 노드의 INTERLEAVE IN 관계 위반 및 누락된 대상 노드의 외래 키 제약조건 위반을 참조하세요.
다음 예시에서는 Spanner Graph 설정에서 만든 데이터베이스에 Account
노드와 Transfer
에지를 삽입합니다.
콘솔
Google Cloud 콘솔에서 다음 DML 문을 실행합니다. 자세한 내용은 Google Cloud 콘솔에서 문 실행을 참고하세요.
-- Insert 2 Account nodes.
INSERT INTO Account (id, create_time, is_blocked)
VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false);
INSERT INTO Account (id, create_time, is_blocked)
VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true);
-- Insert 2 Transfer edges.
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100);
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200);
gcloud
gcloud CLI에서 다음 명령어를 실행합니다. 자세한 내용은 gcloud CLI로 문 실행을 참고하세요.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200)"
다음을 바꿉니다.
- DATABASE_NAME: 데이터베이스 이름입니다.
- INSTANCE_NAME: 인스턴스의 이름.
클라이언트 라이브러리
Python
자바
Go
C++
노드 또는 에지 업데이트
기존 노드나 에지를 업데이트하려면 Google Cloud 콘솔, gcloud CLI 또는 Spanner 클라이언트 라이브러리를 사용합니다.
GoogleSQL 데이터 조작 언어(DML) 문 또는 DML 문이 포함된 Spanner Graph 쿼리를 사용하여 기존 노드 또는 에지를 업데이트할 수 있습니다. Spanner 클라이언트 라이브러리를 사용하는 경우 변형 API를 사용할 수도 있습니다.
DML을 사용하여 노드 또는 에지 업데이트
다음 예시에서는 DML을 사용하여 노드 또는 에지 삽입에서 추가한 Account
노드와 Transfer
에지를 업데이트합니다.
콘솔
Google Cloud 콘솔에서 다음 DML 문을 실행합니다. 자세한 내용은 Google Cloud 콘솔에서 문 실행을 참고하세요.
-- Update Account node
UPDATE Account SET is_blocked = false WHERE id = 2;
-- Update Transfer edge
UPDATE AccountTransferAccount
SET amount = 300
WHERE id = 1 AND to_id = 2;
gcloud
- gcloud CLI로 문을 실행합니다.
- gcloud CLI에서 다음 명령어를 실행합니다.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE Account SET is_blocked = false WHERE id = 2"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"
다음을 바꿉니다.
- DATABASE_NAME: 데이터베이스 이름입니다.
- INSTANCE_NAME: 인스턴스의 이름.
클라이언트 라이브러리
Python
자바
Go
C++
그래프 쿼리 및 DML을 사용하여 노드 또는 에지 업데이트
다음 예시에서는 DML이 포함된 Spanner Graph 쿼리를 사용하여 노드 또는 에지 삽입에서 추가한 Account
노드 및 Transfer
에지를 업데이트합니다.
콘솔
Google Cloud 콘솔에서 다음 DML 문을 실행합니다. 자세한 내용은 Google Cloud 콘솔에서 문 실행을 참고하세요.
-- Use Graph pattern matching to identify Account nodes to update:
UPDATE Account SET is_blocked = false
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account)
RETURN b.id
}
gcloud
gcloud CLI에서 다음 명령어를 실행합니다. 자세한 내용은 gcloud CLI로 문 실행을 참고하세요.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE_NAME \ --sql="UPDATE Account SET is_blocked = false"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2" --sql=" WHERE id IN { GRAPH FinGraph MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account) RETURN b.id }"
다음을 바꿉니다.
- DATABASE_NAME: 데이터베이스 이름입니다.
- INSTANCE_NAME: 인스턴스의 이름.
클라이언트 라이브러리
Python
자바
Go
C++
노드 또는 에지 삭제
기존 노드나 에지를 삭제하려면 Google Cloud 콘솔, gcloud CLI 또는 Spanner 클라이언트 라이브러리를 사용합니다.
Google Cloud 콘솔과 gcloud CLI에서는 GoogleSQL 데이터 조작 언어(DML)를 사용하여 삭제할 수 있습니다. Spanner 클라이언트 라이브러리에서는 DML 또는 변형 API를 사용하여 노드나 에지를 삭제할 수 있습니다.
참조 무결성 위반 오류를 방지하려면 노드를 삭제할 때 노드를 참조하는 에지가 없는지 확인하세요. 자세한 내용은 분리된 발신 에지의 상위-하위 관계 위반 및 분리된 수신 에지의 상위-하위 관계 위반을 참고하세요.
다음 예시에서는 그래프에서 Transfer
에지와 Account
노드를 삭제합니다.
콘솔
Google Cloud 콘솔에서 다음 DML 문을 실행합니다. 자세한 내용은 Google Cloud 콘솔에서 문 실행을 참고하세요.
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
gcloud CLI에서 다음 명령어를 실행합니다. 자세한 내용은 gcloud CLI로 문 실행을 참고하세요.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM Account WHERE id = 2"
다음을 바꿉니다.
- DATABASE_NAME: 데이터베이스 이름입니다.
- INSTANCE_NAME: 인스턴스의 이름.
클라이언트 라이브러리
Python
자바
Go
C++
다음 예시와 같이 Spanner Graph 쿼리를 DML 문과 결합할 수 있습니다.
-- Use Graph pattern matching to identify Account nodes to delete:
DELETE FROM AccountTransferAccount
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->(b:Account)
RETURN b.id
}
자동화된 대량 데이터 작업
DML을 사용하여 개별 노드와 에지를 삽입, 업데이트, 삭제하는 것 외에도 다음 메서드를 사용하여 Spanner Graph 데이터를 관리할 수 있습니다.
ON DELETE CASCADE 작업을 사용하여 그래프의 에지 삭제를 자동화할 수 있습니다.
TTL 정책을 사용하여 그래프의 노드와 에지를 자동으로 삭제할 수 있습니다. 자세한 내용은 노드 및 에지의 TTL을 참조하세요.
Partitioned DML을 사용하여 그래프에서 노드와 에지를 효율적으로 일괄 업데이트 및 삭제합니다.
다음 단계
- Spanner Graph 쿼리 개요 읽어보기
- Spanner Graph 쿼리 조정 권장사항 알아보기