排定 Snowflake 轉移作業

BigQuery 資料移轉服務提供的 Snowflake 連接器可讓您排定及管理自動移轉工作,使用公開 IP 允許清單將資料從 Snowflake 移轉至 BigQuery。

總覽

Snowflake 連接器會與 Google Kubernetes Engine 中的遷移代理程式相互通訊,並觸發從 Snowflake 傳輸至暫存區的載入作業,而暫存區與 Snowflake 位於同一個雲端服務供應商。

  • 如果是 AWS 代管的 Snowflake 帳戶,資料會先暫存在 Amazon S3 值區,然後透過 BigQuery 資料移轉服務移轉至 BigQuery。
  • 如果是Google Cloud代管的 Snowflake 帳戶,資料會先暫存在 Cloud Storage 值區,然後透過 BigQuery 資料移轉服務移轉至 BigQuery。
  • 如果是 Azure 代管的 Snowflake 帳戶,資料會先暫存在 Azure Blob 儲存體容器中,然後透過 BigQuery 資料移轉服務移轉至 BigQuery。

限制

使用 Snowflake 連接器進行資料轉移時,須遵守下列限制:

  • Snowflake 連接器僅支援從單一 Snowflake 資料庫和結構定義中的資料表轉移資料。如要從具有多個 Snowflake 資料庫或結構定義的資料表轉移資料,可以分別設定每項轉移工作。
  • 從 Snowflake 將資料載入至 Amazon S3 值區、Azure Blob 儲存體容器或 Cloud Storage 值區的速度,取決於您為這項轉移作業選擇的 Snowflake 倉庫。

增量移轉限制

增量 Snowflake 轉移作業有下列限制:

  • 如要使用 upsert 寫入模式,必須提供主鍵欄。詳情請參閱「定義增量轉移作業的主鍵」。
  • 主鍵在來源資料表中不得重複。如果存在重複項目,BigQuery 中的合併作業結果可能會不一致,且與來源資料不符。
  • 系統不支援使用增量轉移自動處理結構定義變更。如果來源資料表的結構定義有所變更,您必須手動更新 BigQuery 資料表結構定義。
  • 如果來源資料的變更集中在少數幾個分割區,則增量轉移最適合。如果更新分散在來源資料表中,增量轉移的效能可能會大幅降低,因為這需要掃描許多分割區。如果資料移轉期間變更的資料列數量眾多,建議改用完整移轉。
  • Snowflake 中的部分作業 (例如 CREATE OR REPLACE TABLECLONE) 會覆寫原始資料表物件及其相關聯的變更追蹤記錄。這會導致現有的資料移轉作業過時,因此需要重新進行完整同步處理,才能繼續進行增量移轉。
  • 增量轉移作業必須經常執行,才能在Snowflake 的資料保留期限內追蹤變更。如果上次成功移轉的時間不在這個時間範圍內,下次移轉時就會進行完整移轉。

資料擷取行為

設定 Snowflake 移轉作業時,您可以在移轉設定中選取「完整」或「增量」寫入偏好設定,指定資料載入 BigQuery 的方式。預先發布版支援增量轉移。

您可以選取「完整」,在每次資料轉移時轉移 Snowflake 資料集的所有資料。

或者,您也可以選取「增量」(預覽),只轉移上次資料轉移後變更的資料,而非在每次資料轉移時載入整個資料集。如果為資料移轉作業選取「增量」,則必須指定「附加」或「插入或更新」寫入模式,定義在增量資料移轉期間,資料如何寫入 BigQuery。以下各節說明可用的寫入模式。

附加寫入模式

「附加」寫入模式只會將新資料列插入目的地資料表。這個選項會嚴格附加移轉的資料,不會檢查現有記錄,因此這個模式可能會導致目的地表格中的資料重複。

選取「Append」(附加) 模式時,必須選取浮水印欄。Snowflake 連接器必須使用浮水印資料欄,才能追蹤來源資料表中的變更。

Upsert 寫入模式

Upsert 寫入模式會檢查主鍵,藉此更新資料列或在目標資料表中插入新資料列。您可以指定主鍵,讓 Snowflake 連接器判斷需要哪些變更,才能讓目的地資料表與來源資料表保持同步。如果在資料移轉期間,指定的資料表主鍵出現在 BigQuery 目標資料表中,Snowflake 連接器就會使用來源資料表中的新資料更新該資料列。如果資料轉移期間沒有主鍵,Snowflake 連接器就會插入新列。

選取「Upsert」(新增或更新) 模式時,必須選取浮水印欄和主鍵:

  • 主鍵可以是資料表上的一或多個資料欄,Snowflake 連接器會根據這些資料欄判斷是否需要插入或更新資料列。
    • 選取包含非空值的資料欄,這些值在資料表的所有資料列中都是不重複的。建議您使用包含系統產生的 ID、不重複的參照代碼 (例如自動遞增的 ID) 或不可變動的時間序列 ID 的資料欄。
    • 為避免資料遺失或損毀,您選取的主鍵資料欄必須具有不重複的值。如果您對所選主鍵欄的唯一性有疑慮,建議改用「Append」(附加) 寫入模式。

