排解移轉設定問題

檢查 BigQuery 資料移轉服務的執行記錄和記錄檔,診斷並解決常見的設定、權限、配額和排程錯誤。您可以解決一般設定問題、修正授權失敗,以及復原資料來源中失敗的移轉作業。

如果遇到本文未提及的問題,可以要求支援。與 Cloud Customer Care 聯絡前,請先記錄移轉設定和執行資訊。詳情請參閱「取得移轉作業詳細資料」和「查看移轉作業執行詳細資料和記錄訊息」。

檢查錯誤

如果初始移轉作業執行失敗,您可以在執行記錄中查看詳細資料。執行記錄中列出的錯誤,可協助您使用本文件找出適當的解決方法。

您也可以使用Logs Explorer,查看特定移轉工作的錯誤訊息。下列 Logs Explorer 篩選器會傳回特定移轉設定工作的相關資訊,以及任何錯誤訊息:

resource.type="bigquery_dts_config"
labels.run_id="RUN_ID"
resource.labels.config_id="CONFIG_ID"

更改下列內容:

  • RUN_ID:特定工作執行的 ID 號碼
  • CONFIG_ID:移轉設定工作的 ID 號碼

與客戶服務團隊聯絡前,請先從執行記錄或記錄探索工具擷取任何相關資訊,包括任何錯誤訊息。

如果您使用事件導向移轉作業,事件導向移轉設定可能無法觸發移轉作業。您可以在執行記錄頁面或設定頁面頂端查看錯誤訊息。

一般問題

診斷一般移轉問題時,請確認下列事項:

  • 針對移轉類型適用的說明文件頁面,確認是否已完成其中「事前準備」一節所述的所有步驟。
  • 移轉設定屬性是否正確。
  • 建立移轉作業所使用的使用者帳戶是否擁有基礎資源的存取權。

如果移轉設定正確,且取得適當權限,請參閱下列常見問題的解決方案。

錯誤:An unexpected issue was encountered. If this issue persists, please contact customer support.
解決方法:這項錯誤通常表示 BigQuery 暫時中斷或發生問題。請等待約 2 小時以解決問題。如果問題仍未解決,請要求支援。
錯誤:INTERNAL: An internal error occurred and the request could not be completed. This is usually caused by a transient issue...
解決方法:這項錯誤通常表示發生暫時性內部問題。如果遇到這項錯誤,您可以等待下次排定的執行作業,看看問題是否解決,也可以手動觸發受影響日期的補填作業。如果問題仍未解決,請要求支援。
錯誤:Quota Exceeded.

解決方法:移轉作業須遵守 BigQuery 的載入工作配額。如要提高配額,請洽詢 Cloud de Confiance by S3NS 業務代表。詳情請參閱「配額與限制」。

將 Cloud Billing 匯出項目載入 BigQuery 時,可能會遇到 Quota Exceeded 錯誤。Cloud Billing 匯出資料表和 BigQuery 資料移轉服務建立的目的地 BigQuery 資料表都會分區。設定這類 BigQuery 資料移轉服務工作時,如果選擇「overwrite」(覆寫) 選項,系統會根據匯出的資料量,產生配額錯誤。如要瞭解如何排解配額問題,請參閱「排解配額和限制錯誤」。

如果錯誤是由 Cloud Billing 匯出作業的 BigQuery 資料移轉服務工作所造成,請注意,由於個別 Cloud Billing 匯出資料表已分區,BigQuery 資料移轉服務建立的目標資料表也會分區,因此在設定這類資料移轉工作時,選擇「覆寫」選項會導致 (DML) 配額錯誤,具體取決於帳單帳戶的使用時間。如要瞭解如何排解配額問題,請參閱「解決配額與限制錯誤」。

錯誤:The caller does not have permission.

解決方法:確認 Cloud de Confiance 控制台中的登入帳戶,與建立移轉作業時為 BigQuery 資料移轉服務選取的帳戶相同。

  • Cloud de Confiance 控制台中的登入帳戶:

    疑難排解權限問題

  • 選擇帳戶,繼續使用 BigQuery 資料移轉服務:

    疑難排解權限問題

錯誤:Access Denied: ... Permission bigquery.tables.get denied on table ...

解決方法:確認 BigQuery 資料移轉服務服務代理已獲得目標資料集的 bigquery.dataEditor 角色。建立及更新移轉作業時,系統會自動套用這項授權,但之後可能會手動修改存取權政策。如要重新授予權限,請參閱「授予資料集存取權」。

錯誤:region violates constraint constraints/gcp.resourceLocations on the resource projects/project_id

解決方法:如果使用者嘗試在位置限制組織政策指定的受限位置建立移轉設定,就會發生這項錯誤。如要解決這個問題,請變更組織政策,允許使用該區域,或將移轉設定變更為位於不受組織政策限制的區域中的目的地資料集。

