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

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

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

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

추출, 로드, 변환

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

  • 파이프라인을 사용하여 Snowflake에서 데이터를 추출하고 BigQuery로 데이터를 로드합니다.
  • other Cloud de Confiance products를 사용하여 Snowflake에서 데이터를 추출합니다.

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

Snowflake에서 데이터를 추출하고 Cloud Storage로 직접 로드하려면 snowflake2bq 도구를 사용합니다.

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

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

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

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

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

추출, 변환, 로드

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

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

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

Snowflake 내보내기 튜토리얼

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

내보내기 준비

다음 단계에 따라 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 서비스 계정을 검색합니다.DESCRIBE INTEGRATION

    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@s3ns.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. AWS IAM 사용자를 검색합니다 DESCRIBE INTEGRATION 명령어를 사용하여

    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 데이터 내보내기

데이터를 준비한 후 데이터를 로 이동할 수 있습니다 Cloud de Confiance. 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에 전송합니다.