使用Python與BigQuery進(jìn)行交互的代碼詳解
選擇合適的 Python 庫(kù)
在使用 BigQuery 時(shí),您可以根據(jù)自己的需求選擇以下三個(gè) Python 庫(kù):
- BigQuery DataFrame:通過(guò)服務(wù)器端處理,支持 Pandas 和 Scikit-learn API,適合數(shù)據(jù)處理和機(jī)器學(xué)習(xí)任務(wù)。
- pandas-gbq:客戶端庫(kù),用于在 Python 中讀寫(xiě) BigQuery 數(shù)據(jù),適合簡(jiǎn)單的數(shù)據(jù)處理和分析。
- google-cloud-bigquery:Google 維護(hù)的庫(kù),提供完整的 BigQuery API 功能,適合復(fù)雜的數(shù)據(jù)管理和分析。
安裝庫(kù)
要使用這些庫(kù),您需要安裝以下包:
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
運(yùn)行查詢
使用 GoogleSQL 語(yǔ)法
以下示例展示了如何使用 pandas-gbq 和 google-cloud-bigquery 運(yùn)行 GoogleSQL 查詢:
pandas-gbq
import pandas
sql = """
SELECT name
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = 'TX'
LIMIT 100
"""
# 使用標(biāo)準(zhǔn) SQL 查詢
df = pandas.read_gbq(sql, dialect="standard")
# 指定項(xiàng)目 ID
project_id = "your-project-id"
df = pandas.read_gbq(sql, project_id=project_id, dialect="standard")
google-cloud-bigquery
from google.cloud import bigquery
client = bigquery.Client()
sql = """
SELECT name
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = 'TX'
LIMIT 100
"""
# 使用標(biāo)準(zhǔn) SQL 查詢
df = client.query(sql).to_dataframe()
# 指定項(xiàng)目 ID
project_id = "your-project-id"
df = client.query(sql, project=project_id).to_dataframe()
使用舊版 SQL 語(yǔ)法
如果需要使用舊版 SQL 語(yǔ)法,可以通過(guò)以下方式進(jìn)行:
pandas-gbq
import pandas
sql = """
SELECT name
FROM [bigquery-public-data:usa_names.usa_1910_current]
WHERE state = 'TX'
LIMIT 100
"""
df = pandas.read_gbq(sql, dialect="legacy")
google-cloud-bigquery
from google.cloud import bigquery
client = bigquery.Client()
sql = """
SELECT name
FROM [bigquery-public-data:usa_names.usa_1910_current]
WHERE state = 'TX'
LIMIT 100
"""
query_config = bigquery.QueryJobConfig(use_legacy_sql=True)
df = client.query(sql, job_config=query_config).to_dataframe()
使用 BigQuery Storage API 加速數(shù)據(jù)下載
BigQuery Storage API 可以顯著提高大型結(jié)果的下載速度。以下示例展示了如何使用此 API:
pandas-gbq
import pandas sql = "SELECT * FROM `bigquery-public-data.irs_990.irs_990_2012`" # 使用 BigQuery Storage API 加速下載 df = pandas.read_gbq(sql, dialect="standard", use_bqstorage_api=True)
google-cloud-bigquery
from google.cloud import bigquery client = bigquery.Client() sql = "SELECT * FROM `bigquery-public-data.irs_990.irs_990_2012`" # 如果 BigQuery Storage API 已啟用,則自動(dòng)使用 df = client.query(sql).to_dataframe()
配置查詢
參數(shù)化查詢
以下示例展示了如何使用參數(shù)化查詢:
pandas-gbq
import pandas
sql = """
SELECT name
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = @state
LIMIT @limit
"""
query_config = {
"query": {
"parameterMode": "NAMED",
"queryParameters": [
{
"name": "state",
"parameterType": {"type": "STRING"},
"parameterValue": {"value": "TX"},
},
{
"name": "limit",
"parameterType": {"type": "INTEGER"},
"parameterValue": {"value": 100},
},
],
}
}
df = pandas.read_gbq(sql, configuration=query_config)
google-cloud-bigquery
from google.cloud import bigquery
client = bigquery.Client()
sql = """
SELECT name
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = @state
LIMIT @limit
"""
query_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ScalarQueryParameter("state", "STRING", "TX"),
bigquery.ScalarQueryParameter("limit", "INTEGER", 100),
]
)
df = client.query(sql, job_config=query_config).to_dataframe()
將 pandas DataFrame 加載到 BigQuery 表中
以下示例展示了如何將 pandas DataFrame 加載到 BigQuery 表中:
pandas-gbq
import pandas
df = pandas.DataFrame(
{
"my_string": ["a", "b", "c"],
"my_int64": [1, 2, 3],
"my_float64": [4.0, 5.0, 6.0],
"my_timestamp": [
pandas.Timestamp("1998-09-04T16:03:14"),
pandas.Timestamp("2010-09-13T12:03:45"),
pandas.Timestamp("2015-10-02T16:00:00"),
],
}
)
table_id = "my_dataset.new_table"
df.to_gbq(table_id)
google-cloud-bigquery
from google.cloud import bigquery
import pandas
df = pandas.DataFrame(
{
"my_string": ["a", "b", "c"],
"my_int64": [1, 2, 3],
"my_float64": [4.0, 5.0, 6.0],
"my_timestamp": [
pandas.Timestamp("1998-09-04T16:03:14"),
pandas.Timestamp("2010-09-13T12:03:45"),
pandas.Timestamp("2015-10-02T16:00:00"),
],
}
)
client = bigquery.Client()
table_id = "my_dataset.new_table"
# 確保正確的數(shù)據(jù)類型
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("my_string", "STRING"),
]
)
job = client.load_table_from_dataframe(df, table_id, job_config=job_config)
# 等待加載完成
job.result()
pandas-gbq 的局限性
- 數(shù)據(jù)集管理:不支持創(chuàng)建、更新或刪除數(shù)據(jù)集。
- 數(shù)據(jù)格式支持:僅支持 CSV 格式,不支持嵌套值或數(shù)組值。
- 表管理:不支持列出表、復(fù)制表或刪除表。
- 數(shù)據(jù)導(dǎo)出:不支持直接導(dǎo)出數(shù)據(jù)到 Cloud Storage。
解決連接池錯(cuò)誤
如果遇到連接池錯(cuò)誤,可以通過(guò)以下方式增加連接池大?。?/p>
import requests
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)
以上就是使用Python與BigQuery進(jìn)行交互的代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于Python與BigQuery交互的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python構(gòu)造icmp echo請(qǐng)求和實(shí)現(xiàn)網(wǎng)絡(luò)探測(cè)器功能代碼分享
本文分享了二個(gè)python示例,python構(gòu)造icmp echo請(qǐng)求、實(shí)現(xiàn)網(wǎng)絡(luò)探測(cè)器功能代碼,類似nmap功能2014-01-01
python調(diào)用dubbo接口的實(shí)現(xiàn)步驟
本文主要介紹了python調(diào)用dubbo接口的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
使用pandas實(shí)現(xiàn)篩選出指定列值所對(duì)應(yīng)的行
這篇文章主要介紹了使用pandas實(shí)現(xiàn)篩選出指定列值所對(duì)應(yīng)的行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作
這篇文章主要介紹了使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python 實(shí)現(xiàn)方陣的對(duì)角線遍歷示例
今天小編就為大家分享一篇python 實(shí)現(xiàn)方陣的對(duì)角線遍歷示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python面向?qū)ο髮?shí)現(xiàn)數(shù)據(jù)分析的實(shí)例詳解
這篇文章主要通過(guò)幾個(gè)實(shí)例為大家詳細(xì)介紹了Python面向?qū)ο髮?shí)現(xiàn)數(shù)據(jù)分析的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2023-01-01

