使用開放原始碼 Python 程式庫
您可以依據用途,選取 BigQuery 中的 Python 程式庫 (共有三個)。
| 用途 | 資料大小上限 | 說明 | |
|---|---|---|---|
| bigquery-dataframes | 以 Python 為基礎的資料處理和機器學習作業,並透過伺服器端處理 | 可擴充至 TB 級資料集 (伺服器端下推) | 透過伺服器端下推功能實作的 Pandas 和 scikit-learn API。詳情請參閱「BigQuery DataFrames 簡介」。 |
| pandas-gbq | 使用用戶端資料副本,以 Python 為基礎處理資料 | 受限於用戶端記憶體 | 可讓您在用戶端將資料移至 Python DataFrame,或從 Python DataFrame 移出。詳情請參閱說明文件和原始碼。 |
| google-cloud-bigquery | BigQuery 部署、管理和以 SQL 為基礎的查詢 | 受限於用戶端記憶體 | 這個 Python 套件會包裝所有 BigQuery API。詳情請參閱說明文件和原始碼。 |
使用 BigQuery DataFrames、pandas-gbq 和 google-cloud-bigquery
BigQuery DataFrames (bigframes) 程式庫提供 Python 風格的 DataFrame 和 ML API,並採用伺服器端查詢處理方式。pandas-gbq 程式庫提供簡單的介面,可執行查詢並將 pandas DataFrame 上傳至 BigQuery。這是 BigQuery 用戶端程式庫 (google-cloud-bigquery) 的精簡包裝函式。
安裝程式庫
如要使用本指南中的程式碼範例,請安裝 bigframes、pandas-gbq 和 google-cloud-bigquery 套件:
pip install --upgrade bigframes pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
執行中的查詢數
這三個程式庫都支援查詢儲存在 BigQuery 中的資料。主要差異包括:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| 預設 SQL 語法 | GoogleSQL | GoogleSQL (可使用 pandas_gbq.context.dialect 設定) |
GoogleSQL |
| 查詢設定 | 可使用 bpd.options.bigquery 或 read_gbq 參數設定 |
以字典形式傳送 (需符合查詢要求的格式)。 | 使用 QueryJobConfig 類別,其中包含各種 API 設定選項的屬性。 |
使用 GoogleSQL 語法查詢資料
以下範例顯示如何在明確/未明確指定專案的情況下,執行 GoogleSQL 查詢。三種程式庫在未指定專案時,均會根據預設憑證來判定專案。
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
使用舊版 SQL 語法查詢資料
以下範例顯示如何使用舊版 SQL 語法執行查詢。如需將查詢更新成 GoogleSQL 的相關說明,請參閱 GoogleSQL 遷移指南。
bigquery-dataframes
BigQuery DataFrames 不支援舊版 SQL 語法。請改用 GoogleSQL 語法。
pandas-gbq
google-cloud-bigquery
使用 BigQuery Storage API 下載大量結果
使用 BigQuery Storage API 將大量結果的下載速度提高 15 到 31 倍。
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
使用設定執行查詢
您必須透過 BigQuery API 要求傳送設定,才能執行某些複雜作業,例如執行參數化查詢,或是指定要儲存查詢結果的目標資料表。在 bigquery-dataframes (read_gbq) 和 pandas-gbq 中,設定必須以字典形式傳送 (需符合查詢要求的格式)。在 google-cloud-bigquery 程式庫中則會提供工作設定類別,例如 QueryJobConfig (其中包含設定複雜工作時的必要屬性)。
以下範例顯示如何使用具名參數執行查詢。
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
將 pandas DataFrame 載入至 BigQuery 資料表
這三個程式庫都支援將 pandas DataFrame 資料上傳至新的 BigQuery 資料表。主要差異如下:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| 支援類型 | 使用 read_pandas 將本機 pandas DataFrame 轉換為 bigframes.pandas.DataFrame (底層使用 Parquet 或 CSV),支援巢狀結構值和陣列值。然後使用 to_gbq 將其儲存至資料表。 |
由於 API 不支援巢狀結構值或陣列值,因此會將 DataFrame 轉換為 CSV 格式後才傳送至 API。 | 由於 API 支援巢狀結構值或陣列值,因此會將 DataFrame 轉換為 Parquet 或 CSV 格式後才傳送至 API。如果需要彈性序列化結構體和陣列值,請選擇 Parquet;如果需要彈性序列化日期和時間,請選擇 CSV。系統預設會選擇 Parquet。請注意,您必須安裝 pyarrow (即用來將 DataFrame 資料傳送至 BigQuery API 的 Parquet Engine),才能將 DataFrame 載入至資料表。 |
| 載入設定 | 使用 to_gbq 儲存時,請使用 if_exists 參數 ('fail'、'replace' 或 'append')。 |
您可以選擇指定資料表結構定義。 | 使用 LoadJobConfig 類別,其中包含各種 API 設定選項的屬性。 |
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
google-cloud-bigquery 套件需要 pyarrow 程式庫,才能將 pandas DataFrame 序列化到 Parquet 檔案。
安裝 pyarrow 套件:
pip install pyarrow
pandas-gbq 和 bigquery-dataframes 不支援的功能
pandas-gbq 和 bigquery-dataframes 程式庫提供的實用介面可讓您查詢資料並將資料寫入資料表,但不支援部分 BigQuery API 功能,包括 (但不限於) 以下功能:
- 管理資料集,包括建立新資料集、更新資料集屬性以及刪除資料集
- 將 pandas DataFrames 以外格式的資料載入至 BigQuery,或從含有 JSON 欄的 pandas DataFrames 載入資料
- 管理資料表,包括列出資料集中的資料表、複製資料表的資料以及刪除資料表
- 直接將 BigQuery 資料匯出至 Cloud Storage
排解連線集區錯誤
錯誤字串:Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
如果您在 Python 中使用預設的 BigQuery 用戶端物件,則最多只能有 10 個執行緒,因為 Python HTTPAdapter 的預設集區大小為 10。如要使用超過 10 個連線,請建立自訂 requests.adapters.HTTPAdapter 物件。例如:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)