Snowflake에서 BigQuery로 마이그레이션

이 문서에서는 Snowflake에서 BigQuery로 데이터를 마이그레이션하는 방법에 대한 기술적 배경을 제공합니다. 여기에서는 Snowflake와 BigQuery의 기본적인 차이점에 대해 설명합니다. 또한 다음과 같이 성공적인 마이그레이션을 위한 안내를 제공합니다.

  • 필요한 스키마 변경사항
  • 사용 가능한 마이그레이션 도구 및 옵션
  • 데이터 마이그레이션 방법(샘플 내보내기 프로세스 사용)

또한 일괄 SQL 변환을 사용하여 SQL 스크립트를 일괄적으로 마이그레이션하거나 대화형 SQL 변환을 사용하여 임시 쿼리를 변환할 수 있습니다. Snowflake SQL은 미리보기 상태의 두 도구에서 모두 지원됩니다.

용어

이 문서에서는 Snowflake 및 BigQuery 용어를 사용해서 각 제품으로 제공되는 기능에 대해 설명합니다. 다음 표에서는 Snowflake 용어와 BigQuery 용어를 비교해서 보여줍니다.

Snowflake BigQuery
데이터베이스 데이터 세트
스키마 스키마
세션별 임시 또는 일시적인 테이블 익명 또는 임시 테이블
보안 뷰 승인된 뷰
가상 웨어하우스 예약
구체화된 뷰 구체화된 뷰
파티션 나누기와 동일한 기능 없음(마이크로 파티션 나누기 사용) 파티션 나누기
클러스터링 클러스터링
보안 강화된 사용자 정의 함수(UDF) 승인된 UDF

아키텍처 비교

Snowflake와 BigQuery는 둘 다 분석용 데이터 웨어하우스이지만 아키텍처 면에서 몇 가지 중요한 차이가 있습니다.

Snowflake의 아키텍처는 공유 디스크 데이터베이스 아키텍처와 비공유 데이터베이스 아키텍처가 혼합된 형태입니다. 비공유 아키텍처에서와 같이 Snowflake의 데이터는 별도의 클라우드 객체 스토리지 서비스에서 관리됩니다. 공유 디스크 아키텍처에서와 같이 Snowflake의 쿼리에는 전용 컴퓨팅 클러스터가 사용됩니다. Snowflake에서 각 클러스터는 전체 데이터 세트의 캐시된 부분을 관리하여 쿼리 성능을 가속화합니다. 자세한 내용은 Snowflake 아키텍처를 참조하세요.

BigQuery 아키텍처는 노드 기반 클라우드 데이터 웨어하우스 솔루션 또는 MPP 시스템과 크게 다릅니다. 스토리지와 컴퓨팅이 분리되어 필요에 따라 독립적으로 확장할 수 있습니다. 자세한 내용은 BigQuery 내부 구조를 참조하세요.

사용자 인터페이스 비교

Snowflake 웹 인터페이스는 Snowflake 명령줄 인터페이스(CLI)를 미러링합니다. 두 인터페이스 모두 다음을 수행할 수 있습니다.

  • 데이터베이스 관리
  • 웨어하우스 관리
  • 쿼리 및 워크시트 관리
  • 이전 쿼리 보기

또한 웹 인터페이스를 사용하여 Snowflake 비밀번호 및 사용자 환경설정을 관리할 수 있습니다.

Snowflake CLI 클라이언트는 SnowSQL을 사용해서 Snowflake에 연결하여 SQL 쿼리 및 기타 작업을 실행합니다.

BigQuery 인터페이스는 Google Cloud 콘솔에서 기본 제공되며 확인 가능한 BigQuery 리소스 목록을 포함합니다.

  • BigQuery Studio 섹션에는 데이터 세트, 테이블, 뷰, 기타 BigQuery 리소스가 표시됩니다. 여기에서 쿼리를 만들고 실행하고, 테이블 및 뷰로 작업하고, BigQuery 작업 기록을 확인하고, 기타 일반적인 BigQuery 태스크를 수행할 수 있습니다.
  • 데이터 전송 섹션은 BigQuery Data Transfer Service UI를 엽니다.
  • 예약된 쿼리 섹션에는 예약된 쿼리가 표시됩니다.
  • 용량 관리 섹션에는 슬롯 약정, 예약, 예약 할당이 표시됩니다.
  • BI Engine 섹션에서 BigQuery BI Engine 페이지를 엽니다.