如要搭配使用 upsert 寫入模式和增量資料移轉,請務必在自訂結構定義檔案中定義主鍵

事前準備

設定 Snowflake 轉移作業前,請務必完成本節列出的所有步驟。以下列出所有必要步驟。

  1. 準備 Google Cloud 專案
  2. 必要 BigQuery 角色
  3. 準備暫存 bucket
  4. 建立具備必要權限的 Snowflake 使用者
  5. 新增網路政策
  6. 選用:結構定義偵測和對應
  7. 評估 Snowflake 是否有任何不支援的資料類型
  8. 選用:啟用增量轉移
  9. 收集轉移資訊
  10. 如果您打算指定客戶自行管理的加密金鑰 (CMEK),請確保服務帳戶具有加密和解密權限,且您擁有使用 CMEK 時所需的 Cloud KMS 金鑰資源 ID。如要瞭解 CMEK 如何與移轉作業搭配運作,請參閱「指定移轉作業加密金鑰」。

準備 Google Cloud 專案

請按照下列步驟,建立及設定 Snowflake 轉移專案: Google Cloud

  1. 建立 Google Cloud 專案或選取現有專案。

  2. 確認您已完成啟用 BigQuery 資料移轉服務的一切必要動作。

  3. 建立 BigQuery 資料集來儲存資料。您無須建立任何資料表。

必要的 BigQuery 角色

