Usar el sistema de tipos de datos de BigQuery DataFrames
El sistema de tipos de datos de BigQuery DataFrames se basa en los tipos de datos de BigQuery. Este diseño garantiza una integración y una alineación perfectas con elGoogle Cloud almacén de datos, lo que refleja los tipos integrados que se usan para el almacenamiento de datos en BigQuery.
Asignaciones de tipos
En la siguiente tabla se muestran los tipos de datos equivalentes en BigQuery, BigQuery DataFrames y otras bibliotecas de Python, así como sus niveles de compatibilidad:
Tipo de datos | BigQuery | BigQuery DataFrames | Python integrado | PyArrow |
---|---|---|---|---|
Booleano | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Entero | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Flotante | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
Cadena | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Bytes | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Fecha | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Hora | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Fecha y hora | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Marca de tiempo | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime con zona horaria |
timestamp("us", tz="UTC") |
Numérico | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
BigNumeric | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Lista |
ARRAY <T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
Estructura | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
JSON | JSON |
pandas.ArrowDtype(pyarrow.json_(pa.string()) en pandas 3.0 o versiones posteriores y PyArrow 19.0 o versiones posteriores. De lo contrario, las columnas JSON se mostrarán como pandas.ArrowDtype(db_dtypes.JSONArrowType()) . Esta función está en versión preliminar. |
No compatible | json_() (Vista previa) |
Geografía | GEOGRAPHY |
Geopandas.array.GeometryDtype() Solo es compatible con to_pandas() . |
No compatible | No compatible |
Timedelta | No compatible | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversiones de tipos
Cuando se usan con datos locales, BigQuery DataFrames convierte los tipos de datos a sus equivalentes de BigQuery DataFrames siempre que se defina una asignación de tipos, como se muestra en el siguiente ejemplo:
PyArrow determina el comportamiento cuando hay discrepancias entre los equivalentes de tipo de datos. En casos excepcionales en los que la función de tipo integrada de Python se comporta de forma diferente a su contraparte de PyArrow, BigQuery DataFrames suele favorecer el comportamiento de PyArrow para garantizar la coherencia.
En el siguiente ejemplo de código se usa la operación datetime.date + timedelta
para mostrar que, a diferencia de la biblioteca datetime de Python, que sigue devolviendo una instancia de fecha, BigQuery DataFrames sigue el comportamiento de PyArrow y devuelve una instancia de marca de tiempo:
Tipos especiales
En las siguientes secciones se describen los tipos de datos especiales que usa BigQuery DataFrames.
JSON
En BigQuery DataFrames, las columnas que usan el formato JSON
de BigQuery (un estándar ligero) se representan mediante pandas.ArrowDtype
. El tipo de Arrow subyacente exacto depende de las versiones de tu biblioteca. Los entornos anteriores suelen usar db_dtypes.JSONArrowType()
para la compatibilidad, que es un tipo de extensión de Arrow que actúa como un envoltorio ligero alrededor de pa.string()
. Por el contrario, las configuraciones más recientes (pandas 3.0 y versiones posteriores, y PyArrow 19.0 y versiones posteriores) utilizan la representación pa.json_(pa.string())
más reciente.
timedelta
El tipo timedelta
no tiene un equivalente directo en el sistema de tipos nativo de BigQuery. Para gestionar los datos de duración, BigQuery DataFrames utiliza el tipo INT64
como formato de almacenamiento subyacente en las tablas de BigQuery. Los resultados de los cálculos serán coherentes con el comportamiento que se espera de las operaciones equivalentes realizadas con la biblioteca pandas.
Puedes cargar directamente valores timedelta
en objetos BigQuery DataFrames y Series
, como se muestra en el siguiente ejemplo:
A diferencia de pandas, BigQuery DataFrames solo admite valores timedelta
con precisión de microsegundos. Si tus datos incluyen nanosegundos, debes redondearlos para evitar posibles excepciones, como se muestra en el siguiente ejemplo:
Puede usar la función bigframes.pandas.to_timedelta
para convertir un objeto Series
de BigQuery DataFrames al tipo timedelta
, como se muestra en el siguiente ejemplo:
Cuando cargas datos que contienen valores timedelta
en una tabla de BigQuery, los valores se convierten a microsegundos y se almacenan en columnas INT64
. Para conservar la información de tipo, BigQuery DataFrames añade la cadena #microseconds
a las descripciones de estas columnas. Algunas operaciones, como las ejecuciones de consultas SQL y las invocaciones de UDF, no conservan las descripciones de las columnas y la información de tipo timedelta
se pierde una vez completadas estas operaciones.
Herramientas para tipos compuestos
En el caso de algunos tipos compuestos, BigQuery DataFrames proporciona herramientas que te permiten acceder a los valores elementales de esos tipos y procesarlos.
Descriptor de acceso a la lista
El objeto ListAccessor
puede ayudarte a realizar operaciones en cada elemento de la lista
mediante la propiedad list del objeto Series
, como se muestra en el
siguiente ejemplo:
Descriptor de acceso de struct
El objeto StructAccessor
puede acceder a los campos de una serie de structs y procesarlos. El objeto de acceso a la API es series.struct
, como se muestra en el siguiente ejemplo:
Si el campo struct
al que quieres acceder no se confunde con otras propiedades Series
, puedes omitir la llamada a struct
, como se muestra en el siguiente ejemplo:
Sin embargo, es una práctica recomendada usar struct
para acceder a los campos, ya que
facilita la comprensión del código y reduce la probabilidad de que se produzcan errores.
Descriptor de acceso de cadena
Puedes acceder al objeto StringAccessor
con la propiedad str
en un objeto Series
, como se muestra en el siguiente ejemplo:
Acceso a la geografía
BigQuery DataFrames proporciona un objeto GeographyAccessor
que comparte APIs similares con la estructura GeoSeries proporcionada por la biblioteca GeoPandas. Puedes invocar el objeto GeographyAccessor
con la propiedad geo
en un objeto Series
, como se muestra en el siguiente ejemplo:
Siguientes pasos
- Consulta cómo usar BigQuery DataFrames.
- Consulta información sobre las sesiones y las operaciones de entrada/salida de los DataFrames de BigQuery.
- Consulta cómo visualizar gráficos con DataFrames de BigQuery.
- Consulta la referencia de la API BigQuery DataFrames.