BigQuery에는 또한 Python 기반의 명령줄 도구가 포함됩니다. 자세한 내용은 bq 명령줄 도구 사용을 참조하세요.

보안

Snowflake에서 BigQuery로 마이그레이션하려면 일반적으로 Google Cloud 그리고 특히 BigQuery의 보안 처리 방법이 Snowflake와 어떻게 다른지 고려해야 합니다.

Snowflake에는 다음과 같은 여러 가지 보안 관련 기능이 포함되어 있습니다.

  • 네트워크 및 사이트 액세스
  • 계정 및 사용자 인증
  • 객체 보안
  • 데이터 보안
  • 보안 검증

Snowflake에서 보안은 클라우드 제공업체의 특성에 따라 달라집니다. 객체, 객체 작업, 액세스 제어 정책을 만들거나 수정할 수 있는 사용자를 세부적으로 제어할 수 있습니다.

Snowflake의 액세스 제어 권한에 상응하는 BigQuery 권한은 Google Cloud의 Identity and Access Management(IAM) 역할입니다. 이러한 권한에 따라 리소스에서 허용되는 작업이 결정됩니다. 권한은 Google Cloud 수준에서 적용됩니다.

암호화

Snowflake에서 열 수준 보안은 Enterprise 버전에서 지원되고 고객 관리형 암호화 키는 Business Critical 버전에서 지원됩니다. 버전마다 가격 책정이 다릅니다. BigQuery에서는 향상된 보안 기능 및 모든 기능이 추가 비용 없이 표준 기능으로 제공됩니다.

Snowflake는 모든 저장된 데이터를 자동으로 암호화하는 엔드 투 엔드 암호화를 제공합니다. Google Cloud는 저장 데이터와 전송 중 데이터를 모두 기본적으로 암호화해서 이와 동일한 기능을 제공합니다.

Snowflake Business Critical 버전과 비슷하게, BigQuery에서는 Cloud Key Management Service에서 키 암호화 키를 제어하고 관리하려는 사용자를 위해 고객 관리 암호화 키가 지원됩니다. BigQuery에서는 또한 열 수준 암호화가 지원됩니다. Google Cloud의 암호화에 대한 자세한 내용은 Google Cloud의 저장 데이터 암호화Google Cloud의 전송 중인 데이터 암호화를 참조하세요.

역할

역할은 보안 가능한 객체에 대해 권한을 부여 및 취소할 수 있는 항목입니다.

Snowflake에서는 다음 두 가지 유형의 역할이 지원됩니다.

  • 시스템 정의 역할: 이 역할은 시스템 및 보안 관련 권한으로 구성되며 계정 관리와 관련된 권한으로 생성됩니다.
  • 커스텀 역할: SECURITYADMIN 역할 또는 CREATE ROLE 권한이 있는 역할을 사용하여 이러한 역할을 만들 수 있습니다. Snowflake의 각 커스텀 역할은 권한으로 구성됩니다.

IAM에서 권한은 역할로 그룹화됩니다. IAM은 세 가지 유형의 역할을 제공합니다.

  • 기본 역할: 이러한 역할에는 소유자, 편집자, 뷰어 역할이 있습니다. Google Cloud Console, Identity and Access Management API, gcloud CLI를 사용해서 프로젝트 또는 서비스 리소스 수준에서 이러한 역할을 적용할 수 있습니다. 일반적으로 가장 강력한 보안을 위해서는 BigQuery 관련 역할을 사용해서 최소 권한의 원칙을 따르는 것이 좋습니다.
  • 사전 정의된 역할: 이러한 역할은 BigQuery와 같은 제품의 기능에 대해 보다 세부적인 액세스 권한을 제공하며 일반적인 사용 사례 및 액세스 제어 패턴을 지원합니다.
  • 커스텀 역할: 이러한 역할은 사용자 지정 권한으로 구성됩니다.

액세스 제어

Snowflake를 사용하면 역할에 다른 역할을 부여하여 역할을 계층 구조로 만들 수 있습니다. IAM은 역할 계층 구조를 지원하지 않지만 리소스 계층 구조를 구현합니다. IAM 계층 구조에는 조직 수준, 폴더 수준, 프로젝트 수준, 리소스 수준이 포함됩니다. 계층 구조의 모든 수준에서 IAM 역할을 설정할 수 있으며 해당 상위 리소스의 모든 정책이 리소스에 상속됩니다.