如要取得建立 BigQuery 資料移轉服務資料移轉作業所需的權限,請要求管理員在專案中授予您 BigQuery 管理員 (roles/bigquery.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備建立 BigQuery 資料移轉服務資料移轉作業所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要建立 BigQuery 資料移轉服務資料移轉作業,您必須具備下列權限:

  • BigQuery 資料移轉服務權限:
    • bigquery.transfers.update
    • bigquery.transfers.get
  • BigQuery 權限:
    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy
    • bigquery.jobs.create

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

詳情請參閱「授予 bigquery.admin 存取權」。

準備暫存 bucket

如要完成 Snowflake 資料移轉,您必須建立暫存 bucket,然後設定該 bucket,允許 Snowflake 寫入資料。

AWS 託管 Snowflake 帳戶的暫存 bucket

如果是 AWS 代管的 Snowflake 帳戶,請建立 Amazon S3 值區,暫存 Snowflake 資料,再載入至 BigQuery。

  1. 建立 Amazon S3 bucket

  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Amazon S3 值區,做為外部階段。

如要允許 Amazon S3 bucket 的讀取權限, 您也必須執行下列操作:

  1. 建立專用的 Amazon IAM 使用者,並授予 AmazonS3ReadOnlyAccess 政策。

  2. 為 IAM 使用者建立 Amazon 存取金鑰組

Azure 託管 Snowflake 帳戶的暫存 Azure Blob 儲存體容器

如果是 Azure 代管的 Snowflake 帳戶,請建立 Azure Blob 儲存體容器,暫存 Snowflake 資料,然後再載入 BigQuery。

  1. 建立 Azure 儲存體帳戶,並在其中建立儲存體容器
  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Azure 儲存空間容器,做為外部階段。請注意,由於我們不會使用「步驟 3:建立外部階段」,因此可以略過。

如要允許讀取 Azure 容器,請為該容器產生 SAS 權杖

Google Cloud代管 Snowflake 帳戶的測試環境 bucket

如果是 Google Cloud代管的 Snowflake 帳戶,請建立 Cloud Storage bucket,在將 Snowflake 資料載入 BigQuery 前暫存這些資料。

  1. 建立 Cloud Storage 值區
  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Cloud Storage bucket 做為外部階段。
  3. 如要允許存取暫存值區,請使用下列指令,將 roles/storage.objectViewer 角色授予 DTS 服務代理

    gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \
      --role=roles/storage.objectViewer

建立具備必要權限的 Snowflake 使用者

在 Snowflake 轉移期間,Snowflake 連接器會使用 JDBC 連線連至 Snowflake 帳戶。您必須建立新的 Snowflake 使用者,並指派自訂角色,該角色僅具備執行資料移轉所需的權限:

  // Create and configure new role, MIGRATION_ROLE
  GRANT USAGE
    ON WAREHOUSE WAREHOUSE_NAME
    TO ROLE MIGRATION_ROLE;

  GRANT USAGE
    ON DATABASE DATABASE_NAME
    TO ROLE MIGRATION_ROLE;

  GRANT USAGE
    ON SCHEMA DATABASE_NAME.SCHEMA_NAME
    TO ROLE MIGRATION_ROLE;

  // You can modify this to give select permissions for all tables in a schema
  GRANT SELECT
    ON TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
    TO ROLE MIGRATION_ROLE;

  GRANT USAGE
    ON STORAGE_INTEGRATION_OBJECT_NAME
    TO ROLE MIGRATION_ROLE;

更改下列內容:

  • MIGRATION_ROLE:要建立的自訂角色名稱
  • WAREHOUSE_NAME:資料倉儲名稱
  • DATABASE_NAME:Snowflake 資料庫名稱
  • SCHEMA_NAME:Snowflake 結構定義的名稱
  • TABLE_NAME:此資料移轉作業中包含的 Snowflake 名稱
  • STORAGE_INTEGRATION_OBJECT_NAME:Snowflake 儲存空間整合物件的名稱。

產生用於驗證的金鑰組

由於 Snowflake 已淘汰單一因素密碼登入,建議您使用金鑰組進行驗證。

您可以產生加密或未加密的 RSA 金鑰組,然後將公開金鑰指派給 Snowflake 使用者,藉此設定金鑰組。詳情請參閱「設定金鑰配對驗證」。

新增聯播網政策

如果是公開連線,Snowflake 帳戶預設允許使用資料庫憑證進行公開連線。不過,您可能已設定網路規則或政策,導致 Snowflake 連接器無法連線至帳戶。在這種情況下,您必須將必要的 IP 位址加入許可清單。

下表列出用於公開轉移的區域和多區域位置的 IP 位址。您可以只加入與資料集位置相對應的 IP 位址,也可以加入表格中列出的所有 IP 位址。這些是 Google 為 BigQuery 資料移轉服務資料移轉作業保留的 IP 位址。

如要將 IP 位址加入許可清單,請按照下列步驟操作:

  1. 建立網路規則,其中 type = IPV4。BigQuery 資料移轉服務會使用 JDBC 連線連至 Snowflake 帳戶。
  2. 建立網路政策,並使用您先前建立的網路規則和下表中的 IP 位址。

地區位置

地區說明 地區名稱 IP 位址
美洲
俄亥俄州哥倫布 us-east5 34.162.72.184
34.162.173.185
34.162.205.205
34.162.81.45
34.162.182.149
34.162.59.92
34.162.157.190
34.162.191.145
達拉斯 us-south1 34.174.172.89
34.174.40.67
34.174.5.11
34.174.96.109
34.174.148.99
34.174.176.19
34.174.253.135
34.174.129.163
愛荷華州 us-central1 34.121.70.114
34.71.81.17
34.122.223.84
34.121.145.212
35.232.1.105
35.202.145.227
35.226.82.216
35.225.241.102
拉斯維加斯 us-west4 34.125.53.201
34.125.69.174
34.125.159.85
34.125.152.1
34.125.195.166
34.125.50.249
34.125.68.55
34.125.91.116
洛杉磯 us-west2 35.236.59.167
34.94.132.139
34.94.207.21
34.94.81.187
34.94.88.122
35.235.101.187
34.94.238.66
34.94.195.77
墨西哥 northamerica-south1 34.51.6.35
34.51.7.113
34.51.12.83
34.51.10.94
34.51.11.219
34.51.11.52
34.51.2.114
34.51.15.251
蒙特婁 northamerica-northeast1 34.95.20.253
35.203.31.219
34.95.22.233
34.95.27.99
35.203.12.23
35.203.39.46
35.203.116.49
35.203.104.223
北維吉尼亞州 us-east4 35.245.95.250
35.245.126.228
35.236.225.172
35.245.86.140
35.199.31.35
35.199.19.115
35.230.167.48
35.245.128.132
35.245.111.126
35.236.209.21
奧勒岡州 us-west1 35.197.117.207
35.199.178.12
35.197.86.233
34.82.155.140
35.247.28.48
35.247.31.246
35.247.106.13
34.105.85.54
鹽湖城 us-west3 34.106.37.58
34.106.85.113
34.106.28.153
34.106.64.121
34.106.246.131
34.106.56.150
34.106.41.31
34.106.182.92
聖保羅 southamerica-east1 35.199.88.228
34.95.169.140
35.198.53.30
34.95.144.215
35.247.250.120
35.247.255.158
34.95.231.121
35.198.8.157
聖地亞哥 southamerica-west1 34.176.188.48
34.176.38.192
34.176.205.134
34.176.102.161
34.176.197.198
34.176.223.236
34.176.47.188
34.176.14.80
南卡羅來納州 us-east1 35.196.207.183
35.237.231.98
104.196.102.222
35.231.13.201
34.75.129.215
34.75.127.9
35.229.36.137
35.237.91.139
多倫多 northamerica-northeast2 34.124.116.108
34.124.116.107
34.124.116.102
34.124.116.80
34.124.116.72
34.124.116.85
34.124.116.20
34.124.116.68
歐洲
比利時 europe-west1 35.240.36.149
35.205.171.56
34.76.234.4
35.205.38.234
34.77.237.73
35.195.107.238
35.195.52.87
34.76.102.189
柏林 europe-west10 34.32.28.80
34.32.31.206
34.32.19.49
34.32.33.71
34.32.15.174
34.32.23.7
34.32.1.208
34.32.8.3
芬蘭 europe-north1 35.228.35.94
35.228.183.156
35.228.211.18
35.228.146.84
35.228.103.114
35.228.53.184
35.228.203.85
35.228.183.138
法蘭克福 europe-west3 35.246.153.144
35.198.80.78
35.246.181.106
35.246.211.135
34.89.165.108
35.198.68.187
35.242.223.6
34.89.137.180
倫敦 europe-west2 35.189.119.113
35.189.101.107
35.189.69.131
35.197.205.93
35.189.121.178
35.189.121.41
35.189.85.30
35.197.195.192
馬德里 europe-southwest1 34.175.99.115
34.175.186.237
34.175.39.130
34.175.135.49
34.175.1.49
34.175.95.94
34.175.102.118
34.175.166.114
米蘭 europe-west8 34.154.183.149
34.154.40.104
34.154.59.51
34.154.86.2
34.154.182.20
34.154.127.144
34.154.201.251
34.154.0.104
荷蘭 europe-west4 35.204.237.173
35.204.18.163
34.91.86.224
34.90.184.136
34.91.115.67
34.90.218.6
34.91.147.143
34.91.253.1
巴黎 europe-west9 34.163.76.229
34.163.153.68
34.155.181.30
34.155.85.234
34.155.230.192
34.155.175.220
34.163.68.177
34.163.157.151
斯德哥爾摩 europe-north2 34.51.133.48
34.51.136.177
34.51.128.140
34.51.141.252
34.51.139.127
34.51.142.55
34.51.134.218
34.51.138.9
杜林 europe-west12 34.17.15.186
34.17.44.123
34.17.41.160
34.17.47.82
34.17.43.109
34.17.38.236
34.17.34.223
34.17.16.47
華沙 europe-central2 34.118.72.8
34.118.45.245
34.118.69.169
34.116.244.189
34.116.170.150
34.118.97.148
34.116.148.164
34.116.168.127
蘇黎世 europe-west6 34.65.205.160
34.65.121.140
34.65.196.143
34.65.9.133
34.65.156.193
34.65.216.124
34.65.233.83
34.65.168.250
亞太地區
曼谷 asia-southeast3 34.15.142.80
34.15.131.78
34.15.141.141
34.15.143.6
34.15.142.166
34.15.138.0
34.15.135.129
34.15.139.45
德里 asia-south2 34.126.212.96
34.126.212.85
34.126.208.224
34.126.212.94
34.126.208.226
34.126.212.232
34.126.212.93
34.126.212.206
香港 asia-east2 34.92.245.180
35.241.116.105
35.220.240.216
35.220.188.244
34.92.196.78
34.92.165.209
35.220.193.228
34.96.153.178
雅加達 asia-southeast2 34.101.79.105
34.101.129.32
34.101.244.197
34.101.100.180
34.101.109.205
34.101.185.189
34.101.179.27
34.101.197.251
墨爾本 australia-southeast2 34.126.196.95
34.126.196.106
34.126.196.126
34.126.196.96
34.126.196.112
34.126.196.99
34.126.196.76
34.126.196.68
孟買 asia-south1 34.93.67.112
35.244.0.1
35.200.245.13
35.200.203.161
34.93.209.130
34.93.120.224
35.244.10.12
35.200.186.100
大阪 asia-northeast2 34.97.94.51
34.97.118.176
34.97.63.76
34.97.159.156
34.97.113.218
34.97.4.108
34.97.119.140
34.97.30.191
首爾 asia-northeast3 34.64.152.215
34.64.140.241
34.64.133.199
34.64.174.192
34.64.145.219
34.64.136.56
34.64.247.158
34.64.135.220
新加坡 asia-southeast1 34.87.12.235
34.87.63.5
34.87.91.51
35.198.197.191
35.240.253.175
35.247.165.193
35.247.181.82
35.247.189.103
雪梨 australia-southeast1 35.189.33.150
35.189.38.5
35.189.29.88
35.189.22.179
35.189.20.163
35.189.29.83
35.189.31.141
35.189.14.219
台灣 asia-east1 35.221.201.20
35.194.177.253
34.80.17.79
34.80.178.20
34.80.174.198
35.201.132.11
35.201.223.177
35.229.251.28
35.185.155.147
35.194.232.172
東京 asia-northeast1 34.85.11.246
34.85.30.58
34.85.8.125
34.85.38.59
34.85.31.67
34.85.36.143
34.85.32.222
34.85.18.128
34.85.23.202
34.85.35.192
中東地區
達曼 me-central2 34.166.20.177
34.166.10.104
34.166.21.128
34.166.19.184
34.166.20.83
34.166.18.138
34.166.18.48
34.166.23.171
杜哈 me-central1 34.18.48.121
34.18.25.208
34.18.38.183
34.18.33.25
34.18.21.203
34.18.21.80
34.18.36.126
34.18.23.252
特拉維夫市 me-west1 34.165.184.115
34.165.110.74
34.165.174.16
34.165.28.235
34.165.170.172
34.165.187.98
34.165.85.64
34.165.245.97
非洲
約翰尼斯堡 africa-south1 34.35.11.24
34.35.10.66
34.35.8.32
34.35.3.248
34.35.2.113
34.35.5.61
34.35.7.53
34.35.3.17

多地區位置

多地區說明 多地區名稱 IP 位址
歐盟1成員國境內的資料中心 EU 34.76.156.158
34.76.156.172
34.76.136.146
34.76.1.29
34.76.156.232
34.76.156.81
34.76.156.246
34.76.102.206
34.76.129.246
34.76.121.168
美國資料中心 US 35.185.196.212
35.197.102.120
35.185.224.10
35.185.228.170
35.197.5.235
35.185.206.139
35.197.67.234
35.197.38.65
35.185.202.229
35.185.200.120

1 位於 EU 多地區的資料,不會存放在 europe-west2 (倫敦) 或 europe-west6 (蘇黎世) 資料中心。

結構定義偵測和對應

如要定義結構定義,您可以使用 BigQuery 資料移轉服務,在將資料從 Snowflake 移轉至 BigQuery 時,自動偵測結構定義和資料類型對應。或者,您也可以使用翻譯引擎手動定義架構和資料類型。

自訂結構定義檔案

您可以使用自訂架構檔案定義遞增轉移的主鍵,並自訂架構對應。自訂結構定義檔是 JSON 檔案,用於說明來源和目標結構定義。

定義增量轉移的主鍵

如要在「Upsert」模式下進行增量轉移,您必須將一或多個資料欄設為主鍵。如要這麼做,請在自訂結構定義檔案中,使用 PRIMARY_KEY 用途類型為資料欄加上註解。

以下範例顯示自訂結構定義檔案,該檔案將 O_ORDERKEYO_ORDERDATE 定義為 orders 資料表的主鍵:


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

預設結構定義偵測

Snowflake 連接器可自動偵測 Snowflake 資料表結構定義。如要使用自動結構定義偵測功能,請在設定 Snowflake 轉移作業時,將「翻譯輸出內容 GCS 路徑」欄位留空。

下表顯示 Snowflake 連接器如何將 Snowflake 資料類型對應至 BigQuery:

  • 下列資料類型會在 BigQuery 中對應為 STRING
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • 下列資料類型會在 BigQuery 中對應為 TIMESTAMP
    • TIMESTAMP_NTZ

所有其他 Snowflake 資料類型都會直接對應至 BigQuery 中的同等類型。

使用翻譯引擎輸出內容做為結構定義

如要手動定義結構定義 (例如覆寫特定結構定義屬性),可以產生中繼資料,並按照下列步驟執行翻譯引擎:

限制
  • 系統會先以 Parquet 資料格式從 Snowflake 擷取資料,再載入至 BigQuery:

    • 系統不支援下列 Parquet 資料類型:
    • 系統不支援下列 Parquet 資料類型,但可以轉換:

      • TIMESTAMP_NTZ
      • OBJECTVARIANTARRAY

      執行翻譯引擎時,請使用全域類型轉換設定 YAML 覆寫這些資料類型的預設行為。

      設定 YAML 可能類似下列範例:

      type: experimental_object_rewriter
      global:
        typeConvert:
          datetime: TIMESTAMP
          json: VARCHAR
      

將 Snowflake 資料表遷移至 BigQuery 時,Snowflake 連接器的 BigQuery 資料移轉服務會使用 BigQuery 遷移服務翻譯引擎進行結構定義對應。如要完成 Snowflake 資料轉移,請先產生用於轉換的中繼資料,然後執行轉換引擎:

  1. 執行 Snowflake 的 dwh-migration-tool。詳情請參閱「產生翻譯和評估用的中繼資料」。
  2. 將產生的 metadata.zip 檔案上傳至 Cloud Storage bucket。翻譯引擎會將 metadata.zip 檔案做為輸入內容。
  3. 執行批次翻譯服務,並將 target_types 欄位指定為 metadata。詳情請參閱「使用 Translation API 翻譯 SQL 查詢」。

    • 以下是為 Snowflake 執行批次翻譯的指令範例:
      curl -d "{
      \"name\": \"sf_2_bq_translation\",
      \"displayName\": \"Snowflake to BigQuery Translation\",
      \"tasks\": {
          string: {
            \"type\": \"Snowflake2BigQuery_Translation\",
            \"translation_details\": {
                \"target_base_uri\": \"gs://sf_test_translation/output\",
                \"source_target_mapping\": {
                  \"source_spec\": {
                      \"base_uri\": \"gs://sf_test_translation/input\"
                  }
                },
                \"target_types\": \"metadata\",
            }
          }
      },
      }" \
      -H "Content-Type:application/json" \
      -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/project_id/locations/location/workflows
    
    • 您可以在 BigQuery 的 SQL 翻譯頁面中查看這項指令的狀態。 批次翻譯工作的輸出內容會儲存在 gs://translation_target_base_uri/metadata/config/ 中。

