本頁面提供一些常見的 BigQuery 訂閱疑難排解提示。
檢查 BigQuery 訂閱項目的狀態
如要查看訂閱狀態,請執行下列步驟:
在 Google Cloud 控制台中,前往 Pub/Sub 訂閱頁面。
查看 BigQuery 訂閱項目的「狀態」圖示。
如果圖示是綠色勾號,表示訂閱項目運作正常。
如果圖示為紅色驚嘆號,表示訂閱處於錯誤狀態。
按一下 BigQuery 訂閱項目。
系統會開啟訂閱詳細資料頁面。
請查看「訂閱狀態」,瞭解錯誤訊息。
請根據錯誤訊息,前往本頁的相關章節排解問題。
問題解決後,訂閱項目最終會恢復正常狀態。
無法建立或更新訂閱項目
以下是建立或更新 BigQuery 訂閱時可能遇到的常見問題。
找不到資料表錯誤
如果您在建立或更新訂閱項目工作流程中指定的資料表不存在,工作流程會傳回「找不到資料表」錯誤。在 Google Cloud 主控台中,訊息會類似以下內容:
The BigQuery table or dataset specified cannot be found.
如要解決這個問題,請先建立資料表,並確認您可以檢查其狀態,再將資料表與 BigQuery 訂閱項目搭配使用。
結構定義不符錯誤
如果資料表和主題的結構定義不相容,建立或更新訂閱工作流程會傳回結構定義不相符的錯誤。在 Google Cloud 主控台中,訊息會類似以下內容:
Incompatible schema type for field project_ids: expected INT64, got STRING
指定的錯誤訊息是指 project_ids
欄位的結構定義不相符。視你的架構不相符類型而定,你可能會看到不同的錯誤訊息。
如要解決這個問題,請檢查結構定義對應是否相容。
服務帳戶錯誤
如果您尚未為 Pub/Sub 服務帳戶設定正確的權限,建立或更新訂閱項目的工作流程就會傳回錯誤。在 Google Cloud 主控台中,訊息會類似以下內容:
Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.
如要解決這個問題,請檢查服務帳戶是否具備正確的權限。
訂閱狀態顯示紅色驚嘆號
如果您在建立訂閱項目後編輯資料表,可能會影響 Pub/Sub 將訊息寫入資料表的方式。如果變更導致問題,訂閱的狀態欄位會設為錯誤狀態。
在訂閱詳細資料頁面中,檢查欄位 Subscription state
的狀態。Subscription state
欄位會提供更明確的錯誤,可能為下列任一項:
當 Pub/Sub 訂閱項目處於錯誤狀態時,系統不會將訊息寫入 BigQuery 資料表,而是會將訊息保留在訂閱項目的待處理工作中。請注意,如果已設定,訊息不會傳送至附加的無效信件主題。未確認的訊息會保留 message_retention_duration
中設定的時間(預設為 7 天)。
待辦事項正在累積
如果您發現訂閱項目中積了許多待處理的訊息,或是訊息傳送至訂閱項目的無效信件主題,請查看以下可能的原因。
INVALID_ARGUMENT 錯誤訊息
如果提供的訊息格式在 Pub/Sub 看來有效,但在 BigQuery 目的地資料表結構定義中不符,就會發生這個錯誤。這表示訊息中有一或多個欄位的值不符合 BigQuery 資料表結構定義。請查看結構定義相容性,確認資料類型和格式是否正確。常見的錯誤包括:
空字串 (
""
) 不是有效的 JSON。將資料傳送至可為空值的 JSON BigQuery 資料表欄時,請提供空 JSON 物件({})
、null
,或空 JSON 字串("\"\"")
來代表缺少的值。傳送空字串會導致錯誤。如果訊息欄位值超過 BigQuery 欄位的長度上限,則會因大小限制而失敗。
如要排解 INVALID_ARGUMENT
錯誤,請在感興趣的訂閱項目中新增無效信件主題。dead-letter 主題會擷取無法寫入 BigQuery 的訊息,以及說明失敗原因的 CloudPubSubDeadLetterSourceDeliveryErrorMessage
屬性。
您也可以在Metrics Explorer中查看這些提交失敗。選取指標 pubsub.googleapis.com/subscription/push_request_count
,並依 response_code=invalid_argument
篩選。
RESOURCE_EXHAUSTED 錯誤訊息
如果訊息寫入 BigQuery 的速度緩慢,您可能需要增加專案的 Pub/Sub 推送配額或 BigQuery 儲存空間寫入吞吐量配額。如要確認是否遇到配額限制,請檢查推送要求指標 (subscription/push_request_count
),看看是否有任何 resource_exhausted
錯誤。
另一種診斷配額問題的方法是檢查專案的配額。在包含 Pub/Sub 資源或 BigQuery 執行個體的專案中,依序前往「IAM 與管理」>「配額」。搜尋相關配額 (pubsub.googleapis.com/regionalpushsubscriber
或 bigquerystorage.googleapis.com/write/append_bytes
)。如果需要增加任一配額,您可以申請調整配額。
每小時分區資料表,顯示分區 ID 欄中的 __UNPARTITIONED__
當 BigQuery 目的地資料表以小時分區時,資料列一開始會落在 INFORMATION_SCHEMA.PARTITIONS
檢視中標示為 __UNPARTITIONED__
的特殊分區。這是使用擷取時間分區的資料表的正常行為。
BigQuery 會使用串流緩衝區來改善寫入程序。資料可能會留在 __UNPARTITIONED__
分割區,直到累積足夠的資料量或至少經過一小時為止。滿足這些條件後,BigQuery 就會將資料重新分割為適當的每小時分區。
您可以使用 INFORMATION_SCHEMA.PARTITIONS
檢視畫面監控 __UNPARTITIONED__
區隔內的資料。
後續步驟
- 如果您仍遇到 BigQuery 訂閱問題,請參閱「取得支援」。