Snowflake 및 BigQuery 모두 테이블 수준 액세스 제어를 지원합니다. 테이블 수준 권한은 테이블 또는 뷰에 액세스할 수 있는 사용자, 그룹, 서비스 계정을 결정합니다. 사용자에게 전체 데이터 세트에 대한 액세스 권한을 부여하지 않고도 특정 테이블 또는 뷰에 대한 액세스 권한을 사용자에게 부여할 수 있습니다.

또한 Snowflake에는 행 수준 보안열 수준 보안이 사용됩니다.

BigQuery에서 IAM은 테이블 수준 액세스 제어를 제공합니다. 또한 보다 세부적인 액세스를 위해서는 열 수준 액세스 제어 또는 행 수준 보안을 사용할 수 있습니다. 이 유형의 제어는 정책 태그 또는 유형 기반의 데이터 분류를 사용하여 민감한 열에 대해 세분화된 액세스 권한을 제공합니다.

또한 지정된 사용자가 기본 테이블에 대해 읽기 액세스 권한이 없어도 뷰를 쿼리할 수 있도록 보다 세분화된 액세스 제어를 위해 데이터 액세스를 제한하도록 승인된 뷰를 만들 수 있습니다.

마이그레이션 시 고려할 사항

Snowflake 기능 중 일부는 BigQuery로 직접 이동할 수 없습니다. 예를 들어 BigQuery는 다음 시나리오에서 기본 제공되는 지원을 제공하지 않습니다. 이러한 시나리오에서는 Google Cloud에서 다른 서비스를 사용해야 할 수 있습니다.

  • 시간 이동: BigQuery에서는 시간 이동을 사용해서 이전 7일 이내의 어느 지점에서든 데이터에 액세스할 수 있습니다. 7일 이전의 데이터에 액세스해야 할 경우 예약된 스냅샷 정기적으로 내보내기를 고려하세요. Snowflake를 사용하면 정의된 기간 내의 어느 지점에서도 변경되었거나 삭제된 과거 데이터에 액세스할 수 있습니다. 이 기간을 0~90일 사이의 값으로 설정할 수 있습니다.

  • 스트림: BigQuery는 Datastream에서 변경 데이터 캡처(CDC)를 지원합니다. 또한 Debezium과 같은 CDC 소프트웨어를 사용하여 Dataflow로 BigQuery에 레코드를 기록할 수 있습니다. BigQuery를 사용해서 CDC 파이프라인을 수동으로 설계하는 방법은 BigQuery에 데이터 웨어하우스 마이그레이션: 변경 데이터 캡처(CDC)를 참조하세요. Snowflake에서 스트림 객체는 변경된 데이터로 작업을 수행할 수 있도록 테이블에 대한 DML 변경사항과 각 변경사항에 대한 메타데이터를 기록합니다.

  • 태스크: BigQuery를 사용하면 쿼리 및 스트림을 예약하거나 Datastream을 사용해서 쿼리에 통합을 스트리밍할 수 있습니다. Snowflake는 최근에 변경된 테이블 행을 처리하기 위해 연속 추출, 로드, 전송 워크플로에 대해 태스크를 테이블 스트림과 조합합니다.

  • 외부 함수: BigQuery는 Cloud Run 함수를 통해 외부 함수 호출을 지원합니다. 하지만 함수가 BigQuery 외부에서 실행되지 않더라도 SQL UDF와 같은 사용자 정의 함수(UDF)를 사용할 수도 있습니다. Snowflake에서 외부 함수는 Snowflake 외부에서 실행되는 코드를 호출합니다. 예를 들어 원격 서비스에 전송된 정보는 일반적으로 프록시 서비스를 통해 릴레이됩니다.

Snowflake에서 BigQuery로 데이터 마이그레이션

이 섹션에서는 BigQuery로 데이터 웨어하우스 마이그레이션: 마이그레이션 대상 및 방법에 설명된 프레임워크에 따라 Snowflake에서 BigQuery로 마이그레이션을 구성 및 시작하는 방법을 설명합니다.

아키텍처