必要的服務帳戶權限

在 Snowflake 移轉中,服務帳戶會用於從指定 Cloud Storage 路徑中的翻譯引擎輸出內容讀取資料。您必須授予服務帳戶 storage.objects.getstorage.objects.list 權限。

建議服務帳戶與建立移轉設定和目的地資料集的 Google Cloud 專案 屬於同一個專案。如果服務帳戶位於 Google Cloud 的專案與建立 BigQuery 資料移轉作業的專案不同,則必須啟用跨專案服務帳戶授權

詳情請參閱「BigQuery IAM 角色和權限」。

評估 Snowflake 資料

BigQuery 會將 Snowflake 中的資料以 Parquet 檔案的形式寫入 Cloud Storage。Parquet 檔案不支援 TIMESTAMP_TZTIMESTAMP_LTZ 資料類型。如果資料包含這些類型,您可以將資料匯出至 Amazon S3 做為 CSV 檔案,然後將 CSV 檔案匯入 BigQuery。詳情請參閱 Amazon S3 移轉作業總覽

啟用遞增式轉移

如要設定 Snowflake 增量轉移,請先對每個來源資料表執行下列指令,啟用變更追蹤功能:

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

如果資料表未啟用變更追蹤功能,Snowflake 連接器預設會完整轉移該資料表的資料。

