以下是工作使用到BigQuery時需要考慮來優化查詢的點(大部分是直接從文章中節錄出來:P)
運算單元爭用情況
執行查詢時,BigQuery會嘗試將查詢所需的工作拆分為"工作"。工作是指單一資料切片,可輸入至"階段"並從中輸出。單一時段會接收工作,並執行該階段的資料切片。理想情況下,BigQuery分區會並行執行這些工作,以便達到高效能。如果查詢有許多工作準備開始執行,但BigQuery無法取得足夠的可用運算單元來執行這些工作,就會發生運算單元爭用情形。
對於未分割的資料表,BigQuery會讀取整個資料表。分區資料表有助於確保只查詢感興趣的資料表子集。重組配額不足
在執行查詢之前,BigQuery會將查詢邏輯分割為"階段"。BigQuery運算單元會執行各個階段的工作。當運算單元完成階段工作執行作業時,會將中繼結果儲存在shuffle中。查詢中的後續階段會讀取Shuffle中的資料,以便繼續執行查詢。如果需要寫入重組的資料量超過重組容量,就會發生重組配額不足的情況。
減少查詢處理的資料量可能會降低shuffle使用量。SQL中的某些作業通常會更廣泛地使用shuffle,尤其是JOIN作業和GROUP BY子句。盡可能減少這些作業中的資料量,或許可以降低隨機播放的用量。
分區偏差
資料分布不均可能導致查詢執行速度變慢。執行查詢時,BigQuery會將資料分割成小型分區。無法在不同時段之間共用分區。因此,如果資料分布不均,部分分區會變得非常大,導致處理過大分區的運算單元異常終止。
來源文件:取得查詢成效洞察資料