기존 BigQuery 테이블에서 Datastream 사용

이 페이지에서는 다음과 같은 사용 사례에 대한 권장사항을 설명합니다.

  • BigQuery에 기존 테이블이 있고 변경 데이터 캡처(CDC)를 사용하여 동일한 BigQuery 테이블에 데이터를 복제해야 합니다.
  • 사용자는 소요 시간이나 제품 제한사항으로 인해 Datastream 백필 기능을 사용하지 않고 기존 BigQuery 테이블에 데이터를 복사해야 합니다.

문제

BigQuery Storage Write API를 사용하여 채워진 BigQuery 테이블은 일반 데이터 조작 언어(DML) 작업을 허용하지 않습니다. 즉, CDC 스트림이 BigQuery 테이블에 쓰기를 시작하면 해당 테이블에 미리 채워지지 않은 이전 데이터를 추가할 방법이 없습니다.

다음 상황을 살펴보세요.

  1. TIMESTAMP 1: 테이블 복사 작업이 시작됩니다.
  2. TIMESTAMP 2: 테이블이 복사되는 동안 소스의 DML 작업으로 인해 데이터가 변경됩니다(행 추가, 업데이트 또는 삭제).
  3. TIMESTAMP 3: CDC가 시작되고 TIMESTAMP 2에서 발생한 변경사항이 캡처되지 않아 데이터 불일치가 발생합니다.

해결책

CDC 프로세스는 데이터 무결성을 보장하기 위해 BigQuery 테이블에 복사된 마지막 업데이트 직후에 발생한 소스의 모든 변경사항을 캡처해야 합니다.

다음 솔루션을 사용하면 복사 작업이 BigQuery 테이블에 데이터를 쓰지 못하도록 차단하지 않고도 CDC 프로세스에서 TIMESTAMP 2의 모든 변경사항을 캡처할 수 있습니다.

기본 요건

  • BigQuery의 대상 테이블에는 Datastream에서 테이블을 만들 때와 정확히 동일한 스키마와 구성이 있어야 합니다. 이를 위해 Datastream BigQuery 마이그레이션 툴킷을 사용할 수 있습니다.
  • MySQL 및 Oracle 소스의 경우 복사 작업이 시작될 때 사용자가 해당 로그 위치를 식별할 수 있어야 합니다.
  • 테이블 복사 프로세스를 완료하려면 데이터베이스에 충분한 스토리지 및 로그 보관 정책이 있어야 합니다.

MySQL 및 Oracle 소스

  1. 진행 중인 CDC 복제에 사용할 스트림을 만들지만 시작하지는 않습니다. 스트림은 생성됨 상태여야 합니다.
  2. 테이블 복사 작업을 시작할 준비가 되면 데이터베이스의 현재 로그 위치를 식별합니다.
    • MySQL의 경우 복제 바이너리 로그 좌표를 가져오는 방법을 알아보려면 MySQL 문서를 참조하세요. 로그 위치를 식별한 후 세션을 닫아 데이터베이스에서 모든 잠금을 해제합니다.
    • Oracle의 경우 SELECT current_scn FROM V$DATABASE 쿼리를 실행합니다.
  3. 소스 데이터베이스의 테이블을 BigQuery에 복사합니다.
  4. 복사 작업이 완료되면 스트림 관리 페이지에 설명된 단계에 따라 앞서 식별한 로그 위치에서 스트림을 시작합니다.

PostgreSQL 소스

  1. 테이블 복사를 시작할 준비가 되면 복제 슬롯을 만듭니다. 자세한 내용은 소스 MySQL 데이터베이스 구성을 참조하세요.
  2. 소스 데이터베이스의 테이블을 BigQuery에 복사합니다.
  3. 복사 작업이 완료되면 스트림을 만든 후 시작합니다.