收集轉移資訊

收集使用 BigQuery 資料移轉服務設定遷移作業所需的資訊:

設定 Snowflake 轉移作業

選取下列選項之一:

控制台

  1. 前往 Google Cloud 控制台的「資料移轉」頁面。

    前往「資料轉移」

  2. 按一下「建立轉移作業」

  3. 在「來源類型」部分,從「來源」清單中選取「Snowflake 遷移」

  4. 在「Transfer config name」(轉移設定名稱) 區段中,於「Display name」(顯示名稱) 欄位輸入移轉作業的名稱,例如 My migration。顯示名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。

  5. 在「Destination settings」(目的地設定) 部分,從「Dataset」(資料集) 清單中選擇您建立的資料集

  6. 在「Data source details」(資料來源詳細資料) 部分執行下列操作:

    1. 在「帳戶 ID」中,輸入 Snowflake 帳戶的專屬 ID,也就是機構名稱和帳戶名稱的組合。這個 ID 是 Snowflake 帳戶網址的前置字元,而非完整網址。例如:ACCOUNT_IDENTIFIER.snowflakecomputing.com
    2. 在「Username」(使用者名稱) 中,輸入 Snowflake 使用者名稱。系統會使用該使用者的憑證和授權,存取資料庫以轉移 Snowflake 資料表。建議您使用為這次轉移作業建立的使用者
    3. 在「Auth mechanism」中,選取 Snowflake 使用者驗證方法。詳情請參閱「產生金鑰組以進行驗證」。
    4. 在「Password」(密碼) 中輸入 Snowflake 使用者的密碼。如果您在「Auth mechanism」(驗證機制) 欄位中選取「PASSWORD」,則必須填寫這個欄位。
    5. 在「私密金鑰」欄位中,輸入與Snowflake 使用者相關聯的公開金鑰所連結的私密金鑰。 如果您在「Auth mechanism」(驗證機制) 欄位中選取「KEY_PAIR」,則必須填寫這個欄位。
    6. 如要使用通關密語加密私密金鑰,請選取「Is Private key encrypted」欄位。
    7. 在「私密金鑰通關密語」部分,輸入加密私密金鑰的通關密語。如果您在「Auth mechanism」(驗證機制)和「Is Private Key Encrypted」(私密金鑰是否已加密)欄位中選取「KEY_PAIR」(金鑰配對),就必須填寫這個欄位。
    8. 在「Warehouse」中,輸入用於執行這項資料移轉作業的倉庫
    9. 在「服務帳戶」中,輸入要用於這項資料移轉作業的服務帳戶。服務帳戶應屬於移轉設定和目的地資料集建立所在的Google Cloud 專案。服務帳戶必須具備 storage.objects.liststorage.objects.get必要權限
    10. 在「Database」(資料庫) 中,輸入包含此資料移轉作業所含資料表的 Snowflake 資料庫名稱。
    11. 在「結構定義」部分,輸入包含此資料移轉作業所含資料表的 Snowflake 結構定義名稱。
    12. 在「Table name patterns」(資料表名稱格式) 部分,輸入符合結構定義中資料表名稱的名稱或格式,指定要移轉的資料表。您可以使用規則運算式指定模式,例如 table1_regex;table2_regex。此格式必須遵循 Java 規則運算式語法。例如:
      • lineitem;ordertb 會比對名為 lineitemordertb 的資料表。
      • .* 會比對所有資料表。
    13. 在「Ingestion mode」(擷取模式) 部分,選取「FULL」(完整) 或「INCREMENTAL」(增量)。詳情請參閱「資料擷取行為」一文。

    14. 選用:在「翻譯輸出 GCS 路徑」中,指定 Cloud Storage 資料夾的路徑,該資料夾包含翻譯引擎的結構對應檔案。您可以將此欄位留空,讓 Snowflake 連接器自動偵測結構定義。

      • 路徑應採用 translation_target_base_uri/metadata/config/db/schema/ 格式,且結尾必須為 /
    15. 在「Storage integration object name」(儲存空間整合物件名稱) 中,輸入 Snowflake 儲存空間整合物件的名稱。

    16. 在「Cloud provider」(雲端服務供應商) 部分,根據代管 Snowflake 帳戶的雲端服務供應商,選取 AWSAZUREGCP

    17. 在「Amazon S3 URI」部分,輸入將做為暫存區使用的 Amazon S3 值區的 URI。只有在雲端服務供應商AWS 時,才需要提供這項資訊。

    18. 在「Access key ID」(存取金鑰 ID) 和「Secret access key」(存取密鑰) 部分,輸入存取金鑰組。只有在雲端服務供應商AWS 時,才需要提供這項資訊。

    19. 在「Azure Storage Account」(Azure 儲存體帳戶)和「Azure Storage Container」(Azure 儲存體容器),輸入要用做暫存區的 Azure Blob 儲存體帳戶和容器名稱。只有在雲端服務供應商AZURE 時,才需要提供這項資訊。

    20. 在「SAS Token」(SAS 權杖) 部分,輸入為容器產生的 SAS 權杖。只有在雲端服務供應商為  時,才需要提供這項資訊。AZURE

    21. 在「GCS URI」部分,輸入將做為暫存區使用的 Cloud Storage 的 URI。只有在雲端服務供應商GCP 時,才需要提供這項資訊。

  7. 選用:在「Notification options」(通知選項) 專區,執行下列操作:

    1. 按一下啟用電子郵件通知的切換開關。啟用這個選項之後,若移轉失敗,移轉作業管理員就會收到電子郵件通知。
    2. 在「Select a Pub/Sub topic」(選取 Pub/Sub 主題) 選取主題名稱,或是點選「Create a topic」(建立主題)。這個選項會針對移轉作業設定 Pub/Sub 執行通知
  8. 如果使用 CMEK,請在「Advanced options」(進階選項) 部分選取「Customer-managed key」(客戶管理的金鑰)。畫面隨即會列出可用的 CMEK 供您選擇。如要瞭解 CMEK 如何與 BigQuery 資料移轉服務搭配運作,請參閱指定移轉作業加密金鑰的相關說明。

  9. 按一下 [儲存]

  10. Google Cloud 控制台會顯示移轉設定的所有詳細資料,包括此移轉作業的「Resource name」(資源名稱)

