Utilizza librerie Python open source
Puoi utilizzare le librerie Python open source in BigQuery per elaborare i dati, creare modelli di machine learning (ML) e gestire le tue risorse cloud utilizzando un codice familiare. La scelta della libreria giusta per il tuo workload può aiutarti a scalare in modo efficiente da script lato client leggeri all'elaborazione di terabyte di dati utilizzando il motore lato server di BigQuery.
| Raccolta | Caso d'uso | Quantità massima di dati | Descrizione |
|---|---|---|---|
bigquery-dataframes |
Trattamento dati basato su Python e operazioni di ML con elaborazione lato server | Scalabile per set di dati di più terabyte (pushdown lato server) | API Pandas e scikit-learn implementate con pushdown lato server. Per saperne di più, consulta Introduzione a BigQuery DataFrames. |
pandas-gbq |
Trattamento dati basato su Python utilizzando la copia dei dati lato client | Limitata dalla memoria del client | Consente di spostare i dati da e verso i DataFrame Python sul lato client. Per saperne di più, consulta la documentazione e il codice sorgente. |
google-cloud-bigquery |
Deployment, amministrazione e query basate su SQL di BigQuery | Limitata dalla memoria del client | Pacchetto Python che aggrega tutte le API BigQuery. Per saperne di più, consulta la documentazione e il codice sorgente. |
Utilizzo di BigQuery DataFrames, pandas-gbq e google-cloud-bigquery
La libreria BigQuery DataFrames (bigframes) fornisce un'API DataFrame e ML pythonica con elaborazione delle query lato server. La libreria pandas-gbq fornisce un'interfaccia per l'esecuzione di query e il caricamento di DataFrame pandas in BigQuery. È un wrapper sottile attorno alla libreria client di BigQuery, google-cloud-bigquery.
Installa le librerie
Per utilizzare gli esempi di codice in questa guida, installa i pacchetti bigframes, pandas-gbq e google-cloud-bigquery:
pip install --upgrade bigframes pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Query in corso
Tutte e tre le librerie supportano l'esecuzione di query sui dati archiviati in BigQuery. Le differenze principali tra le librerie includono:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Sintassi SQL predefinita | GoogleSQL | GoogleSQL (configurabile con pandas_gbq.context.dialect) |
GoogleSQL |
| Configurazioni delle query | Configurabile utilizzando i parametri bpd.options.bigquery o read_gbq |
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 GoogleSQL
L'esempio seguente mostra come eseguire una query GoogleSQL con e senza specificare esplicitamente un progetto. Per tutte e tre le librerie, se non viene specificato un progetto, questo verrà determinato dalle credenziali predefinite.
bigquery-dataframes
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 la guida alla migrazione a GoogleSQL per indicazioni su come aggiornare le query a GoogleSQL.
bigquery-dataframes
BigQuery DataFrames non supporta la sintassi SQL precedente. Utilizza invece la sintassi GoogleSQL.
pandas-gbq
google-cloud-bigquery
Utilizzo dell'API BigQuery Storage per scaricare risultati di grandi dimensioni
Utilizza l'API BigQuery Storage per velocizzare i download di risultati di grandi dimensioni da 15 a 31 volte.
bigquery-dataframes
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 per archiviare i risultati della query. In bigquery-dataframes (read_gbq) e pandas-gbq, la configurazione deve essere inviata come dizionario nel formato di una richiesta di query.
In google-cloud-bigquery, sono fornite classi di configurazione dei job, come QueryJobConfig, che contengono le proprietà necessarie per configurare job complessi.
L'esempio seguente mostra come eseguire una query con parametri denominati.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Caricamento di un DataFrame pandas in una tabella BigQuery
Tutte e tre le librerie supportano il caricamento di dati da un DataFrame pandas in una nuova tabella in BigQuery. Le differenze principali includono:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Supporto dei tipi | Converte il DataFrame utilizzando read_pandas e lo scrive in una tabella utilizzando to_gbq. |
Converte il DataFrame in formato CSV prima di inviarlo all'API, che non supporta valori nidificati o di array. | Converte il DataFrame in formato Parquet o CSV prima di inviarlo all'API, che supporta valori nidificati e array. Scegli Parquet per i valori di struct e array e CSV per la flessibilità di serializzazione di date e ore. Parquet è la scelta predefinita. Tieni presente che pyarrow, ovvero il motore parquet utilizzato per inviare i dati del DataFrame all'API BigQuery, deve essere installato per caricare il DataFrame in una tabella. |
| Configurazioni di caricamento | Configura il comportamento con i parametri to_gbq, ad esempio if_exists. |
Facoltativamente, puoi specificare uno schema della tabella. | Utilizza la classe LoadJobConfig, che contiene le proprietà per le varie opzioni di configurazione dell'API. |
bigquery-dataframes
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:
pip install pyarrow
Funzionalità non supportate da pandas-gbq e bigquery-dataframes
Sebbene le librerie pandas-gbq e bigquery-dataframes forniscano interfacce utili per eseguire query sui dati e scriverli nelle tabelle, non coprono molte delle funzionalità dell'API BigQuery, tra cui, a titolo esemplificativo:
- Gestione dei set di dati, tra cui la creazione di nuovi set di dati, l'aggiornamento delle proprietà dei set di dati e l'eliminazione dei set di dati
- Caricamento dei dati in BigQuery da formati diversi dai DataFrame pandas o dai DataFrame pandas con colonne JSON
- Gestione delle tabelle, tra cui elenco delle tabelle in un set di dati, copia dei dati delle tabelle ed eliminazione delle tabelle
- Esportazione dei dati di BigQuery direttamente in Cloud Storage
Risoluzione dei problemi 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 perché la dimensione predefinita del pool per HTTPAdapter Python è 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)