Snowflake에서 BigQuery로 마이그레이션 튜토리얼

이 문서에서는 Snowflake에서 BigQuery로의 마이그레이션 파이프라인을 설정하는 다양한 방법에 대한 엔드 투 엔드 예시와 튜토리얼을 제공합니다.

Snowflake 마이그레이션 파이프라인 예시

ELT, ETL 또는 파트너 도구를 사용하여 Snowflake에서 BigQuery로 데이터를 마이그레이션할 수 있습니다.

추출, 로드, 변환

다음 두 가지 방법으로 추출, 로드, 변환 (ELT) 프로세스를 설정할 수 있습니다.

  • 파이프라인을 사용하여 Snowflake에서 데이터를 추출하고 BigQuery에 데이터를 로드
  • 다른 Google Cloud 제품을 사용하여 Snowflake에서 데이터를 추출합니다.

파이프라인을 사용하여 Snowflake에서 데이터 추출

Snowflake에서 데이터를 추출하여 Cloud Storage에 직접 로드하려면 snowflake2bq 도구를 사용하세요.

그런 다음 다음 도구 중 하나를 사용하여 Cloud Storage에서 BigQuery로 데이터를 로드할 수 있습니다.

Snowflake에서 데이터를 추출하는 기타 도구

다음 도구를 사용하여 Snowflake에서 데이터를 추출할 수도 있습니다.

BigQuery에 데이터를 로드하는 기타 도구

다음 도구를 사용하여 BigQuery에 데이터를 로드할 수도 있습니다.

추출, 변환, 로드

BigQuery에 로드하기 전 데이터를 변환하려면 다음 도구를 고려하세요.

  • Dataflow
  • Cloud Data Fusion
    • 재사용 가능한 파이프라인을 만들고 CDAP 플러그인을 사용하여 데이터를 변환합니다.
  • Dataproc
    • Spark SQL 또는 지원되는 Spark 언어(예: Scala, Java, Python, R)로 커스텀 코드를 사용하여 데이터를 변환합니다.

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

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

Snowflake 내보내기 튜토리얼

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

내보내기 준비

다음 단계에 따라 Snowflake 데이터를 Cloud Storage 또는 Amazon Simple Storage Service (Amazon S3) 버킷으로 추출하여 내보내기를 위해 Snowflake 데이터를 준비할 수 있습니다.

Cloud Storage

이 튜토리얼에서는 PARQUET 형식으로 파일을 준비합니다.

  1. Snowflake SQL 문을 사용하여 명명된 파일 형식 사양을 만듭니다.

    create or replace file format NAMED_FILE_FORMAT
        type = 'PARQUET'

    NAMED_FILE_FORMAT을 파일 형식 이름으로 바꿉니다. 예를 들면 my_parquet_unload_format입니다.

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

    create storage integration INTEGRATION_NAME
        type = external_stage
        storage_provider = gcs
        enabled = true
        storage_allowed_locations = ('BUCKET_NAME')

    다음을 바꿉니다.

    • INTEGRATION_NAME: 스토리지 통합의 이름입니다. 예를 들면 gcs_int입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 경로입니다. 예를 들면 gcs://mybucket/extract/입니다.
  3. DESCRIBE INTEGRATION 명령어로 Snowflake의 Cloud Storage 서비스 계정을 검색합니다.

    desc storage integration INTEGRATION_NAME;

    출력은 다음과 비슷합니다.

    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
    | 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@iam.gserviceaccount.com                 |                  |
    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
  4. STORAGE_GCP_SERVICE_ACCOUNT로 나열된 서비스 계정에 스토리지 통합 명령에 지정된 버킷에 대한 읽기 및 쓰기 액세스 권한을 부여합니다. 이 예에서는 service-account-id@ 서비스 계정에 <var>UNLOAD_BUCKET</var> 버킷에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.

  5. 이전에 만든 통합을 참조하는 외부 Cloud Storage 스테이지를 만듭니다.

    create or replace stage STAGE_NAME
        url='UNLOAD_BUCKET'
        storage_integration = INTEGRATION_NAME
        file_format = NAMED_FILE_FORMAT;

    다음을 바꿉니다.

    • STAGE_NAME: Cloud Storage 스테이지 객체의 이름입니다. 예를 들면 my_ext_unload_stage입니다.

Amazon S3

다음 예시에서는 Snowflake 테이블에서 Amazon S3 버킷으로 데이터를 이동하는 방법을 보여줍니다.

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

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

    create storage integration INTEGRATION_NAME
    type = external_stage
    storage_provider = s3
    enabled = true
    storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole'
    storage_allowed_locations = ('BUCKET_NAME')

    다음을 바꿉니다.

    • INTEGRATION_NAME: 스토리지 통합의 이름입니다. 예를 들면 s3_int입니다.
    • BUCKET_NAME: 파일을 로드할 Amazon S3 버킷의 경로 예를 들면 s3://unload/files/입니다.
  2. DESCRIBE INTEGRATION 명령어를 사용하여 AWS IAM 사용자를 검색합니다.

    desc integration INTEGRATION_NAME;

    출력은 다음과 비슷합니다.

    +---------------------------+---------------+================================================================================+------------------+
    | 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. 스키마에 대한 CREATE STAGE 권한과 스토리지 통합에 대한 USAGE 권한이 있는 역할을 만듭니다.

        CREATE role ROLE_NAME;  
        GRANT CREATE STAGE ON SCHEMA public TO ROLE ROLE_NAME;
        GRANT USAGE ON INTEGRATION s3_int TO ROLE ROLE_NAME;

    ROLE_NAME을 역할 이름으로 바꿉니다. 예를 들면 myrole입니다.

  4. AWS IAM 사용자에게 Amazon S3 버킷에 액세스하도록 권한을 부여하고 CREATE STAGE 명령어를 사용하여 외부 스테이지를 만듭니다.

        USE SCHEMA mydb.public;
    
        create or replace stage STAGE_NAME
            url='BUCKET_NAME'
            storage_integration = INTEGRATION_NAMEt
            file_format = NAMED_FILE_FORMAT;

    다음을 바꿉니다.

    • STAGE_NAME: Cloud Storage 스테이지 객체의 이름입니다. 예를 들면 my_ext_unload_stage입니다.

Snowflake 데이터 내보내기

데이터를 준비한 후 데이터를 Google Cloud로 이동할 수 있습니다. COPY INTO 명령어를 사용하여 외부 스테이지 객체인 STAGE_NAME를 지정하여 Snowflake 데이터베이스 테이블에서 Cloud Storage 또는 Amazon S3 버킷으로 데이터를 복사합니다.

    copy into @STAGE_NAME/d1
    from TABLE_NAME;

TABLE_NAME을 Snowflake 데이터베이스 테이블 이름으로 바꿉니다.

이 명령어를 실행하면 테이블 데이터가 Cloud Storage 또는 Amazon S3 버킷에 연결된 스테이지 객체에 복사됩니다. 파일에 d1 접두사가 포함되어 있습니다.

기타 내보내기 방법

데이터 내보내기에 Azure Blob Storage를 사용하려면 Microsoft Azure에 언로드에 설명된 단계를 따르세요. 그런 다음 Storage Transfer Service를 사용하여 내보낸 파일을 Cloud Storage에 전송합니다.