從 Snowflake 遷移至 BigQuery 的教學課程
本文提供端對端範例和教學課程,說明如何設定從 Snowflake 遷移至 BigQuery 的管道。
Snowflake 遷移管道範例
您可以透過三種不同的程序 (ELT、ETL 或使用合作夥伴工具),將資料從 Snowflake 遷移至 BigQuery。
擷取、載入及轉換
您可以透過下列兩種方法設定擷取、載入及轉換 (ELT) 程序:
- 使用管道從 Snowflake 擷取資料,並將資料載入 BigQuery
- 使用其他 Cloud de Confiance 產品從 Snowflake 擷取資料。
使用管道從 Snowflake 擷取資料
如要從 Snowflake 擷取資料並直接載入 Cloud Storage,請使用 snowflake2bq 工具。
然後,您可以使用下列其中一種工具,將資料從 Cloud Storage 載入至 BigQuery:
- Cloud Storage 連接器的 BigQuery 資料移轉服務
- 使用 bq 指令列工具的
LOAD指令 - BigQuery API 用戶端程式庫
從 Snowflake 擷取資料的其他工具
您也可以使用下列工具從 Snowflake 擷取資料:
- Dataflow
- Cloud Data Fusion
- Dataproc
- Apache Spark BigQuery 連接器
- 適用於 Apache Spark 的 Snowflake 連接器
- Hadoop BigQuery 連接器
- Snowflake 和 Sqoop 的 JDBC 驅動程式,可將資料從 Snowflake 擷取至 Cloud Storage:
其他將資料載入 BigQuery 的工具
您也可以使用下列工具將資料載入 BigQuery:
- Dataflow
- Cloud Data Fusion
- Dataproc
- Dataprep by Trifacta
擷取、轉換及載入
如要在將資料載入 BigQuery 前轉換資料,請考慮使用下列工具:
- Dataflow
- 複製 JDBC 到 BigQuery 範本程式碼,並修改範本來新增 Apache Beam 轉換。
- Cloud Data Fusion
- 使用 CDAP 外掛程式建立可重複使用的管道,並轉換資料。
- Dataproc
- 使用 Spark SQL 或任何支援的 Spark 語言 (例如 Scala、Java、Python 或 R) 中的自訂程式碼轉換資料。
合作夥伴適用的遷移工具
有多家供應商專門提供企業資料倉儲遷移服務。如需主要合作夥伴及其提供的解決方案清單,請參閱「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 格式的檔案。
使用 Snowflake SQL 陳述式建立具名檔案格式規格。
create or replace file format NAMED_FILE_FORMAT type = 'PARQUET'
將
NAMED_FILE_FORMAT替換為檔案格式的名稱。例如:my_parquet_unload_format。使用
CREATE STORAGE INTEGRATION指令建立整合項目。create storage integration INTEGRATION_NAME type = external_stage storage_provider = gcs enabled = true storage_allowed_locations = ('BUCKET_NAME')
更改下列內容:
INTEGRATION_NAME:儲存空間整合的名稱。例如:gcs_intBUCKET_NAME:Cloud Storage bucket 的路徑。例如:gcs://mybucket/extract/
使用
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 | | +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
授予列為
STORAGE_GCP_SERVICE_ACCOUNT的服務帳戶讀取和寫入權限,存取儲存空間整合指令中指定的值區。在本範例中,請授予service-account-id@服務帳戶<var>UNLOAD_BUCKET</var>bucket 的讀取和寫入權限。建立外部 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 值區:
在 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_intBUCKET_NAME:要載入檔案的 Amazon S3 儲存空間路徑。例如:s3://unload/files/
使用
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=
| | +---------------------------+---------------+================================================================================+------------------+ 建立具備結構定義
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。授予 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。