Scegli una libreria Python
Puoi scegliere fra tre librerie Python in base al tuo caso d'uso.
Caso d'uso | Gestito da | Descrizione | |
---|---|---|---|
DataFrame BigQuery | Operazioni di machine learning e elaborazione dati basate su Python con elaborazione lato server (ad esempio, l'utilizzo di slot) | Pandas e Scikit imparano a utilizzare le API implementate con il push-down lato server. Per saperne di più, consulta Introduzione a BigQuery DataFrames. | |
panda-gbq | Elaborazione dati basata su Python utilizzando la copia dei dati lato client | Libreria open source gestita da PyData e dai collaboratori volontari | Consente di spostare i dati da e verso DataFrames Python sul lato client. Per ulteriori informazioni, consulta la documentazione e il codice sorgente. |
google-cloud-bigquery | Deployment, amministrazione e query basate su SQL di BigQuery | Libreria open source gestita da Google | Pacchetto Python che esegue il wrapping di tutte le API BigQuery. Per ulteriori informazioni, consulta la documentazione e il codice sorgente. |
Utilizzo di pandas-gbq e google-cloud-bigquery
La libreria pandas-gbq
offre un'interfaccia semplice per l'esecuzione di query e il caricamento dei dataframe dei panda in BigQuery. È un wrapper sottile
tutto intorno alla libreria client di BigQuery,
google-cloud-bigquery
. Entrambe queste librerie sono pensate per
l'analisi dei dati tramite SQL.
Installa le librerie
Per utilizzare gli esempi di codice in questa guida, installa il pacchetto pandas-gbq
e le librerie client Python di BigQuery.
PIP
Installa i pacchetti pandas-gbq
e google-cloud-bigquery
.
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Conda
Installa i pacchetti
pandas-gbq
e
google-cloud-bigquery
Conda dal canale conda-forge
gestito dalla community.
conda install -c conda-forge pandas-gbq google-cloud-bigquery
Esecuzione delle query in corso…
Entrambe le librerie supportano l'esecuzione di query sui dati archiviati in BigQuery. Le principali differenze tra le librerie includono:
panda-gbq | google-cloud-bigquery | |
---|---|---|
Sintassi SQL predefinita | GoogleSQL (configurabile con pandas_gbq.context.dialect ) |
GoogleSQL |
Configurazioni delle query | Inviato come dizionario nel formato di una richiesta di query. | Utilizza la classe QueryJobConfig , che contiene le proprietà per le varie opzioni di configurazione dell'API. |
Esecuzione di query sui dati con la sintassi di GoogleSQL
Il seguente esempio mostra come eseguire una query GoogleSQL con e senza specificare esplicitamente un progetto. Per entrambe le librerie, se un progetto non è specificato, verrà determinato in base alle credenziali predefinite.
pandas-gbq
:
google-cloud-bigquery
:
Esecuzione di query sui dati con la sintassi SQL precedente
Il seguente esempio mostra come eseguire una query utilizzando la sintassi SQL precedente. Consulta la guida alla migrazione da GoogleSQL per indicazioni su come aggiornare le query a GoogleSQL.
pandas-gbq
:
google-cloud-bigquery
:
Utilizzo dell'API BigQuery Storage per scaricare risultati di grandi dimensioni
Utilizza l'API BigQuery Storage per accelerare da 15 a 31 volte i download di risultati di grandi dimensioni.
pandas-gbq
:
google-cloud-bigquery
:
Esecuzione di una query con una configurazione
L'invio di una configurazione con una richiesta API BigQuery è necessario per eseguire determinate operazioni complesse, come l'esecuzione di una query con parametri o la specifica di una tabella di destinazione in cui archiviare i risultati della query. In pandas-gbq
, la configurazione deve essere inviata come dizionario nel formato di una richiesta di query.
In google-cloud-bigquery
vengono fornite le classi di configurazione dei job, ad esempio
QueryJobConfig
,
che contengono le proprietà necessarie per configurare job complessi.
Il seguente esempio mostra come eseguire una query con parametri denominati.
pandas-gbq
:
google-cloud-bigquery
:
Caricamento di un DataFrame pandas in una tabella BigQuery
Entrambe le librerie supportano il caricamento dei dati da un DataFrame Pandas a una nuova tabella in BigQuery. Le differenze principali includono:
panda-gbq | google-cloud-bigquery | |
---|---|---|
Assistenza relativa al tipo | Converte il DataFrame in formato CSV prima dell'invio all'API, che non supporta valori nidificati o array. | Converte il formato DataFrame in Parquet o CSV prima dell'invio all'API, che supporta i valori nidificati e array. Scegli Parquet per i valori di struct e array e CSV per la flessibilità di serializzazione di data e ora. Parquet è la scelta predefinita. Tieni presente che pyarrow , che è il motore Parquet utilizzato per inviare i dati DataFrame all'API BigQuery, deve essere installato per caricare DataFrame in una tabella. |
Carica configurazioni | Facoltativamente, puoi specificare uno schema di tabella. | Utilizza la classe LoadJobConfig , che contiene le proprietà per le varie opzioni di configurazione dell'API. |
pandas-gbq
:
google-cloud-bigquery
:
google-cloud-bigquery
richiede la libreria pyarrow
per serializzare un DataFrame pandas in un file Parquet.
Installa il pacchetto pyarrow
:
conda install -c conda-forge pyarrow
o
pip install pyarrow
Funzionalità non supportate da pandas-gbq
Sebbene la libreria pandas-gbq
fornisca un'interfaccia utile per eseguire query e scrivere dati nelle tabelle, non copre molte delle funzionalità dell'API BigQuery, incluse, a titolo esemplificativo:
- Gestione dei set di dati, inclusa la creazione di nuovi set di dati, l'aggiornamento delle proprietà del set di dati e l'eliminazione di set di dati
- Caricamento di dati in BigQuery da formati diversi da DataFrames pandas o da DataFrames pandas con colonne JSON
- Gestione delle tabelle, tra cui elenco di tabelle in un set di dati, copia dei dati delle tabelle ed eliminazione di tabelle
- Esportazione dei dati BigQuery direttamente in Cloud Storage
Risoluzione degli errori del pool di connessioni
Stringa di errore: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Se utilizzi l'oggetto client BigQuery predefinito in Python, hai un limite massimo di 10 thread, poiché la dimensione predefinita del pool per Python HTTPAdapter è 10. Per utilizzare più di 10 connessioni, crea un oggetto requests.adapters.HTTPAdapter
personalizzato. Ad esempio:
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)