bq

輸入 bq mk 指令並加上移轉建立作業旗標 --transfer_config。還需加上以下旗標:

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk \
    --transfer_config \
    --project_id=project_id \
    --data_source=data_source \
    --target_dataset=dataset \
    --display_name=name \
    --service_account_name=service_account \
    --params='parameters'

更改下列內容:

  • project_id:您的 Google Cloud 專案 ID。如果未指定 --project_id,系統會使用預設專案。
  • data_source:資料來源 snowflake_migration
  • dataset:移轉設定的 BigQuery 目標資料集。
  • name:移轉設定的顯示名稱。移轉作業名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。
  • service_account:(選用) 用於驗證轉移作業的服務帳戶名稱。服務帳戶應由用於建立移轉作業的 project_id 擁有,且應具備所有必要角色
  • parameters:已建立移轉設定的 JSON 格式參數。例如:--params='{"param":"param_value"}'

Snowflake 移轉設定所需的參數如下:

  • account_identifier:指定 Snowflake 帳戶的專屬 ID,也就是機構名稱和帳戶名稱的組合。這個 ID 是 Snowflake 帳戶網址的前置字元,而非完整網址。例如:account_identifier.snowflakecomputing.com
  • username:指定 Snowflake 使用者的使用者名稱,系統會使用該使用者的憑證和授權存取資料庫,以轉移 Snowflake 資料表。
  • auth_mechanism:指定 Snowflake 使用者驗證方法。 支援的值為 PASSWORDKEY_PAIR。詳情請參閱「產生驗證用的金鑰組」。
  • password:指定 Snowflake 使用者的密碼。如果您在 auth_mechanism 欄位中指定 PASSWORD,則此欄位為必填欄位。
  • private_key:指定與與 Snowflake 使用者相關聯的公開金鑰連結的私密金鑰。如果您在 auth_mechanism 欄位中指定 KEY_PAIR,則此欄位為必填欄位。
  • is_private_key_encrypted:如果私密金鑰已使用通關密語加密,請指定 true
  • private_key_passphrase:指定加密私密金鑰的通關密語。如果您在 auth_mechanism 欄位中指定 KEY_PAIR,並在 is_private_key_encrypted 欄位中指定 true,則此為必填欄位。
  • warehouse:指定用於執行這項資料移轉作業的倉庫
  • service_account:指定要用於這項資料移轉作業的服務帳戶。服務帳戶應屬於移轉設定和目的地資料集建立所在的 Google Cloud 專案。服務帳戶必須具備 storage.objects.liststorage.objects.get 必要權限
  • database:指定包含此資料轉移作業所含資料表的 Snowflake 資料庫名稱。
  • schema:指定包含此資料移轉所含資料表的 Snowflake 結構定義名稱。
  • table_name_patterns:輸入名稱或符合結構定義中資料表名稱的格式,指定要轉移的資料表。您可以使用規則運算式指定模式,例如 table1_regex;table2_regex。此格式必須遵循 Java 規則運算式語法。例如,假設使用者要求系統 將文字從英文翻譯成法文

    • lineitem;ordertb 會比對名為 lineitemordertb 的資料表。
    • .* 會比對所有資料表。

      您也可以將這個欄位留白,用以遷移所有來自指定結構定義的資料表。

  • ingestion_mode:指定轉移的擷取模式。支援的值為 FULLINCREMENTAL。詳情請參閱「資料擷取行為」。

  • translation_output_gcs_path:(選用) 指定 Cloud Storage 資料夾的路徑,該資料夾包含翻譯引擎的結構定義對應檔案。您可以將此欄位留空,讓 Snowflake 連接器自動偵測結構定義。

    • 路徑應採用 gs://translation_target_base_uri/metadata/config/db/schema/ 格式,且結尾必須為 /
  • storage_integration_object_name:指定 Snowflake 儲存空間整合物件的名稱。

  • cloud_provider:輸入 AWSAZUREGCP,視代管 Snowflake 帳戶的雲端服務供應商而定。

  • staging_s3_uri:輸入要做為暫存區的 S3 值區 URI。只有在 cloud_providerAWS 時才需要。

  • aws_access_key_id:輸入存取金鑰組。只有在 cloud_providerAWS 時才需要。

  • aws_secret_access_key:輸入存取金鑰組。只有在 cloud_providerAWS 時才需要。

  • azure_storage_account:輸入要用做暫存區的儲存空間帳戶名稱。只有在 cloud_providerAZURE 時才需要。

  • staging_azure_container:輸入Azure Blob 儲存體中的容器,做為暫存區。只有在 cloud_providerAZURE 時才需要。

  • azure_sas_token:輸入 SAS 權杖。只有在 cloud_providerAZURE 時才需要。

  • staging_gcs_uri:輸入要用做暫存區的 Cloud Storage URI。只有在 cloud_providerGCP 時才需要。

