排解配額和限制錯誤

BigQuery 有各式各樣的配額與限制,可限制不同要求和作業的頻率和數量。配額的用途是保護基礎架構,並避免客戶產生超出預期的用量。本文說明如何診斷及減輕配額和限制造成的特定錯誤。

如果這份文件未列出您的錯誤訊息,請參閱錯誤訊息清單,其中提供更多一般錯誤資訊。

總覽

如果 BigQuery 作業因超出配額而失敗,API 會傳回 HTTP 403 Forbidden 狀態碼。回應主體會進一步說明已達到的配額。回應主體看起來會與下列內容類似:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Quota exceeded: ...",
    "reason" : "quotaExceeded"
  } ],
  "message" : "Quota exceeded: ..."
}

酬載中的 message 欄位會說明超出的限制。例如,message 欄位可能會顯示 Exceeded rate limits: too many table update operations for this table

一般來說,配額限制會被分為兩個類別,如回應酬載中的 reason 欄位所示。

  • rateLimitExceeded這個值表示短期限制。如要解決這些限制問題,請稍待幾秒再重試作業。在兩次重試之間使用「指數輪詢」。也就是說,每次重試之間的延遲時間會呈指數增加。

  • quotaExceeded這個值表示長期限制。如果您達到長期配額上限,則至少應等待 10 分鐘,然後再重試作業。如果您持續達到其中一項長期配額限制,則應分析您的工作負載,以便找出緩解問題的方法。將工作負載最佳化或要求增加配額都有可能緩解問題。

如有 quotaExceeded 錯誤,請查看錯誤訊息,瞭解哪些配額已超過上限。接著分析工作負載,確認是否可以避免達到配額上限。

在某些情況下,您可以與 BigQuery 支援團隊聯絡聯絡 Google Cloud 銷售人員,並申請提高配額,但我們建議您先嘗試本文中的建議。

診斷

