從 Snowflake 遷移至 BigQuery 的教學課程

本文提供端對端範例和教學課程,說明如何設定從 Snowflake 遷移至 BigQuery 的管道。

Snowflake 遷移管道範例

您可以透過三種不同的程序 (ELT、ETL 或使用合作夥伴工具),將資料從 Snowflake 遷移至 BigQuery。

擷取、載入及轉換

您可以透過下列兩種方法設定擷取、載入及轉換 (ELT) 程序:

  • 使用管道從 Snowflake 擷取資料,並將資料載入 BigQuery
  • 使用其他 Cloud de Confiance 產品從 Snowflake 擷取資料。

使用管道從 Snowflake 擷取資料

如要從 Snowflake 擷取資料並直接載入 Cloud Storage,請使用 snowflake2bq 工具。

然後,您可以使用下列其中一種工具,將資料從 Cloud Storage 載入至 BigQuery:

從 Snowflake 擷取資料的其他工具

您也可以使用下列工具從 Snowflake 擷取資料:

其他將資料載入 BigQuery 的工具

您也可以使用下列工具將資料載入 BigQuery:

擷取、轉換及載入

如要在將資料載入 BigQuery 前轉換資料,請考慮使用下列工具:

合作夥伴適用的遷移工具

有多家供應商專門提供企業資料倉儲遷移服務。如需主要合作夥伴及其提供的解決方案清單,請參閱「BigQuery 合作夥伴」。

Snowflake 匯出教學課程

下列教學課程說明如何使用 COPY INTO <location> Snowflake 指令,將範例資料從 Snowflake 匯出至 BigQuery。如需詳細的逐步程序 (包括程式碼範例),請參閱Cloud de Confiance 專業服務的 Snowflake 至 BigQuery 工具

準備匯出

如要準備匯出 Snowflake 資料,請按照下列步驟將 Snowflake 資料擷取至 Cloud Storage 或 Amazon Simple Storage Service (Amazon S3) 值區:

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 bucket 的路徑。例如: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@s3ns.iam.gserviceaccount.com                 |                  |
    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
  4. 授予列為 STORAGE_GCP_SERVICE_ACCOUNT 的服務帳戶讀取和寫入權限,存取儲存空間整合指令中指定的值區。在本範例中,請授予 service-account-id@ 服務帳戶 <var>UNLOAD_BUCKET</var> bucket 的讀取和寫入權限。

  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 角色,以及使用 CREATE STORAGE INTEGRATION 指令在 Snowflake 中建立儲存空間整合:

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

準備好資料後,即可將資料移至 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 bucket 連結的暫存物件。檔案包含 d1 前置字串。

其他匯出方法

如要使用 Azure Blob 儲存體匯出資料,請按照「卸載至 Microsoft Azure」一文中的詳細步驟操作。然後使用 Storage 移轉服務,將匯出的檔案移轉至 Cloud Storage。