將資料載入 BigQuery 簡介

本頁面概述 BigQuery 的資料載入方式。

總覽

在許多情況下,您都可以不必在執行查詢前先載入資料;如非前述情況,則您必須先將資料載入 BigQuery,才能執行查詢。

您可以透過以下方式載入資料:

目前不支援將資料從 Google 雲端硬碟載入 BigQuery,但是您可以使用外部資料表查詢 Google 雲端硬碟中的資料。

您可以將資料載入新資料表或分區、將資料附加到現有資料表或分區,也可以覆寫資料表或分區。如要進一步瞭解如何使用分區,請參閱管理分區資料表

將資料載入 BigQuery 時,您可以提供資料表或分區結構定義,或是將結構定義自動偵測用於支援此功能的資料格式。

限制

目的地為 BigQuery 的資料載入作業會受到以下限制:

  • 目前您只能從 Google Storage 或可讀取的資料來源 (例如本機電腦) 將資料載入至 BigQuery 中。

另外,來源資料的位置以及格式可能會造成其他限制。如需詳細資訊,請參閱:

支援的資料格式

BigQuery 支援使用以下格式從 Cloud Storage 與可讀取的資料來源載入資料:

載入資料的預設來源格式是 CSV。如要載入以其他支援資料格式儲存的資料,請明確指定格式。資料載入 BigQuery 後,會轉換為 Capacitor 列表型格式 (BigQuery 的儲存格式)。

選擇資料擷取格式

您可將各種格式的資料載入到 BigQuery。資料載入 BigQuery 後,會轉換為 Capacitor 列表型格式 (BigQuery 的儲存格式)。

載入資料時,請根據下列因素選擇資料擷取格式:

  • 資料的結構定義。

    CSV、JSON、Avro、Parquet、與 ORC 皆支援平面資料。JSON、Avro、Parquet、 ORC、Cloud Firestore 匯出以及 Cloud Datastore 匯出亦支援巢狀與重複欄位的資料。 巢狀與重複資料適用於表達階層式資料。對資料執行去標準化作業時,巢狀與重複欄位亦有助減少重複情形。

  • 嵌入的換行。

    當您要從 JSON 檔案載入資料時,資料列必須以換行符號分隔。BigQuery 會預期在以換行符號分隔的 JSON 檔案中,每行包含一筆記錄。

  • 外部限制。

    您的資料可能來自於原生以 JSON 格式儲存資料的文件儲存資料庫。或者,您的資料可能來自於僅以 CSV 格式匯出的來源。

載入編碼資料

BigQuery 對巢狀或重複及平面資料都支援 UTF-8 編碼。 BigQuery 只對 CSV 檔案支援平面資料的 ISO-8859-1 編碼。

字元編碼

根據預設,BigQuery 服務的所有來源資料皆應為 UTF-8 編碼。如果您的 CSV 檔案是以 ISO-8859-1 格式編碼資料,就應該在匯入資料時明確指定編碼格式,這樣 BigQuery 才能在匯入過程中將資料轉換為 UTF-8。目前,您只能匯入 ISO-8859-1 或 UTF-8 編碼的資料。當您在指定資料的字元編碼時,請記住下列事項:

  • 如果您提供了非 UTF-8 編碼的 CSV 檔案,但沒有指定編碼或明確表示資料為 UTF-8,BigQuery 就會嘗試將您的 CSV 檔案轉換為 UTF-8。

    一般來說,系統仍會成功匯入您的資料,但資料的位元組可能會有一些出入。為了避免發生這種情況,請指定正確的編碼再重新匯入一次。

  • 分隔符號的編碼必須為 ISO-8859-1。

    一般來說,建議您使用標準的分隔符號,像是 tab、直立線或逗號。

  • BigQuery 如果無法轉換某個字元,就會轉換為標準的 Unicode 替換字元 �。
  • JSON 檔案必須以 UTF-8 進行編碼。

如果您打算使用 API 載入 ISO-8859-1 編碼的平面資料,請在載入工作設定中指定 encoding 屬性。

載入壓縮與未壓縮資料

Avro 二進位格式是載入壓縮資料的偏好格式。即使資料區塊經過壓縮,Avro 資料仍可並行讀取,因此載入速度還是比較快。

Parquet 二進位格式也是不錯的選擇,因為 Parquet 會對每個資料欄進行編碼,這種高效率的處理方式通常可產生較佳的壓縮比率與較小的檔案。Parquet 檔案還會運用壓縮技術,使得系統能夠並行載入檔案。

ORC 二進位制格式提供類似於 Parquet 格式的優點。ORC 檔案中的資料能夠快速載入,是因為系統可以平行讀取資料條。每個資料條中的資料列都會按順序載入。若要最佳化載入的時間,請使用大小為 256 MB 以下的資料條。

對於其他資料格式 (CSV 以及 JSON) 而言,BigQuery 可以快速載入未壓縮的檔案,甚至比壓縮檔還快,這是因為可以平行讀取未壓縮的檔案。由於未壓縮檔案比較大,使用這種檔案可能會超出頻寬限制,在載入到 BigQuery 之前暫存在 Google Cloud Storage 的資料成本也比較高。您也應該注意,無論是已壓縮還是未壓縮的檔案,都無法保證行的排序。建議您先評估自己的使用情況,再決定要採行哪一種做法。

一般而言,如果頻寬有限,請先使用 gzip 壓縮檔案,然後再將檔案上傳到 Google Cloud Storage。目前,將資料載入到 BigQuery 時,gzip 是唯一支援的檔案壓縮類型。如果載入速度對您的應用程式很重要,而且您有足夠的頻寬來載入資料,請將檔案保持在未壓縮的狀態。