如要診斷問題,請按照下列步驟操作:

  • 使用 INFORMATION_SCHEMA 檢視畫面區域限定符,分析基本問題。這些檢視區塊含有 BigQuery 資源的中繼資料,包括工作、預留項目和串流資料插入。

    舉例來說,以下查詢會使用 INFORMATION_SCHEMA.JOBS 檢視表列出過去一天內所有配額相關錯誤:

    SELECT
    job_id,
    creation_time,
    error_result
    FROM  `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND
        error_result.reason IN ('rateLimitExceeded', 'quotaExceeded')

    REGION_NAME 替換為專案的區域。且必須以 region- 開頭。舉例來說,如果是 US 多區域,請使用 region-us

  • 查看 Cloud 稽核記錄中的錯誤。

    舉例來說,使用記錄檔探索工具時,以下查詢會在訊息字串中找出 Quota exceededlimit 的錯誤:

    resource.type = ("bigquery_project" OR "bigquery_dataset")
    protoPayload.status.code ="7"
    protoPayload.status.message: ("Quota exceeded" OR "limit")
    

    在本例中,狀態碼 7 表示 PERMISSION_DENIED,這對應到 HTTP 403 狀態碼。

    如需其他 Cloud 稽核記錄查詢範例,請參閱 BigQuery 查詢

查詢佇列限制錯誤

如果專案嘗試互動式或批次查詢排入佇列,但數量超出佇列限制,您可能會遇到這個錯誤。

錯誤訊息

Quota exceeded: Your project and region exceeded quota for
max number of jobs that can be queued per project.

解決方法

這項上限無法提高。如要解決配額錯誤,請按照下列步驟操作:

  • 暫停工作。如果發現某個程序或管道導致查詢次數增加,請暫停該程序或管道。

  • 使用批次優先順序的工作。您可以將比互動式查詢更多的批次查詢加入佇列。

  • 分發查詢。根據查詢性質和業務需求,在不同專案之間分配及分散負載。

  • 分配跑步時間。在較長的時間範圍內分配負載。如果您的報表解決方案需要執行許多查詢,請嘗試在查詢開始時導入一些隨機性。舉例來說,請勿同時開始所有報表。

  • 使用 BigQuery BI Engine。如果您在使用商業智慧 (BI) 工具建立資訊主頁時遇到這個錯誤,且該資訊主頁會查詢 BigQuery 中的資料,建議您使用 BigQuery BI Engine。使用 BigQuery BI Engine 是這個用途的最佳選擇。

  • 最佳化查詢和資料模型。通常可以重新撰寫查詢,提高執行效率。舉例來說,如果查詢包含一般資料表運算式 (CTE) WITH 子句,且查詢中有多個位置參照該子句,系統就會多次執行這項運算。最好將 CTE 執行的計算作業保留在臨時資料表中,然後在查詢中參照該資料表。

    多個聯結也可能導致效率不彰。在這種情況下,您可能需要考慮使用 巢狀和重複的資料欄。使用這項功能通常可改善資料的區域性、免除部分聯結需求,並整體減少資源耗用量和查詢執行時間。

    最佳化查詢可降低費用,因此採用以運算量為準的計價模式時,您就能使用運算單元執行更多查詢。詳情請參閱「查詢效能最佳化簡介」。

  • 最佳化查詢模型。BigQuery 並非關聯資料庫。不適合處理無限多的小型查詢。執行大量小型查詢會快速耗盡配額。這類查詢的執行效率不如使用較小資料庫產品時。BigQuery 是大型資料倉儲,主要用途就是儲存大量資料。最適合對大量資料執行分析查詢。

  • 保存資料 (已儲存的表格)。在 BigQuery 中預先處理資料,並儲存在其他資料表中。舉例來說,如果您執行許多類似的運算密集型查詢,但條件不同,則結果不會快取。WHERE這類查詢每次執行時也會耗用資源。您可以預先計算資料並儲存在資料表中,藉此提升這類查詢的效能,並縮短處理時間。您可以使用 SELECT 查詢資料表中的預先計算資料。您通常可以在 ETL 程序中擷取資料時執行這項操作,也可以使用排程查詢具體化檢視區塊

  • 使用模擬測試模式。以模擬測試模式執行查詢,估算讀取的位元組數,但不會實際處理查詢。

  • 預覽資料表資料。如要試用或探索資料,而非執行查詢,請使用 BigQuery 的資料表預覽功能預覽資料表資料。

  • 使用快取查詢結果 所有查詢結果 (包括互動式與批次查詢) 皆會以快取方式存放在暫時性資料表中約 24 小時,但也有一些例外狀況。執行快取查詢時,仍會計入並行查詢限制,但使用快取結果的查詢作業速度,會比未使用快取結果的查詢作業快上許多,因為 BigQuery 不需計算結果集。

依資料欄分區的資料表分區修改次數配額錯誤

當資料表達到每日允許的分區修改次數配額時,BigQuery 就會傳回這個錯誤。分區修改次數包括所有載入工作複製工作查詢工作,這些工作會將資料附加至目的地分區或覆寫目的地分區。

如要查看「每個資料欄分區資料表每日可修改分區的次數上限」值,請參閱「分區資料表」一文。

錯誤訊息

Quota exceeded: Your table exceeded quota for
Number of partition modifications to a column partitioned table

解決方法

這項配額無法增加。如要解決配額錯誤,請按照下列步驟操作:

  • 變更資料表的分區,讓每個分區包含更多資料,以減少分區總數。舉例來說,您可以將分區依天改為依月,或是變更資料表的分區方式
  • 請改用叢集,而非分區。
  • 如果您經常從儲存在 Cloud Storage 中的多個小型檔案載入資料,且每個檔案都使用一個工作,請將多個載入工作合併為單一工作。您可以透過以逗號分隔的清單 (例如 gs://my_path/file_1,gs://my_path/file_2),或使用萬用字元 (例如 gs://my_path/*),從多個 Cloud Storage URI 載入資料。

    詳情請參閱「批次載入資料」。

  • 舉例來說,如果您使用載入、選取或複製工作,將單一資料列附加至資料表,則應考慮將多個工作批次處理為一個工作。如果將 BigQuery 做為關聯式資料庫使用,效能不佳。最佳做法是避免頻繁執行單列附加動作。
  • 如要以高速度附加資料,請考慮使用 BigQuery Storage Write API。建議您使用這項解決方案,以高效能方式擷取資料。BigQuery Storage Write API 具備強大的功能,包括單次傳送語意。如要瞭解限制和配額,請參閱「Storage Write API」一文;如要瞭解使用這項 API 的費用,請參閱「BigQuery 資料擷取定價」一文。
  • 如要監控資料表上修改的分區數量,請使用 INFORMATION_SCHEMA 檢視區塊

串流資料插入配額錯誤

本節針對排解以串流方式將資料傳入 BigQuery 的配額錯誤提供相關提示。

在特定區域中,如果您並未在每個資料列的 insertId 欄位中填入資料,則串流資料插入會含有較高的配額。如要進一步瞭解串流資料插入的配額,請參閱串流資料插入。BigQuery 串流的配額相關錯誤取決於 insertId 是否存在。

錯誤訊息

如果 insertId 欄位為空白,則可能會發生下列配額錯誤:

配額限制 錯誤訊息
每項專案每秒位元組數 在區域 REGION 中專案 PROJECT_ID gaia_id 為 GAIA_ID 的實體超過每秒插入位元組數的配額。

如果在 insertId 欄位填入資料,則可能會發生下列配額錯誤:

配額限制 錯誤訊息
每項專案每秒資料列數量 您在 REGION 的專案 PROJECT_ID 超過每秒串流資料插入資料列的配額。
每個資料表每秒資料列數量 您的資料表 TABLE_ID 超過每秒串流資料插入資料列的配額。
每個資料表每秒位元組數 您的資料表 TABLE_ID 超出每秒串流資料插入位元組數的配額。

insertId 欄位的用途是簡化插入的資料列。如果同一個 insertId 的多個插入項目均於幾分鐘之內抵達,則 BigQuery 會寫入單一版本的記錄。但是,我們無法保證系統會自動刪除重複的內容。為了達到最大的串流總處理量,建議您不要加入 insertId,改成手動刪除重複內容。詳情請參閱確保資料一致性一文。

如果遇到這項錯誤,請診斷問題,然後按照建議步驟解決問題。

診斷

使用 STREAMING_TIMELINE_BY_* 檢視表來分析串流流量。這些檢視表會每隔一分鐘匯總串流統計資料,並依錯誤代碼分類。結果中會顯示配額錯誤,且 error_code 等於 RATE_LIMIT_EXCEEDEDQUOTA_EXCEEDED

根據已達到的特定配額上限查看 total_rowstotal_input_bytes。如果錯誤是資料表層級的配額,請依 table_id 進行篩選。

舉例來說,下列查詢顯示每分鐘擷取的位元組總數和配額錯誤總數:

SELECT
 start_timestamp,
 error_code,
 SUM(total_input_bytes) as sum_input_bytes,
 SUM(IF(error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'),
     total_requests, 0)) AS quota_error
FROM
 `region-REGION_NAME`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
WHERE
  start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY)
GROUP BY
 start_timestamp,
 error_code
ORDER BY 1 DESC

解決方法

如要解決配額錯誤,請按照下列步驟操作:

  • 如果您使用 insertId 欄位來刪除重複的內容,而您的專案位於支援較高串流配額的區域,則建議移除 insertId 欄位。這個解決方案可能需要執行一些其他步驟,以手動方式刪除重複的資料內容。詳情請參閱手動移除重複內容

  • 如果您並非使用 insertId,或是無法加以移除,請監控 24 小時內的串流流量,並分析配額錯誤:

    • 如果您看到的大多是 RATE_LIMIT_EXCEEDED 錯誤而不是 QUOTA_EXCEEDED 錯誤,而您的整體流量低於配額的 80%,則這些錯誤可能表示流量暫時暴增。您可以在每次重試之間使用指數輪詢重試作業,以處理這些錯誤。

    • 如果您使用 Dataflow 工作插入資料,請考慮改用載入工作,而非串流插入。詳情請參閱「設定插入方法」。如果您使用 Dataflow 和自訂 I/O 連接器,請考慮改用內建 I/O 連接器。詳情請參閱自訂 I/O 模式

    • 如果您看到 QUOTA_EXCEEDED 錯誤,或整體流量持續超過配額的 80%,請提交增加配額的要求。詳情請參閱「要求調整配額」。

    • 您也可以考慮使用較新的 Storage Write API 取代串流插入,因為這項 API 的輸送量較高、價格較低,而且提供許多實用功能。

載入 CSV 檔案配額錯誤

如果您使用 bq load 指令載入大型 CSV 檔案,並搭配 --allow_quoted_newlines 旗標,可能會遇到這個錯誤。

錯誤訊息

Input CSV files are not splittable and at least one of the files is larger than
the maximum allowed size. Size is: ...

解決方法

如要解決配額錯誤,請按照下列步驟操作:

  • --allow_quoted_newlines 旗標設為 false
  • 將 CSV 檔案分割成較小的區塊,每個區塊的大小不得超過 4 GB。

如要進一步瞭解將資料載入 BigQuery 時的限制,請參閱「載入工作」。

資料表匯入或查詢附加配額錯誤

如果資料表達到標準資料表的每日資料表作業次數上限,BigQuery 就會傳回這則錯誤訊息。資料表作業包括下列所有作業的總和:載入工作複製工作查詢工作,這些作業會將資料附加至目的地資料表或覆寫目的地資料表。

如要查看「每日資料表作業」限制的值,請參閱「標準資料表」一文。

錯誤訊息

Your table exceeded quota for imports or query appends per table

如果遇到這項錯誤,請診斷問題,然後按照建議步驟解決問題。

診斷

如果尚未找出大部分表格作業的來源,請執行下列步驟:

  1. 記下失敗的查詢、載入或複製工作要寫入的專案、資料集和資料表。

  2. 使用INFORMATION_SCHEMA.JOBS_BY_*表格進一步瞭解會修改資料表的工作。

    以下範例使用 JOBS_BY_PROJECT,找出過去 24 小時內依職缺類型分組的每小時職缺數。如果預期多個專案會寫入資料表,請將 JOBS_BY_PROJECT 替換成 JOBS_BY_ORGANIZATION

    SELECT
    TIMESTAMP_TRUNC(creation_time, HOUR),
    job_type,
    count(1)
    FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY)
    AND destination_table.project_id = "my-project-id"
    AND destination_table.dataset_id = "my_dataset"
    AND destination_table.table_id = "my_table"
    GROUP BY 1, 2
    ORDER BY 1 DESC

解決方法

這項配額無法增加。如要解決配額錯誤,請按照下列步驟操作:

  • 如果您經常從儲存在 Cloud Storage 中的多個小型檔案載入資料,且每個檔案都使用一個工作,請將多個載入工作合併為單一工作。您可以透過以逗號分隔的清單 (例如 gs://my_path/file_1,gs://my_path/file_2),或使用萬用字元 (例如 gs://my_path/*),從多個 Cloud Storage URI 載入資料。

    詳情請參閱「批次載入資料」。

  • 舉例來說,如果您使用載入、選取或複製工作,將單一資料列附加至資料表,則應考慮將多個工作批次處理為一個工作。如果將 BigQuery 做為關聯式資料庫使用,效能不佳。最佳做法是避免頻繁執行單列附加動作。
  • 如要以高速度附加資料,請考慮使用 BigQuery Storage Write API。建議您使用這項解決方案,以高效能方式擷取資料。BigQuery Storage Write API 具備強大的功能,包括單次傳送語意。如要瞭解限制和配額,請參閱「Storage Write API」一文;如要瞭解使用這項 API 的費用,請參閱「BigQuery 資料擷取定價」一文。
  • 如要監控資料表上修改的分區數量,請使用 INFORMATION_SCHEMA 檢視區塊

資料表中繼資料更新作業的頻率上限錯誤

如果資料表達到標準資料表的中繼資料更新作業頻率上限,BigQuery 就會傳回這項錯誤。資料表作業包括下列所有工作:載入工作複製工作查詢工作,這些工作會將資料附加至目的地資料表、覆寫目的地資料表,或是使用 DML DELETEINSERTMERGETRUNCATE TABLEUPDATE 將資料寫入資料表。

如要查看「每個資料表的資料表中繼資料更新作業頻率上限」值,請參閱「標準資料表」一節。

錯誤訊息

Exceeded rate limits: too many table update operations for this table

如果遇到這項錯誤,請診斷問題,然後按照建議步驟解決問題。

診斷

中繼資料表更新可能來自修改資料表中繼資料的 API 呼叫,或修改資料表內容的工作。如果尚未找出資料表中繼資料更新作業的主要來源,請按照下列步驟操作:

找出 API 呼叫
  1. 前往 Google Cloud 導覽選單,依序選取「記錄」>「記錄檔探索工具」

    前往記錄檔探索工具

  2. 執行下列查詢,篩選記錄以查看資料表作業:

    resource.type="bigquery_dataset"
    protoPayload.resourceName="projects/my-project-id/datasets/my_dataset/tables/my_table"
    (protoPayload.methodName="google.cloud.bigquery.v2.TableService.PatchTable" OR
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.UpdateTable" OR
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.InsertTable")
    
找出所需的工作

以下查詢會傳回過去一天內,專案中修改受影響資料表的作業清單。如果預期機構中的多個專案會寫入資料表,請將 JOBS_BY_PROJECT 替換為 JOBS_BY_ORGANIZATION

SELECT
 job_id,
 user_email,
 query
FROM  `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY)
AND destination_table.project_id = "my-project-id"
AND destination_table.dataset_id = "my_dataset"
AND destination_table.table_id = "my_table"

