Spanner Graph 데이터 삽입, 업데이트, 삭제

이 문서에서는 Spanner Graph의 데이터를 변경하는 방법을 설명합니다. 그래프 데이터 변형에는 Spanner Graph에서 노드와 에지 삽입, 업데이트, 삭제가 포함됩니다.

Spanner Graph는 테이블의 데이터를 그래프 노드 및 에지에 매핑합니다. 그래프에서 데이터를 변경하려면 해당 입력 테이블에서 데이터를 변경해야 합니다. 자세한 내용은 Spanner Graph 스키마 개요를 참고하세요.

시작하기 전에

Spanner Graph 설정 및 쿼리

노드 또는 에지 삽입

노드 또는 에지를 삽입하려면 Google Cloud 콘솔, Google Cloud CLI 또는 Spanner 클라이언트 라이브러리를 사용하여 노드 또는 에지 테이블에 행을 삽입합니다.

Google Cloud 콘솔과 Google Cloud CLI에서 SQL DML을 사용하여 삽입할 수 있습니다. Spanner 클라이언트 라이브러리에서는 DML 또는 변형 API를 사용할 수 있습니다.

에지를 삽입하기 전에 에지로 연결된 소스 노드와 대상 노드가 있는지 확인합니다. 에지에 연결된 소스 또는 대상 노드가 존재하지 않을 때 에지를 삽입하면 참조 무결성 위반 오류가 발생할 수 있습니다. 자세한 내용은 누락된 소스 노드의 INTERLEAVE IN 관계 위반누락된 대상 노드의 외래 키 제약조건 위반을 참조하세요.

다음 예시에서는 그래프에 Account 노드와 Transfer 에지를 삽입합니다.

콘솔

  1. Google Cloud 콘솔에서 문을 실행합니다.

  2. Google Cloud 콘솔에서 다음 DML 문을 입력하고 쿼리 실행을 클릭합니다.

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

  1. gcloud CLI로 문을 실행합니다.
  2. gcloud CLI에서 다음 명령어를 실행합니다.
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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)"

노드 또는 에지 업데이트

기존 노드 또는 에지를 업데이트하려면 Google Cloud 콘솔, gcloud CLI 또는 Spanner 클라이언트 라이브러리를 사용합니다.

Google Cloud 콘솔과 gcloud CLI에서 SQL DML을 사용하여 업데이트할 수 있습니다. Spanner 클라이언트 라이브러리에서는 DML 또는 변형 API를 사용할 수 있습니다.

다음 예시에서는 그래프에서 Account 노드 및 Transfer 에지를 업데이트합니다.

콘솔

  1. Google Cloud 콘솔에서 문을 실행합니다.

  2. Google Cloud 콘솔에서 다음 DML 문을 입력하고 쿼리 실행을 클릭합니다.

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

  1. gcloud CLI로 문을 실행합니다.
  2. gcloud CLI에서 다음 명령어를 실행합니다.
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="UPDATE Account SET is_blocked = false WHERE id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"

다음 예시와 같이 Spanner Graph 쿼리를 DML 문과 결합할 수 있습니다.

  -- 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
  }

노드 또는 에지 삭제

기존 노드 또는 에지를 삭제하려면 Google Cloud 콘솔, gcloud CLI 또는 Spanner 클라이언트 라이브러리를 사용합니다.

Google Cloud 콘솔과 gcloud CLI에서 SQL DML을 사용하여 삭제할 수 있습니다. Spanner 클라이언트 라이브러리에서는 DML 또는 변형 API를 사용할 수 있습니다.

노드를 삭제하기 전에 노드를 참조하는 에지가 없는지 확인합니다. 이러한 유형의 에지가 있으면 참조 무결성 위반 오류가 발생할 수 있습니다. 자세한 내용은 분리된 발신 에지의 상위-하위 관계 위반분리된 수신 에지의 상위-하위 관계 위반을 참조하세요.

다음 예시에서는 그래프에서 Transfer 에지와 Account 노드를 삭제합니다.

콘솔

  1. Google Cloud 콘솔에서 문을 실행합니다.
  2. Google Cloud 콘솔에서 다음 DML 문을 입력하고 쿼리 실행을 클릭합니다.
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;

-- Delete Account node
DELETE FROM Account WHERE id = 2;

gcloud

  1. gcloud CLI로 문을 실행합니다.
  2. gcloud CLI에서 다음 명령어를 실행합니다.
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="DELETE FROM Account WHERE id = 2"

다음 예시와 같이 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
}

그래프 데이터 변형 옵션

다음과 같은 방법으로 그래프 데이터를 자동으로 변형할 수 있습니다.

  • ON DELETE CASCADE 작업을 사용하여 그래프의 에지를 자동으로 삭제합니다.
  • TTL 정책을 사용하여 그래프의 노드 및 에지를 자동으로 삭제합니다. 자세한 내용은 노드 및 에지의 TTL을 참고하세요.

그래프에서 노드와 에지를 효율적으로 일괄 업데이트 및 삭제하려면 Partitioned DML을 사용하세요.

다음 단계