마이그레이션을 시작하려면 Snowflake 및 BigQuery를 모두 실행합니다. 다음 다이어그램은 기존 작업에 최소한의 영향을 주는 아키텍처를 보여줍니다. 깨끗하고 품질이 제어된 데이터를 전송함으로써 기존 도구 및 프로세스를 재사용하여 워크로드를 BigQuery로 오프로드할 수 있습니다. 또한 이전 버전에 대해 보고서 및 대시보드를 검증할 수 있습니다. 그렇더라도 OLAP 데이터가 중복된 위치에서 유지 관리되므로 이 작업은 비용 효율적이지 않습니다. 또한 처리 시간이 늘어납니다.

  • 1번 지점은 Snowflake에서 Cloud Storage로 이동하는 데이터를 보여줍니다.
  • 2번 지점은 BigQuery에 대한 데이터 지속성을 보여줍니다.
  • 3번 지점은 최종 사용자로 데이터가 전송되는 방법을 보여줍니다.

이전 반복에 대해 보고서 및 대시보드를 검증할 수 있습니다. 자세한 내용은 BigQuery로 데이터 웨어하우스 마이그레이션: 확인 및 검증을 참조하세요.

BigQuery로 진행 중인 Snowflake 마이그레이션을 보여줍니다.

데이터 웨어하우스 마이그레이션의 최종 아키텍처에는 Google Cloud에 직접 저장된 소스 시스템의 모든 데이터가 포함됩니다. 소스 시스템의 개수와 복잡성에 따라 우선 순위, 상호 의존성, 통합 위험 또는 기타 비즈니스 요소에 따라 한 번에 하나씩 소스 시스템을 처리함으로써 이 아키텍처 제공을 추가로 스테이징할 수 있습니다.

다음 다이어그램은 Google Cloud로 데이터 파이프라인을 마이그레이션하고 처리한다고 가정합니다.

  • 1번 지점은 동기식 및 비동기식 통합 지점을 모두 보여줍니다. 예를 들어 동기식 통합은 흐름의 일부로 명시적 사용자 작업이 필요한 사용 사례를 처리할 때 데이터 소스와 App Engine 사이에 수행됩니다.
  • 2번 지점은 동시 이벤트 데이터의 대규모 볼륨에 Pub/Sub를 사용하는 것을 보여줍니다.
  • 3번 지점은 데이터 특성에 따라 하나 이상의 Google Cloud 제품을 사용하는 데이터 지속성을 보여줍니다.
  • 4번 지점은 BigQuery에 대한 추출, 변환, 로드(ETL) 프로세스를 보여줍니다.

Snowflake에서 BigQuery로의 마이그레이션 후 작업을 보여줍니다.

Cloud Storage 환경 준비

Google Cloud에서는 다른 ETL 도구를 사용하여 데이터를 BigQuery로 전송하기 위한 몇 가지 방법이 제공됩니다. 패턴은 다음과 같습니다.

  1. 소스에서 데이터 추출: 소스에서 추출된 데이터를 온프레미스 환경의 스테이징 스토리지에 복사합니다. 자세한 내용은 BigQuery로 데이터 웨어하우스 마이그레이션: 소스 데이터 추출을 참조하세요.

  2. 스테이징 Cloud Storage 버킷으로 데이터 전송: 소스에서 데이터 추출을 완료한 후 Cloud Storage에서 임시 버킷으로 데이터를 전송합니다. 전송 중인 데이터 양과 사용 가능한 네트워크 대역폭에 따라 몇 가지 옵션이 있습니다.

    BigQuery 데이터 세트 및 외부 데이터 소스 위치 또는 Cloud Storage 버킷이 동일한 리전에 있는지 확인해야 합니다. Cloud Storage에서 데이터를 로드하기 위한 지리적 위치 고려사항은 데이터 일괄 로드를 참조하세요.

  3. Cloud Storage 버킷에서 BigQuery로 데이터 로드: 데이터가 이제 Cloud Storage 버킷에 배치되어 대상과 더 가까워졌습니다. BigQuery로 데이터를 업로드하는 데에는 몇 가지 옵션이 있습니다. 이러한 옵션은 변환할 데이터 양에 따라 달라집니다. 또는 ETL 방식에 따라 BigQuery 내에서 데이터를 변환할 수도 있습니다.

    JSON 파일, Avro 파일 또는 CSV 파일에서 대량으로 데이터를 가져올 때는 BigQuery가 스키마를 자동으로 감지하므로 이를 사전에 정의할 필요가 없습니다. EDW 워크로드의 스키마 마이그레이션 프로세스 개요를 자세히 살펴보려면 스키마 및 데이터 마이그레이션 프로세스를 참조하세요.