錯誤:Please look into the errors[] collection for more details.

解決方法:資料移轉失敗時,可能會發生這項錯誤。如要進一步瞭解資料移轉失敗的原因,請使用 Cloud Logging 查看記錄。您可以使用移轉作業 run_id 進行搜尋,找出特定執行作業的記錄。

錯誤:Network Attachment with connected endpoints cannot be deleted.

解決方法:如果使用者在刪除移轉作業後,立即嘗試刪除網路連結,就可能發生這項錯誤。這是因為 BigQuery 資料移轉服務可能需要幾天時間,才能完全移除與移轉作業相關聯的所有資源,這可能會導致網路連結無法刪除。如要解決這項錯誤,請等待幾天,再嘗試刪除網路連結。如要提前刪除網路連結,請聯絡支援團隊。

錯誤:Error while reading data, error message: CSV processing encountered too many errors, giving up.

解決方法:如果資料來源中的 CSV 檔案設定與移轉設定中的 CSV 設定不符,就可能發生這項錯誤。舉例來說,如果「Header rows to skip」(要略過的標頭列) 設為 0,但來源 CSV 檔案包含 1 個以上的標頭列,就可能發生這項錯誤。如要修正這項錯誤,請確認移轉設定中的 CSV 設定正確無誤,且與來源 CSV 檔案的設定相符。

錯誤:Error 400: DTS service agent needs iam.serviceAccounts.getAccessToken permission or [SERVICE_ACCOUNT] doesn't exist.

根本原因:這項錯誤表示 BigQuery 資料移轉服務 (DTS) 服務代理程式缺少必要權限,無法模擬用於移轉作業的服務帳戶。這通常發生在跨專案授權情境,或使用 Terraform 等基礎架構即程式碼 (IaC) 工具設定移轉作業時。

解決方法:將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 DTS 服務代理,並指定需要模擬的服務帳戶。

gcloud iam service-accounts add-iam-policy-binding service_account \
--member serviceAccount:service-destination_project_number@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com \
--role roles/iam.serviceAccountTokenCreator

其中:

  • service_account 是用於授權轉移作業的帳戶電子郵件地址。
  • destination_project_number 是移轉設定所在的專案編號。如要瞭解如何找出專案編號,請參閱「尋找專案名稱、編號和 ID」。
錯誤:For asset "ASSET", no eligible column found for splitting (Reason: Primary or Indexed Key columns found, but none are of supported types (INTEGER, TINYINT, SMALLINT, FLOAT, REAL, DOUBLE, NUMERIC, BIGINT, DECIMAL, DATE, BOOLEAN))
解決方法:如果嘗試從來源資料表移轉超過 2,000,000 筆記錄到 BigQuery 資料表,但來源資料表沒有主鍵或支援資料類型的索引資料欄,就可能發生這項錯誤。如要解決這個問題,請在來源資料表中,將採用其中一種支援資料類型的資料欄,設為主鍵或索引資料欄。詳情請參閱移轉來源指南的限制部分。
錯誤:Permission bigquery.tables.create denied.

問題:

Error code 7 : Access Denied : Dataset [PROJECT_ID]:[DATASET_ID] : Permission bigquery.tables.create denied on dataset [PROJECT_ID]:[DATASET_ID] (or it may not exist).

Cloud Storage 移轉作業失敗,並顯示建立資料表時存取遭拒的錯誤,即使目的地資料表已存在,且服務帳戶具備標準資料編輯者角色,也一樣。

原因:如果 Cloud Storage 移轉作業涉及超過 10,000 個檔案,且未授予 bigquery.tables.create 權限,就會發生這項錯誤。如果移轉的檔案超過 10,000 個,服務會將資料分割成動態建立的暫存資料表。即使專案已註冊高量移轉作業 (或已獲准提高配額),仍須具備 bigquery.tables.create 權限才能執行這項操作。

解決方法:如要成功移轉超過 10,000 個檔案,請務必符合下列兩項規定:

  1. 確認配額和功能註冊:確認專案已註冊大量 Cloud Storage 移轉作業 (超過 10,000 個檔案)。如需轉移超過 10,000 個檔案,請聯絡支援團隊,要求提高每次轉移作業的檔案數量上限。

  2. 授予必要的 IAM 權限:將目的地資料集的 bigquery.tables.create 權限,授予執行移轉作業的服務帳戶或使用者身分。BigQuery 資料編輯者 (roles/bigquery.dataEditor) 和 BigQuery 管理員 (roles/bigquery.admin) 角色具備這項權限。如果授予必要權限後仍持續失敗,請聯絡支援團隊,確認許可清單狀態。

    替代方案:如果您無法授予必要權限,或無法等待配額增加和設定變更,請考慮下列選項:

    • 將每次轉移作業執行的檔案數量減少至 10,000 個以下,例如使用更具體的 URI 萬用字元,或將轉移作業拆分為多個較小的設定。
    • 如要進行一次性移轉或緊急載入,請使用 BigQuery 載入工作或 LOAD DATA 陳述式,這兩者都支援較高的每項載入工作檔案數量上限。

