Scegli una libreria Python
Puoi scegliere fra tre librerie Python in BigQuery, in base al tuo caso d'uso.
Caso d'uso | Gestito da | Descrizione | |
---|---|---|---|
DataFrame BigQuery | Operazioni di ML e di elaborazione dei dati basate su Python con elaborazione lato server (ad esempio, utilizzando gli slot) | Le API di apprendimento di Pandas e Scikit sono implementate con una creatività push-down lato server. Per saperne di più, consulta Introduzione a BigQuery DataFrames. | |
panda-gbq | Elaborazione dei dati basata su Python con la copia dei dati lato client | Libreria open source gestita da PyData e da collaboratori volontari | Consente di spostare i dati da e verso i DataFrame 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 aggrega 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
caricando dataframe pandas in BigQuery. È un wrapper sottile
intorno alla libreria client di BigQuery,
google-cloud-bigquery
. Entrambe queste librerie sono incentrate sull'esecuzione di
l'analisi dei dati con SQL.
Installa le librerie
Per utilizzare gli esempi di codice in questa guida, installa il pacchetto pandas-gbq
e
librerie client Python di BigQuery.
Installa il
pandas-gbq
e
google-cloud-bigquery
pacchetti.
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Query in corso
Entrambe le librerie supportano l'esecuzione di query sui dati archiviati in BigQuery. Legenda le differenze tra le librerie includono:
panda-gbq | google-cloud-bigquery | |
---|---|---|
Sintassi SQL predefinita | GoogleSQL (configurabile con pandas_gbq.context.dialect ) |
GoogleSQL |
Configurazioni di 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 API. |
Esecuzione di query sui dati con la sintassi GoogleSQL
L'esempio seguente mostra come eseguire una query GoogleSQL con e senza che specifichi esplicitamente un progetto. In entrambe le librerie, se un progetto non è specificato, il progetto sarà determinato credenziali predefinite.
pandas-gbq
:
google-cloud-bigquery
:
Esecuzione di query sui dati con la sintassi SQL precedente
L'esempio seguente mostra come eseguire una query utilizzando la sintassi SQL precedente. Consulta le Guida alla migrazione di GoogleSQL per istruzioni sull'aggiornamento delle query a GoogleSQL.
pandas-gbq
:
google-cloud-bigquery
:
Utilizzo dell'API BigQuery Storage per scaricare risultati di grandi dimensioni
Usa l'API BigQuery Storage per velocizzare l'operazione download di risultati di grandi dimensioni da 15 a 31 volte.
pandas-gbq
:
google-cloud-bigquery
:
Esecuzione di una query con una configurazione
È obbligatorio inviare una configurazione con una richiesta API BigQuery
eseguire determinate operazioni complesse, come l'esecuzione di una query con parametri
specificando 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 classi di configurazione dei job, ad esempio
QueryJobConfig
,
che contengono le proprietà necessarie per configurare job complessi.
L'esempio seguente 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 di dati da un DataFrame pandas a una nuova tabella in in BigQuery. Le differenze principali includono:
panda-gbq | google-cloud-bigquery | |
---|---|---|
Tipo di supporto | Converte il DataFrame in formato CSV prima dell'invio all'API, che non supporta valori nidificati o array. | Converte il DataFrame nel formato Parquet o CSV prima dell'invio all'API, che supporta valori nidificati e array. Scegli Parquet per i valori di struct e array e CSV per la flessibilità della serializzazione di date e ore. 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 il DataFrame in una tabella. |
Carica configurazioni | Facoltativamente, puoi specificare uno schema della tabella. | Utilizza la classe LoadJobConfig , che contiene le proprietà per le varie opzioni di configurazione API. |
pandas-gbq
:
google-cloud-bigquery
:
google-cloud-bigquery
richiede la libreria pyarrow
per la serializzazione
un DataFrame pandas in un file Parquet.
Installa il pacchetto pyarrow
:
pip install pyarrow
Funzionalità non supportate da pandas-gbq
Sebbene la libreria pandas-gbq
fornisca un'interfaccia utile per l'esecuzione di query sui dati,
e scrivere dati nelle tabelle, non copre molte delle
Funzionalità dell'API BigQuery, incluse, a titolo esemplificativo:
- Gestire i set di dati, tra cui creando nuovi set di dati, aggiornando le proprietà del set di dati, ed eliminare set di dati
- Caricamento di dati in BigQuery da diversi da Pandas DataFrames o da Pandas DataFrames con JSON colonne
- Gestire le tabelle, tra cui elencare le tabelle in un set di dati, copiare i dati delle tabelle, ed eliminando le 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,
limitato a un massimo di 10 thread poiché la dimensione predefinita del pool per HTTPAdapter Python
è 10. Per utilizzare più di 10 connessioni, crea una requests.adapters.HTTPAdapter
personalizzata
. 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)