지원되는 데이터 유형, 속성 및 파일 형식

Snowflake와 BigQuery는 이름이 다른 경우도 있지만 대부분 동일한 데이터 유형을 지원합니다. Snowflake 및 BigQuery에서 지원되는 전체 데이터 유형 목록은 Snowflake SQL 변환 참조데이터 유형 섹션을 참조하세요. 또한 일괄 SQL 변환기를 사용하여 변환할 수도 있습니다. BigQuery의 지원되는 데이터 유형에 대한 자세한 내용은 GoogleSQL 데이터 유형을 참조하세요.

Snowflake는 다음 파일 형식으로 데이터를 내보낼 수 있습니다. 형식을 BigQuery에 직접 로드할 수 있습니다.

스키마 변경사항

BigQuery로 마이그레이션할 때 스키마를 변경하려는 경우에는 먼저 스키마를 있는 그대로 마이그레이션하는 것이 좋습니다. BigQuery에서는 별표 스키마 또는 눈송이 스키마와 같은 다양한 데이터 모델 설계 패턴이 지원됩니다. 이러한 지원 덕분에 새 스키마에 대해 업스트림 데이터 파이프라인을 업데이트할 필요가 없고 자동화된 마이그레이션 도구를 사용해서 데이터 및 스키마를 전송할 수 있습니다.

스키마 업데이트

데이터가 BigQuery에 있으면 스키마 정의에 열을 추가하거나 열 모드를 REQUIRED에서 NULLABLE로 완화하는 등 언제든지 스키마를 업데이트할 수 있습니다.

BigQuery에서는 테이블 이름에 대해 대소문자를 구분하는 이름 지정 규칙이 사용되고 Snowflake에서는 대소문자를 구분하지 않는 이름 지정 패턴이 사용됩니다. 따라서 Snowflake에서 테이블 이름 지정 규칙과 관련한 문제가 없는지 확인하고 BigQuery로 이동하는 동안 발생할 수 있는 모든 문제를 수정해야 합니다. 스키마 수정에 대한 자세한 내용은 테이블 스키마 수정을 참조하세요.

다음을 포함한 일부 스키마 수정은 BigQuery에서 직접 지원되지 않고 수동 작업이 필요합니다.

  • 열 이름 변경
  • 열의 데이터 유형 변경
  • 열 모드 변경(REQUIRED 열에서 NULLABLE로의 완화 제외)

이러한 스키마 변경을 수동으로 구현하는 방법은 테이블 스키마 수동 변경을 참조하세요.

최적화

스키마 마이그레이션 후에는 결과에 따라 성능을 테스트하고 최적화할 수 있습니다. 예를 들어 데이터를 보다 효율적으로 관리하고 쿼리할 수 있도록 파티션 나누기를 도입할 수 있습니다. BigQuery에서 파티션 나누기는 파티션이라고 부르는 세그먼트로 나눠진 특수한 테이블을 의미합니다. 파티션 나누기는 데이터가 로드될 때 자동으로 수행되는 Snowflake의 마이크로 파티셔닝과 다릅니다. BigQuery의 파티션 나누기를 사용하면 수집 시간, 타임스탬프, 정수 범위에 따라 파티션 나누기를 수행해서 쿼리 성능을 향상시키고 비용을 제어할 수 있습니다. 자세한 내용은 파티션을 나눈 테이블 소개를 참조하세요.

클러스터링된 테이블

클러스터링된 테이블은 또 다른 스키마 최적화입니다. Snowflake와 비슷하게 BigQuery에서는 테이블을 클러스터링하여 테이블 스키마에 있는 하나 이상의 열 콘텐츠에 따라 테이블 데이터를 자동으로 구성할 수 있습니다. BigQuery는 지정된 열을 사용해서 관련된 데이터를 공동 배치합니다. 클러스터링은 절을 필터링하는 데 사용하는 쿼리나 데이터를 집계하는 쿼리와 같은 특정 유형의 쿼리의 성능을 개선할 수 있습니다. BigQuery에서 클러스터링된 테이블 작업에 대한 자세한 내용은 클러스터링된 테이블 소개를 참조하세요.