舉例來說,如果是 AWS 代管的 Snowflake 帳戶,下列指令會建立名為 Snowflake transfer config 的 Snowflake 移轉作業,其中目標資料集的名稱為 your_bq_dataset,專案的 ID 為 your_project_id

  PARAMS='{
  "account_identifier": "your_account_identifier",
  "auth_mechanism": "KEY_PAIR",
  "aws_access_key_id": "your_access_key_id",
  "aws_secret_access_key": "your_aws_secret_access_key",
  "cloud_provider": "AWS",
  "database": "your_sf_database",
  "ingestion_mode": "INCREMENTAL",
  "private_key": "-----BEGIN PRIVATE KEY----- privatekey\nseparatedwith\nnewlinecharacters=-----END PRIVATE KEY-----",
  "schema": "your_snowflake_schema",
  "service_account": "your_service_account",
  "storage_integration_object_name": "your_storage_integration_object",
  "staging_s3_uri": "s3://your/s3/bucket/uri",
  "table_name_patterns": ".*",
  "translation_output_gcs_path": "gs://sf_test_translation/output/metadata/config/database_name/schema_name/",
  "username": "your_sf_username",
  "warehouse": "your_warehouse"
}'

bq mk --transfer_config \
    --project_id=your_project_id \
    --target_dataset=your_bq_dataset \
    --display_name='snowflake transfer config' \
    --params="$PARAMS" \
    --data_source=snowflake_migration