詳情請參閱 BigQuery 稽核記錄總覽

解決方法

這項配額無法增加。如要解決配額錯誤,請按照下列步驟操作:

  • 降低資料表中繼資料的更新頻率。
  • 在工作或資料表作業之間加入延遲時間,確保更新率在限制範圍內。
  • 如要插入或修改資料,請考慮使用 DML 作業。DML 作業不受每個資料表的資料表中繼資料更新作業頻率上限限制。

    DML 作業有其他限制和配額。詳情請參閱「使用資料操縱語言 (DML)」。

  • 如果您經常從儲存在 Cloud Storage 中的多個小型檔案載入資料,且每個檔案都使用一個工作,請將多個載入工作合併為單一工作。您可以透過以逗號分隔的清單 (例如 gs://my_path/file_1,gs://my_path/file_2),或使用萬用字元 (例如 gs://my_path/*),從多個 Cloud Storage URI 載入資料。

    詳情請參閱「批次載入資料」。

  • 舉例來說,如果您使用載入、選取或複製工作,將單一資料列附加至資料表,則應考慮將多個工作批次處理為一個工作。如果將 BigQuery 做為關聯式資料庫使用,效能不佳。最佳做法是避免頻繁執行單列附加動作。
  • 如要以高速度附加資料,請考慮使用 BigQuery Storage Write API。建議您使用這項解決方案,以高效能方式擷取資料。BigQuery Storage Write API 具備強大的功能,包括單次傳送語意。如要瞭解限制和配額,請參閱「Storage Write API」一文;如要瞭解使用這項 API 的費用,請參閱「BigQuery 資料擷取定價」一文。
  • 如要監控資料表上修改的分區數量,請使用 INFORMATION_SCHEMA 檢視區塊

API 要求錯誤次數上限

當您達到每個使用者每個方法對 BigQuery API 的 API 要求數量速率限制時,BigQuery 會傳回這項錯誤。舉例來說,服務帳戶的 tables.get 方法呼叫,或是不同使用者電子郵件地址的 jobs.insert 方法呼叫。詳情請參閱 BigQuery API 中的「每個方法每個使用者每秒最多可發出的 API 要求數」速率限制。

錯誤訊息

Quota exceeded: Your user_method exceeded quota for concurrent api requests
per user per method.

如果遇到這項錯誤,請診斷問題,然後按照建議步驟解決問題。

診斷

如果尚未找出達到此速率限制的方法,請執行下列操作:

服務帳戶

  1. 前往代管服務帳戶的專案

  2. 在 Google Cloud 控制台中,前往「API Dashboard」(API 資訊主頁)

    如需查看 API 詳細用量資訊的操作說明,請參閱「使用 API 資訊主頁」。

  3. 在 API 資訊主頁中,選取「BigQuery API」

  4. 如要查看更詳細的使用情況資訊,請選取「指標」,然後執行下列操作:

    1. 在「選取圖表」中,選取「依 API 方法劃分的流量」

    2. 依服務帳戶的憑證篩選圖表。在發現錯誤的時間範圍內,您可能會看到某個方法的尖峰。

API 呼叫

部分 API 呼叫會在 Cloud Logging 的 BigQuery 稽核記錄中記錄錯誤。如要找出達到上限的方法,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台,依序選取 Google Cloud 導覽選單 >「Logging」>「Logs Explorer」,為專案啟用記錄檔探索工具:

    前往記錄檔探索工具

  2. 執行下列查詢來篩選記錄:

     resource.type="bigquery_resource"
     protoPayload.authenticationInfo.principalEmail="<user email or service account>"
     "Too many API requests per user per method for this user_method"
     In the log entry, you can find the method name under the property protoPayload.method_name.
     

    詳情請參閱 BigQuery 稽核記錄總覽

解決方法

如要解決配額錯誤,請按照下列步驟操作:

  • 減少 API 要求數量,或在多個 API 要求之間加入延遲,確保要求數量不超過上限。

  • 如果只是偶爾超出限制,您可以針對這項特定錯誤,採用指數輪詢重試。

  • 如果經常插入資料,建議使用串流插入,因為串流插入不受 BigQuery API 配額影響。不過,串流插入 API 會產生相關費用,且有專屬的限制和配額

    如要瞭解串流資料插入費用,請參閱 BigQuery 定價

  • 使用 Dataflow 和 BigQuery I/O 連接器將資料載入 BigQuery 時,您可能會遇到 tables.get 方法的這項錯誤。如要解決這個問題,請按照下列步驟操作:

    • 將目的地資料表的建立處理方式設為 CREATE_NEVER。詳情請參閱「建立處置方式」。

    • 使用 Apache Beam SDK 2.24.0 以上版本。在舊版 SDK 中,CREATE_IF_NEEDED 處置會呼叫 tables.get 方法,檢查資料表是否存在。

  • 如要申請提高配額,請與支援團隊或銷售人員聯絡。如需額外配額,請參閱「申請提高配額」。申請增加配額可能需要幾天才能處理完畢。為提供更多要求相關資訊,建議您在要求中加入工作優先順序、執行查詢的使用者,以及受影響的方法。

專案掃描的免費查詢位元組數超出配額

在免費方案中執行查詢時,如果帳戶達到每月可查詢的資料大小上限,BigQuery 就會傳回這項錯誤。如要進一步瞭解查詢 (分析),請參閱「免費用量層級」。

錯誤訊息

Your project exceeded quota for free query bytes scanned

解決方法

如要繼續使用 BigQuery,請將帳戶升級為 Cloud Billing 付費帳戶

每個專案配額錯誤的每秒 tabledata.list 位元組數上限

當錯誤訊息中提及的專案編號達到每秒可透過專案中的 tabledata.list API 呼叫讀取的資料大小上限時,BigQuery 就會傳回這項錯誤。詳情請參閱「每分鐘最多 tabledata.list 位元組」。

錯誤訊息

Your project:[project number] exceeded quota for tabledata.list bytes per second per project

解決方法

如要解決這項錯誤,請按照下列步驟操作:

  • 一般來說,我們建議您盡量不要超過這個上限。舉例來說,您可以延長時間間隔,延遲傳送要求。如果錯誤不常發生,實作指數輪詢重試即可解決這個問題。
  • 如果用途是從資料表快速且頻繁地讀取大量資料,建議使用 BigQuery Storage Read API,而非 tabledata.list API。
  • 如果上述建議無法解決問題,請按照下列步驟,透過Google Cloud 主控台 API 資訊主頁要求增加配額:

    1. 前往Google Cloud 控制台 API 資訊主頁
    2. 在資訊主頁中,篩選配額:Tabledata list bytes per minute (default quota)
    3. 選取配額,然後按照「要求調整配額」一文中的指示操作。

    審查及處理要求可能需要幾天的時間。

針對資料表待處理的 DML 陳述式過多

這個錯誤表示針對相同資料表執行的並行變動 DML 陳述式 (UPDATEDELETEMERGE) 數量,已超過資料操縱語言 (DML) 配額限制。這項配額限制適用於每個資料表,且僅適用於變動 DML,不包括 INSERT

解決方法

請按照 DML 陳述式的最佳做法,批次處理 DML 工作。

每個專案每日的複製工作數量上限 (配額錯誤)

如果專案中執行的複製工作數超過每日上限,BigQuery 就會傳回這項錯誤。如要進一步瞭解每日複製工作數上限,請參閱「複製工作」一文。

錯誤訊息

Your project exceeded quota for copies per project

診斷

如要收集更多有關複製作業來源的資料,可以嘗試下列做法:

  • 如果複製作業位於單一或少數幾個區域,您可以嘗試查詢該特定區域的 INFORMATION_SCHEMA.JOBS 表格。例如:

    SELECT
    creation_time, job_id, user_email, destination_table.project_id, destination_table.dataset_id, destination_table.table_id
    FROM `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 DAY) AND CURRENT_TIMESTAMP()
    AND job_type = "COPY"
    order by creation_time DESC

    您也可以視需要調整時間間隔。

  • 如要查看所有地區的所有複製工作,請在 Cloud Logging 中使用下列篩選器:

    resource.type="bigquery_resource"
    protoPayload.methodName="jobservice.insert"
    protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.tableCopy:*
    

解決方法

  • 如果頻繁複製作業的目的是建立資料快照,建議改用資料表快照。相較於複製完整資料表,資料表快照的費用較低,速度也較快。
  • 如要要求增加配額,請與支援團隊銷售人員聯絡。審查及處理要求可能需要幾天的時間。建議在要求中說明優先順序、用途和專案 ID。

超出每日擷取位元組配額錯誤

如果匯出作業超出專案的預設每日上限 50 TiB (太位元組),BigQuery 就會傳回這項錯誤。如要進一步瞭解匯出工作限制,請參閱匯出工作

錯誤訊息

Your usage exceeded quota for ExtractBytesPerDay

診斷

如果匯出的資料表大於 50 TiB,匯出作業會失敗,因為超過匯出限制。如要解決這個問題,請參閱這篇文章。如要匯出特定資料表分區的資料表資料,可以使用分區修飾符來識別要匯出的分區。

如要收集最近幾天的匯出資料用量,可以嘗試下列做法:

  • 查看專案配額 使用篩選條件,例如 Name: Extract bytes per day Metric: bigquery.googleapis.com/quota/extract/bytes,以及「顯示用量」 圖表,即可查看幾天內的用量趨勢。

  • 或者,您也可以查詢 INFORMATION_SCHEMA.JOBS_BY_PROJECT,查看幾天內的總擷取位元組數。舉例來說,下列查詢會傳回過去 7 天內,EXTRACT 工作每天處理的位元組總數。

    SELECT
    TIMESTAMP_TRUNC(creation_time, DAY) AS day,
    SUM ( total_bytes_processed ) / POW(1024, 3) AS total_gigabytes_processed
    FROM
    `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP()
    AND job_type = "EXTRACT"
    GROUP BY 1
    ORDER BY 2 DESC
  • 然後找出耗用位元組數超出預期的特定工作,進一步縮小搜尋結果範圍。以下範例會傳回過去 7 天內處理超過 100 GB 資料的前 100 個 EXTRACT 工作。

    SELECT
    creation_time,
    job_id,
    total_bytes_processed/POW(1024, 3) AS total_gigabytes_processed
    FROM
    `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP()
    AND job_type="EXTRACT"
    AND total_bytes_processed > (POW(1024, 3) * 100)
    ORDER BY
    total_bytes_processed DESC
    LIMIT 100

您也可以使用工作探索器,並搭配 Bytes processed more than 等篩選器,篩選出指定時間範圍內的高處理量工作。

解決方法

如要解決這項配額錯誤,其中一個方法是建立運算單元保留項目,然後將專案指派給具有 PIPELINE 工作類型的保留項目。由於這項作業使用的是專屬預訂,而非免費共用運算單元集區,因此可以略過限制檢查。如有需要,您可以刪除預留項目,以便日後使用共用運算單元集區。

如要瞭解如何匯出超過 50 TiB (太位元組) 的資料,請參閱匯出工作的附註部分。

包含遠端函式的並行查詢數量上限

如果含有遠端函式的並行查詢數量超過上限,BigQuery 就會傳回這項錯誤。

如要進一步瞭解遠端函式的限制,請參閱遠端函式

錯誤訊息

Exceeded rate limits: too many concurrent queries with remote functions for
this project

診斷

如要瞭解包含遠端函式的並行查詢限制,請參閱「遠端函式限制」。

解決方法

隨機播放大小上限錯誤

如果專案超出可供隨機排序作業使用的磁碟和記憶體大小上限,BigQuery 就會傳回這項錯誤。

這項配額的計算方式是以預訂為單位,並根據預訂項目將配額分配給各個專案。Cloud Customer Care 無法修改配額。如要進一步瞭解用量,請查詢 INFORMATION_SCHEMA.JOBS_TIMELINE 檢視畫面

錯誤訊息

您收到下列其中一則錯誤訊息:

  • Quota exceeded: Your project exceeded quota for total shuffle size limit.
  • Resources exceeded: Your project or organization exceeded the maximum
    disk and memory limit available for shuffle operations. Consider provisioning
    more slots, reducing query concurrency, or using more efficient logic in this
    job.

解決方法

如要解決這項錯誤,請按照下列步驟操作:

CREATE MODEL 陳述式數量上限

這項錯誤表示您已超出 CREATE MODEL 陳述式的配額。

錯誤訊息

Quota exceeded: Your project exceeded quota for CREATE MODEL queries per project.

解決方法

如果超出 CREATE MODEL 陳述式的配額,請傳送電子郵件至 bqml-feedback@google.com,要求增加配額。