授權和權限問題

從不同資料來源移轉資料時,可能會遇到下列常見的權限錯誤:

錯誤:BigQuery Data Transfer Service is not enabled for <project_id>
錯誤:BigQuery Data Transfer Service has not been used in project <project_id> before or it is disabled ...

解決方法: 請按照下列步驟,確認服務代理是否已獲派角色:

  1. 前往 Cloud de Confiance 控制台的「IAM & Admin」(IAM 與管理) 頁面。

    前往「IAM & Admin」(IAM 與管理) 頁面

  2. 勾選「包含 S3NS提供的角色授予項目」核取方塊。

  3. 確認系統顯示名稱為 service-<project_number>@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com 的服務帳戶,或已授予 BigQuery 資料移轉服務 BigQuery 資料移轉服務代理人角色。

    確認服務帳戶是否具備服務代理角色。

如果畫面上未顯示服務帳戶,或該帳戶未獲派 BigQuery 資料移轉服務代理角色,請在 Cloud de Confiance 控制台授予預先定義的角色,或執行下列 Google Cloud CLI 指令:

gcloud projects add-iam-policy-binding PROJECT_NUMBER \
--member serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com \
--role roles/bigquerydatatransfer.serviceAgent

將 PROJECT_NUMBER 替換為與這個服務帳戶相關聯的專案編號。

錯誤:There was an error loading this table. Check that the table exists and that you have the correct permissions.

解決方法:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 按一下移轉作業使用的目的地資料集。

  3. 依序點選「共用」選單和「權限」。

  4. 展開「BigQuery 資料編輯者」角色。

  5. 確認 BigQuery 資料移轉服務代理已新增至這個角色。如果沒有,請將 BigQuery 資料編輯者 (roles/bigquery.dataEditor) 角色授予 BigQuery 資料移轉服務代理。

確認已新增 BigQuery 資料編輯者角色。

錯誤:A permission denied error was encountered: PERMISSION_DENIED. Please ensure that the user account setting up the transfer config has the necessary permissions, and that the configuration settings are correct

解決方法:

  1. 在 Cloud de Confiance 控制台中,前往「Data Transfers」(資料移轉) 頁面。

    前往「Data Transfers」(資料移轉)

  2. 按一下失敗的移轉作業,然後選取「設定」分頁標籤。

  3. 確認「User」(使用者) 欄位中列出的移轉作業擁有者具備資料來源的所有必要權限。

如果移轉作業擁有者不具備所有必要權限,請更新其憑證,授予必要權限。您也可以將移轉作業擁有者變更為具備必要權限的其他使用者。

錯誤:Authentication failure: User Id not found. Error code: INVALID_USERID

解決方法:轉移作業擁有者的使用者 ID 無效。更新憑證,將轉移作業擁有者變更為其他使用者。如果您使用服務帳戶,也應確認執行資料移轉作業的帳戶具備使用服務帳戶的所有必要權限。

錯誤:The user does not have permission

解決方法:確認移轉作業擁有者是服務帳戶,且服務已設定所有必要權限。另一個可能原因是,所用服務帳戶是在其他專案建立,而非建立這項移轉作業的專案。如要解決跨專案權限問題,請參閱下列資源:

錯誤:HttpError 403 when requesting returned "The caller does not have permission"

googleapiclient.errors.HttpError: <HttpError 403 when requesting returned "The caller does not have permission". Details: "The caller does not have permission">

嘗試使用服務帳戶設定排定查詢時,可能會出現這項錯誤。

解決方法:確認服務帳戶具備排定或修改排定查詢所需的所有權限,並確認設定排定查詢的使用者有權存取服務帳戶。

如果已指派所有正確權限,但仍發生錯誤,請檢查專案是否預設強制執行「停用跨專案服務帳戶」政策。如要查看政策,請前往 Cloud de Confiance 控制台,依序點選「IAM & Admin」(IAM 與管理) >「Organization Policies」(組織政策),然後搜尋政策。

檢查是否對服務帳戶強制執行跨專案服務帳戶使用政策。

如果強制執行「停用跨專案服務帳戶」政策,您可以按照下列步驟停用政策:

  1. 使用 Cloud de Confiance 控制台,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶),找出與專案相關聯的服務帳戶。這個檢視畫面會顯示目前專案的所有服務帳戶。
  2. 使用下列指令,在服務帳戶所在的專案中停用政策。如要停用這項政策,使用者必須是組織政策管理員。只有組織管理員可以將這個角色授予使用者。
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=[PROJECT-ID]