API

請使用 projects.locations.transferConfigs.create 方法,並提供 TransferConfig 資源的執行個體。

指定轉移作業的加密金鑰

您可以指定客戶自行管理的加密金鑰 (CMEK),加密轉移作業的資料。您可以使用 CMEK 支援從 Snowflake 轉移資料。

指定移轉作業的 CMEK 時,BigQuery 資料移轉服務會將 CMEK 套用至所有已擷取資料的中間磁碟快取,確保整個資料移轉工作流程符合 CMEK 規定。

如果轉移作業最初並非使用 CMEK 建立,您就無法更新現有轉移作業來新增 CMEK。舉例來說,您無法將原本預設加密的目的地資料表,變更為使用 CMEK 加密。反之,您也無法將 CMEK 加密的目的地資料表變更為其他類型的加密。

如果移轉設定最初是使用 CMEK 加密功能建立,您可以更新移轉的 CMEK。更新移轉作業設定的 CMEK 時,BigQuery 資料移轉服務會在下次執行移轉作業時,將 CMEK 傳播至目的地資料表。屆時,BigQuery 資料移轉服務會在移轉作業執行期間,以新的 CMEK 取代任何過時的 CMEK。詳情請參閱「更新轉移作業」。

您也可以使用專案預設金鑰。 使用移轉作業指定專案預設金鑰時,BigQuery 資料移轉服務會將專案預設金鑰做為任何新移轉作業設定的預設金鑰。

配額與限制

每個資料表之每個載入工作的 BigQuery 載入配額皆為 15 TB。Snowflake 會在內部壓縮資料表資料,因此匯出的資料表大小會大於 Snowflake 回報的資料表大小。如果您打算遷移大於 15 TB 的資料表,請與 dts-migration-preview-support@google.com 聯絡。

由於 Amazon S3 的一致性模型,您可以在移轉到 BigQuery 時不納入部分檔案。

定價

如要瞭解 BigQuery 資料移轉服務定價,請參閱定價頁面。

  • 如果 Snowflake 倉庫和 Amazon S3 值區位於不同區域,執行 Snowflake 資料移轉作業時,Snowflake 會收取輸出費用。如果 Snowflake 倉儲和 Amazon S3 值區位於同一區域,則 Snowflake 資料移轉不會產生輸出費用。
  • 從 AWS 移轉資料至 Google Cloud時,須支付跨雲端輸出費用。

後續步驟