載入去標準化、巢狀與重複的資料

許多開發人員都習慣使用關聯式資料庫和標準化的資料結構。標準化程序完成後,系統就不會儲存到重複的資料,而且在資料定期更新時,也能維持資料一致性。

在資料已去標準化的情況下,BigQuery 的執行效能最佳。與其保留星狀或雪花狀結構定義等關聯結構定義,不如將資料去標準化並善用巢狀與重複的欄位。巢狀與重複的欄位可維持資料間的關係,但不會因為保留關聯式 (標準化) 結構定義而犧牲效能。

將資料標準化以節省儲存空間並非現今系統的關注焦點。將資料去標準化雖會提高儲存空間成本,但用來換取效能的提升絕對划算。Join 作業需要資料協調 (通訊頻寬),去標準化作業則可將資料本地化至個別運算單元,因此二者可平行執行。

如果您需要在將資料去標準化的同時維持關係,請使用巢狀與重複的欄位而非完全整併您的資料。將關聯資料完全整併後,網路通訊 (隨機排列) 可能會對查詢效能造成負面影響。

例如,若要將訂單結構定義去標準化而不使用巢狀與重複的欄位,您可能需要按照 order_id 之類的欄位進行分組 (存在一對多關係時)。由於資料分組作業涉及隨機排列,因此效能將不如使用巢狀與重複欄位將資料去標準化。

在部分情況下,將資料去標準化並使用巢狀與重複的欄位可能無法帶來效能的提升。請避免在下列用途中進行去標準化:

  • 您的結構定義為星狀且維度變更頻繁。
  • BigQuery 進行資料列層級的異動以補全線上交易處理 (OLTP) 系統,但無法完全取代系統功能。

下列資料格式支援巢狀與重複的欄位:

  • Avro
  • Parquet
  • ORC
  • JSON (以換行符號分隔)
  • Cloud Datastore 匯出
  • Cloud Firestore 匯出

如需在載入資料時指定結構定義中的巢狀與重複欄位的資訊,請參閱指定巢狀和重複的欄位

結構定義自動偵測

不論是要將資料載入至 BigQuery 或是查詢外部資料來源,您都能使用結構定義自動偵測功能。

啟用自動偵測功能時,BigQuery 會隨機選擇資料來源中的檔案,並掃描最多 100 個資料列做為代表性樣本,以啟動推導程序。BigQuery 接著會檢查每個欄位,並嘗試根據樣本中的值為各欄位指派資料類型。

您可以在載入 JSON 或 CSV 檔案時使用結構定義自動偵測功能。結構的自動偵測功能不適用於 Cloud Datastore 匯出、Cloud Firestore 匯出、Avro 檔案、Parquet 檔案或是 ORC 檔案,因為這些格式會自行描述結構定義資訊。

從其他 Google 服務載入資料

BigQuery 資料移轉服務

BigQuery 資料移轉服務會自動將資料從這些 Google 服務載入 BigQuery。

在您設定資料移轉之後,BigQuery 資料移轉服務會自動排程並管理從來源應用程式載入 BigQuery 的週期性資料載入作業。

Google Analytics 360

如要瞭解如何從 Google Analytics 360 報表資料檢視將您的工作階段與命中資料匯出到 BigQuery,請參閱 Google Analytics (分析) 說明中心的 BigQuery 匯出

如需在 BigQuery 中查詢 Google Analytics (分析) 資料的範例,請參閱 Google Analytics (分析) 說明的 BigQuery 教戰手冊

Cloud Storage

BigQuery 支援從 Cloud Storage 載入資料。詳情請參閱從 Cloud Storage 載入資料

Cloud Datastore

BigQuery 支援從 Cloud Storage Datastore 匯出檔案載入資料。詳情請參閱從 Cloud Datastore 匯出檔案載入資料

Cloud Firestore

BigQuery 支援從 Cloud Firestore 匯出檔案載入資料。詳情請參閱從 Cloud Firestore 匯出檔案載入資料

Google Cloud Dataflow

Google Cloud Dataflow 可將資料直接載入到 BigQuery。如需使用 Cloud Dataflow 讀取及寫入 BigQuery 的更多資訊,請參閱 Apache Beam 說明文件中的 BigQuery I/O

載入資料的替代方案

在以下情況下,您不需要在執行查詢之前載入資料:

公開資料集
公開資料集是儲存在 BigQuery 中並與大眾共用的資料集。 詳情請參閱公開資料集
共用的資料集
您可以共用儲存在 BigQuery 中的資料集。如果有人與您共用資料集,您可在該資料集上執行查詢而不用載入資料。
外部資料來源
您可以建立以外部資料來源為基礎的資料表,以略過資料載入程序。如要瞭解這個方法的優點與限制,請參閱外部資料來源
Stackdriver 記錄檔
Stackdriver Logging 提供將記錄檔匯出到 BigQuery 的選項。詳情請參閱使用記錄檢視器匯出記錄

載入資料的另一個替代方案是以串流方式傳送資料,一次只傳送一筆記錄。當您需要立即使用資料時,通常就會使用串流。如需串流相關資訊,請參閱將資料串流至 BigQuery

配額政策

如需載入資料配額政策的相關資訊,請參閱「Quotas and limits」(配額與限制) 頁面的載入工作說明。

定價

目前,將資料載入 BigQuery 不收費。詳情請參閱定價頁面。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