마이그레이션 도구

다음 목록은 Snowflake에서 BigQuery로 데이터를 마이그레이션하는 데 사용할 수 있는 도구를 보여줍니다. 이러한 도구는 파이프라인을 사용한 마이그레이션 예시 섹션의 안내에 따라 엔드 투 엔드 마이그레이션 파이프라인을 함께 배치하기 위해 조합됩니다.

  • COPY INTO <location> 명령어: Snowflake에서 이 명령어를 사용하여 Snowflake 테이블에서 지정된 Cloud Storage 버킷으로 직접 데이터를 언로드합니다. 엔드 투 엔드 예시는 GitHub에서 Snowflake에서 BigQuery로(snowflake2bq)를 참조하세요.
  • Apache Sqoop: Snowflake에서 HDFS 또는 Cloud Storage로 데이터를 추출하려면 Sqoop 및 Snowflake의 JDBC 드라이버를 사용하여 Hadoop 작업을 제출합니다. Sqoop는 Dataproc 환경에서 실행됩니다.
  • Snowflake JDBC: JDBC를 지원하는 대부분의 클라이언트 도구 또는 애플리케이션에 이 드라이버를 사용합니다.

다음 일반 도구를 사용해서 Snowflake에서 BigQuery로 데이터를 마이그레이션할 수 있습니다.

  • BigQuery Data Transfer Service: 이 완전 관리형 서비스를 사용해서 BigQuery로 Cloud Storage 데이터를 자동화된 방식으로 일괄 전송할 수 있습니다. 이 도구를 사용하려면 먼저 Snowflake 데이터를 Cloud Storage로 내보내야 합니다.
  • Google Cloud CLI: 이 명령줄 도구를 사용하여 다운로드한 Snowflake 파일을 Cloud Storage에 복사합니다.
  • bq 명령줄 도구: 이 명령줄 도구를 사용해서 BigQuery와 상호작용합니다. 일반적인 사용 사례에는 BigQuery 테이블 스키마 만들기, 테이블에 Cloud Storage 데이터 로드, 쿼리 실행이 포함됩니다.
  • Cloud Storage 클라이언트 라이브러리: Cloud Storage 클라이언트 라이브러리가 사용되는 커스텀 도구를 사용해서 다운로드한 Snowflake 파일을 Cloud Storage에 복사합니다.
  • BigQuery 클라이언트 라이브러리: BigQuery 클라이언트 라이브러리로 빌드된 커스텀 도구를 사용해서 BigQuery와 상호작용합니다.
  • BigQuery 쿼리 스케줄러: 이 기본 제공되는 BigQuery 기능을 사용해서 반복되는 SQL 쿼리를 예약합니다.
  • Cloud Composer: 이 완전 관리형 Apache Airflow 환경을 사용해서 BigQuery 로드 작업 및 변환을 조정합니다.

BigQuery에 데이터 로드에 대한 자세한 내용은 BigQuery에 데이터 로드를 참조하세요.

파이프라인을 사용한 마이그레이션 예시

다음 섹션에서는 추출 및 로드, ETL, 파트너 도구의 세 가지 기법을 사용하여 Snowflake에서 BigQuery로 데이터를 마이그레이션하는 방법에 대한 예시를 보여줍니다.

추출 및 로드

추출 및 로드 기법은 두 가지 방법을 제공합니다.

  • 파이프라인을 사용하여 Snowflake에서 데이터 언로드
  • 파이프라인 및 JDBC 드라이버를 사용하여 Snowflake에서 데이터 내보내기

파이프라인을 사용하여 Snowflake에서 데이터 언로드

Snowflake에서 Cloud Storage로 직접 데이터를 언로드하거나(권장) 또는 데이터를 다운로드하고 gcloud CLI 또는 Cloud Storage 클라이언트 라이브러리를 사용해 Cloud Storage로 복사하려면 snowflake2bq 도구에서 Snowflake COPY INTO <location> 명령어를 사용하여 데이터를 마이그레이션하세요.

그런 후 다음 도구 중 하나를 사용하여 Cloud Storage 데이터를 BigQuery에 로드합니다.

  • BigQuery Data Transfer Service
  • bq 명령줄 도구
  • BigQuery API 클라이언트 라이브러리

