Utilizzare il sistema di tipi di dati BigQuery DataFrames
Il sistema di tipi di dati BigQuery DataFrames si basa sui tipi di dati BigQuery. Questo design garantisce un'integrazione e un allineamento perfetti con il data warehouseGoogle Cloud , riflettendo i tipi integrati utilizzati per l'archiviazione dei dati in BigQuery.
Mappature dei tipi
La seguente tabella mostra gli equivalenti dei tipi di dati in BigQuery, BigQuery DataFrames e altre librerie Python, nonché i relativi livelli di supporto:
Tipo di dati | BigQuery | BigQuery DataFrames | Funzione integrata di Python | PyArrow |
---|---|---|---|---|
Booleano | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Numero intero | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Numero in virgola mobile | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
Stringa | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Byte | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Data | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Ora | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Data/ora | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Timestamp | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime con fuso orario |
timestamp("us", tz="UTC") |
Numerico | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
Numerico grande | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Elenco |
ARRAY <T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
Struct | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
JSON | JSON |
pandas.ArrowDtype(pyarrow.json_(pa.string()) nella versione 3.0 o successive di pandas e nella versione 19.0 o successive di PyArrow; in caso contrario, le colonne JSON vengono esposte come pandas.ArrowDtype(db_dtypes.JSONArrowType()) . Questa funzionalità è in anteprima. |
Non supportata | json_() (anteprima) |
Area geografica | GEOGRAPHY |
Geopandas.array.GeometryDtype() Supportato solo da to_pandas() . |
Non supportata | Non supportata |
Timedelta | Non supportata | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversioni dei tipi
Se utilizzato con dati locali, BigQuery DataFrames converte i tipi di dati nei rispettivi equivalenti BigQuery DataFrames ovunque sia definita una mappatura dei tipi, come mostrato nell'esempio seguente:
PyArrow determina il comportamento in caso di discrepanze tra i tipi di dati equivalenti. In rari casi in cui la funzione di tipo integrata di Python si comporta in modo diverso dalla sua controparte PyArrow, BigQuery DataFrames in genere preferisce il comportamento di PyArrow per garantire la coerenza.
Il seguente esempio di codice utilizza l'operazione datetime.date + timedelta
per
mostrare che, a differenza della libreria datetime di Python che restituisce ancora un'istanza di data, BigQuery DataFrames segue il comportamento di PyArrow restituendo
un'istanza di timestamp:
Tipi speciali
Le sezioni seguenti descrivono i tipi di dati speciali utilizzati da BigQuery DataFrames.
JSON
In BigQuery DataFrames, le colonne che utilizzano il formato JSON di BigQuery (uno standard leggero) sono rappresentate da pandas.ArrowDtype
. Il tipo di freccia sottostante esatto dipende dalle versioni della libreria. Gli ambienti precedenti
in genere utilizzano db_dtypes.JSONArrowType()
per la compatibilità, che è un tipo
di estensione Arrow che funge da wrapper leggero per pa.string()
. Al contrario,
le configurazioni più recenti (pandas 3.0 e versioni successive e PyArrow 19.0 e versioni successive) utilizzano la rappresentazione pa.json_(pa.string())
più recente.
timedelta
Il tipo timedelta
non ha un equivalente diretto all'interno del sistema di tipi nativi di BigQuery. Per gestire i dati di durata, BigQuery DataFrames utilizza il tipo INT64
come formato di archiviazione sottostante nelle tabelle BigQuery. Puoi aspettarti che i risultati dei tuoi calcoli siano coerenti con il comportamento che ti aspetteresti da operazioni equivalenti eseguite con la libreria pandas.
Puoi caricare direttamente i valori timedelta
in BigQuery DataFrames e
negli oggetti Series
, come mostrato nell'esempio seguente:
A differenza di pandas, BigQuery DataFrames supporta solo i valori timedelta
con
precisione al microsecondo. Se i dati includono nanosecondi, devi arrotondarli per
evitare potenziali eccezioni, come mostrato nell'esempio seguente:
Puoi utilizzare la funzione bigframes.pandas.to_timedelta
per trasmettere un oggetto Series
BigQuery DataFrames al tipo timedelta
, come mostrato nell'esempio seguente:
Quando carichi dati contenenti valori timedelta
in una tabella BigQuery, i valori vengono convertiti in microsecondi e archiviati nelle colonne INT64
. Per
conservare le informazioni sul tipo, BigQuery DataFrames aggiunge la
stringa #microseconds
alle descrizioni di queste colonne. Alcune operazioni,
come l'esecuzione di query SQL e le chiamate UDF, non conservano le descrizioni delle colonne e le informazioni sul tipo timedelta
vengono perse dopo il completamento di queste operazioni.
Strumenti per i tipi composti
Per alcuni tipi compositi, BigQuery DataFrames fornisce strumenti che consentono di accedere ed elaborare i valori elementari all'interno di questi tipi.
List accessor
L'oggetto ListAccessor
può aiutarti a eseguire operazioni su ogni elemento dell'elenco
utilizzando la proprietà list dell'oggetto Series
, come mostrato nell'esempio
seguente:
Funzione di accesso a struct
L'oggetto StructAccessor
può accedere ed elaborare i campi in una serie di
struct. L'oggetto di accesso all'API è series.struct
, come mostrato
nell'esempio seguente:
Se il campo struct
a cui prevedi di accedere non è ambiguo rispetto ad altre proprietà Series
, puoi saltare la chiamata a struct
, come mostrato nell'esempio seguente:
Tuttavia, è consigliabile utilizzare struct
per accedere ai campi, perché
rende il codice più facile da comprendere e meno soggetto a errori.
Funzione di accesso stringa
Puoi accedere all'oggetto StringAccessor
con la proprietà str
in un oggetto Series
, come mostrato nell'esempio seguente:
Accessor per l'area geografica
BigQuery DataFrames fornisce un oggetto GeographyAccessor
che condivide API simili alla struttura GeoSeries fornita dalla libreria GeoPandas. Puoi richiamare l'oggetto GeographyAccessor
con la proprietà geo
su un oggetto Series
, come mostrato nell'esempio seguente:
Passaggi successivi
- Scopri come utilizzare BigQuery DataFrames.
- Scopri di più su sessioni e I/O di BigQuery DataFrames.
- Scopri come visualizzare i grafici utilizzando BigQuery DataFrames.
- Esplora il riferimento API BigQuery DataFrames.