事件導向移轉設定問題

建立事件導向移轉作業時,可能會遇到下列常見問題。

錯誤:Data Transfer Service is not authorized to pull message from the provided Pub/Sub subscription.

解決方法:確認 BigQuery 資料移轉服務服務代理已獲派 pubsub.subscriber 角色:

  1. 前往 Cloud de Confiance 控制台的「Pub/Sub」頁面。

    前往「Pub/Sub」頁面

  2. 選取您在以事件為依據的移轉作業中使用的 Pub/Sub 訂閱項目。

  3. 如果資訊面板未顯示,請按一下右上角的「Show info panel」(顯示資訊面板)。

  4. 在「Permissions」(權限) 分頁中,確認 BigQuery 資料移轉服務服務代理具備 pubsub.subscriber 角色

確認服務代理是否具備訂閱項目的 pubsub.subscriber 角色。

如果服務代理未取得 pubsub.subscriber 角色,按一下 「Add principal」(新增主體),將 pubsub.subscriber 角色授予 service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com

錯誤:Cloud Pub/Sub API has not been used in project PROJECT_NUMBER before or it is disabled.

解決方法:確認專案已啟用 Cloud Pub/Sub API:

  1. 在 Cloud de Confiance 控制台中,前往「APIs & Services」(API 與服務) 頁面。

    前往「API 與服務」頁面

  2. 按一下「啟用 API 和服務」。

  3. 搜尋 Cloud Pub/Sub API,選取第一個結果,然後按一下「啟用」。

錯誤:Data Transfer Service does not have required permission to use project quota of project PROJECT_NUMBER to access Pub/Sub.

解決方法:確認 BigQuery 資料移轉服務服務代理已獲派 serviceusage.serviceUsageConsumer 角色:

  1. 前往 Cloud de Confiance 控制台的「IAM & Admin」(IAM 與管理) 頁面。

    前往「IAM & Admin」(IAM 與管理) 頁面

  2. 勾選「包含 S3NS提供的角色授予項目」核取方塊。

  3. 確認系統顯示名稱為 service-<project_number>@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com 的服務帳戶,且該帳戶已獲派服務使用情形消費者角色。

    確認服務帳戶是否具備 serviceusage.serviceUsageConsumer 角色。

問題:使用 Cloud Storage 事件導向移轉作業時,在 Cloud Storage bucket 上傳或更新檔案後,系統未觸發移轉作業。

收到事件後,系統不會立即觸發移轉作業。轉移作業可能需要幾分鐘才會觸發。如要查看下次轉移作業執行的狀態,請查看執行記錄中的「Target date for next run」(下次執行的目標日期) 欄位。這個欄位會顯示下次執行的排定時間,如果未收到任何事件,則會顯示「waiting for events to schedule next run」。如果您已在 Cloud Storage bucket 中上傳或更新檔案,但「Target date for next run」(下次執行的目標日期) 並未更新,且 10 到 20 分鐘內未觸發任何執行作業,請參閱下列解決方法。

解決方法:確認移轉設定中指定的 Pub/Sub 訂閱項目,能取得 Cloud Storage 事件發布的訊息:

  1. 前往 Cloud de Confiance 控制台的「Pub/Sub」頁面。

    前往「Pub/Sub」頁面

  2. 選取您在以事件為依據的移轉作業中使用的 Pub/Sub 訂閱項目。

  3. 在「Metrics」(指標) 分頁中,查看「Oldest unacked message age」(最舊未確認訊息存在時間) 圖表,確認是否有任何訊息。

確認是否有訊息傳送

如果沒有發布任何訊息,請檢查 Cloud Storage 的 Pub/Sub 通知設定是否正確。您可以使用下列 Google Cloud CLI 指令,查看與 bucket 相關聯的通知設定:

gcloud storage buckets notifications list gs://BUCKET_NAME

將 BUCKET_NAME 替換為用於通知的值區名稱。如要瞭解如何設定 Cloud Storage 的 Pub/Sub 通知,請參閱「設定 Cloud Storage 的 Pub/Sub 通知」。

如果有訊息,請檢查其他事件導向移轉設定是否使用相同的 Pub/Sub 訂閱項目。多項事件導向移轉設定無法重複使用同一個 Pub/Sub 訂閱項目。如要進一步瞭解事件導向移轉作業,請參閱「事件導向移轉作業」。

配額問題

錯誤:Quota exceeded: Your project exceeded quota for imports per project.
解決方法:確認專案中未排定過多轉入作業。如要瞭解如何計算移轉作業啟動的載入工作數量,請參閱「配額與限制」。