파이프라인 및 JDBC 드라이버를 사용하여 Snowflake에서 데이터 내보내기

다음 제품을 사용해서 Snowflake에서 JDBC 드라이버로 Snowflake 데이터를 내보냅니다.

추출, 변환, 로드

BigQuery에 로드하기 전 데이터를 변환하려면 이전 추출 및 로드 섹션에 설명된 파이프라인에서 변환 단계를 추가하면 됩니다.

Snowflake 데이터 변환

데이터를 BigQuery에 로드하기 전에 변환하려면 Snowflake에서 Cloud Storage로 직접 데이터를 언로드하거나 앞의 추출 및 로드 섹션에 설명된 대로 gcloud CLI를 사용하여 데이터를 복사합니다.

Snowflake 데이터 로드

데이터를 변환한 후 다음 방법 중 하나를 사용해서 BigQuery에 데이터를 로드합니다.

파이프라인 및 JDBC 드라이버를 사용하여 Snowflake에서 데이터 변환 및 내보내기

이전 추출 및 로드 섹션에 설명된 대로 다음 파이프라인 옵션에 변환 단계를 추가합니다.

추출, 로드, 변환 사용 사례를 사용해서 Snowflake에서 BigQuery로 데이터를 로드한 후 변환할 수 있습니다. 이 태스크를 수행하려면 이전 추출 및 로드 섹션의 방법 중 하나를 사용해서 Snowflake에서 BigQuery 스테이징 테이블에 데이터를 로드합니다. 그런 후 스테이징 테이블에서 SQL 쿼리를 실행하고 출력을 BigQuery의 최종 프로덕션 테이블에 기록합니다.

마이그레이션을 위한 파트너 도구

EDW 마이그레이션을 전문으로 하는 여러 공급업체가 있습니다. 주요 파트너 및 제공 솔루션 목록은 Google Cloud BigQuery 파트너 웹사이트를 참조하세요.

내보내기 프로세스 예시

다음 섹션에서는 COPY INTO <location> Snowflake 명령어를 사용하는 Snowflake에서 BigQuery로의 샘플 데이터 내보내기를 보여줍니다. 코드 샘플이 포함된 자세한 단계별 프로세스는 Google Cloud 전문 서비스 Snowflake to BigQuery 도구를 참조하세요.

내보내기 준비

언로드를 수행하려면 Snowflake SQL 문을 사용해서 명명된 파일 형식 사양을 만듭니다.

이 튜토리얼에서는 파일 형식으로 my_parquet_unload_format이 사용되지만 다른 이름을 사용할 수도 있습니다.

   create or replace file format my_parquet_unload_format
     type = 'PARQUET'
     field_delimiter = '|'

Snowflake 데이터 내보내기

데이터를 준비한 후 데이터를 Google Cloud로 이동해야 합니다. 이 단계는 다음 두 가지 방법 중 하나로 수행할 수 있습니다.

  1. Snowflake에서 Cloud Storage로 직접 데이터를 내보냅니다.
  2. Amazon Simple Storage Service(Amazon S3) 버킷 또는 Azure Blob Storage에 Snowflake 데이터를 스테이징합니다.

추가 데이터 홉을 방지하려면 데이터를 직접 내보냅니다.

Snowflake 데이터를 Cloud Storage에 직접 내보내기

다음 명령어는 Snowflake COPY 명령어를 사용하여 Snowflake에서 Cloud Storage로 데이터를 언로드하는 방법을 보여줍니다.

  1. Snowflake에서 Snowflake가 외부 Cloud Storage 스테이지에서 참조되는 Cloud Storage 버킷에 쓰기를 수행할 수 있도록 스토리지 통합 객체를 구성합니다.

    이 단계에는 여러 하위 단계가 포함되어 잇습니다.

    1. CREATE STORAGE INTEGRATION 명령어로 통합을 만듭니다.

      create storage integration gcs_int
        type = external_stage
        storage_provider = gcs
        enabled = true
        storage_allowed_locations = ('gcs://mybucket/unload/')
      
    2. DESCRIBE INTEGRATION 명령어로 Snowflake에 대해 Cloud Storage 서비스 계정을 검색하고 스테이징 영역으로 선택된 Cloud Storage 버킷에 액세스할 수 있는 권한을 이 서비스 계정에 부여합니다.

      desc storage integration gcs_int;
      
      +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
      | property                    | property_type | property_value                                                              | property_default |
      +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
      | ENABLED                     | Boolean       | true                                                                        | false            |
      | STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
      | STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
      | STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@project1-123456.iam.gserviceaccount.com                  |                  |
      +-----------------------------+---------------+---------------------------------------------------------
      --------------------+------------------+
      
    3. CREATE STAGE 명령어를 사용하여 만든 통합을 참조하는 외부 Cloud Storage 스테이지를 만듭니다.

      create or replace stage my_ext_unload_stage
        url='gcs://mybucket/unload'
        storage_integration = gcs_int
        file_format = my_parquet_unload_format;
      
  2. COPY INTO <location> 명령어를 사용하여 이전 단계에서 만든 외부 스테이지 객체를 지정하여 Snowflake 데이터베이스 테이블에서 Cloud Storage 버킷으로 데이터를 복사합니다.

    copy into @my_ext_unload_stage/d1
    from mytable;
    

Amazon S3에서 Storage Transfer Service를 통해 Cloud Storage로 Snowflake 데이터 내보내기

다음 예시에서는 COPY 명령어를 사용하여 Snowflake 테이블에서 Amazon S3 버킷으로 데이터 언로드 방법을 보여줍니다.

  1. Snowflake에서 Snowflake가 외부 Cloud Storage 스테이지에 참조된 Amazon S3 버킷에 쓰기를 수행할 수 있도록 스토리지 통합 객체를 구성합니다.

    이 단계에는 Amazon S3 버킷에 대한 액세스 권한 구성, AWS IAM 역할 만들기, Snowflake에서 CREATE STORAGE INTEGRATION 명령어를 사용한 스토리지 통합 만들기가 포함됩니다.

    create storage integration s3_int
      type = external_stage
      storage_provider = s3
      enabled = true
      storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole'
      storage_allowed_locations = ('s3://unload/files/')
    
  2. DESCRIBE INTEGRATION 명령어를 사용하여 AWS IAM 사용자를 검색합니다.

    desc integration s3_int;
    
    +---------------------------+---------------+================================================================================+------------------+
    | property                  | property_type | property_value                                                                 | property_default |
    +---------------------------+---------------+================================================================================+------------------|
    | ENABLED                   | Boolean       | true                                                                           | false            |
    | STORAGE_ALLOWED_LOCATIONS | List          | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/                                | []               |
    | STORAGE_BLOCKED_LOCATIONS | List          | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/    | []               |
    | STORAGE_AWS_IAM_USER_ARN  | String        | arn:aws:iam::123456789001:user/abc1-b-self1234                                 |                  |
    | STORAGE_AWS_ROLE_ARN      | String        | arn:aws:iam::001234567890:role/myrole                                          |                  |
    | STORAGE_AWS_EXTERNAL_ID   | String        | MYACCOUNT_SFCRole=                                                   |                  |
    +---------------------------+---------------+================================================================================+------------------+
    
  3. AWS IAM 사용자에게 Amazon S3 버킷에 액세스하도록 권한을 부여하고 CREATE STAGE 명령어를 사용하여 외부 스테이지를 만듭니다.

      create or replace stage my_ext_unload_stage url='s3://unload/files/'
        storage_integration = s3_int
        file_format = my_parquet_unload_format;
    
  4. COPY INTO <location> 명령어를 사용해서 앞에서 만든 외부 스테이지 객체를 지정하여 Snowflake 데이터베이스에서 Amazon S3 버킷으로 데이터를 복사합니다.

      copy into @my_ext_unload_stage/d1 from mytable;
    
  5. Storage Transfer Service를 사용하여 내보낸 파일을 Cloud Storage에 전송합니다.

다른 클라우드 제공업체를 통해 Cloud Storage에 Snowflake 데이터 내보내기:

Azure Blob Storage Microsoft Azure에 언로드에 설명된 단계를 따릅니다. 그런 후 Storage Transfer Service를 사용하여 내보낸 파일을 Cloud Storage에 전송합니다.

Amazon S3 버킷 Amazon S3에 언로드에 설명된 단계를 따르세요. 그런 후 Storage Transfer Service를 사용하여 내보낸 파일을 Cloud Storage에 전송합니다.

다음 단계