Use o sistema de tipos de dados do BigQuery DataFrames
O sistema de tipos de dados do BigQuery DataFrames baseia-se nos tipos de dados do BigQuery. Este design garante uma integração perfeita e o alinhamento com o Trusted Cloud by S3NS armazém de dados, refletindo os tipos incorporados usados para o armazenamento de dados no BigQuery.
Mapeamentos de tipos
A tabela seguinte mostra os equivalentes dos tipos de dados no BigQuery, nos DataFrames do BigQuery e noutras bibliotecas Python, bem como os respetivos níveis de suporte:
Tipo de dados | BigQuery | DataFrames do BigQuery | Python integrado | PyArrow |
---|---|---|---|---|
Booleano | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Número inteiro | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Flutuante | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
String | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Bytes | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Data | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Hora | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Data/hora | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Indicação de tempo | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime com fuso horário |
timestamp("us", tz="UTC") |
Numérico | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
Numérico grande | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Lista |
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()) na versão 3.0 ou posterior do pandas e na versão 19.0 ou posterior do PyArrow; caso contrário, as colunas JSON são expostas como pandas.ArrowDtype(db_dtypes.JSONArrowType()) . Esta funcionalidade está em pré-visualização. |
Não suportado | json_() (Pré-visualizar) |
Geografia | GEOGRAPHY |
Geopandas.array.GeometryDtype() Apenas suportado por to_pandas() . |
Não suportado | Não suportado |
Timedelta | Não suportado | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversões de tipo
Quando usados com dados locais, os DataFrames do BigQuery convertem os tipos de dados nos respetivos equivalentes dos DataFrames do BigQuery sempre que um mapeamento de tipos estiver definido, conforme mostrado no exemplo seguinte:
O PyArrow determina o comportamento quando existem discrepâncias entre os equivalentes dos tipos de dados. Em casos raros em que as funções de tipo incorporadas do Python funcionam de forma diferente da respetiva contrapartida do PyArrow, os DataFrames do BigQuery favorecem geralmente o comportamento do PyArrow para garantir a consistência.
O exemplo de código seguinte usa a operação datetime.date + timedelta
para mostrar que, ao contrário da biblioteca datetime do Python que continua a devolver uma instância de data, o BigQuery DataFrames segue o comportamento do PyArrow devolvendo uma instância de data/hora:
Tipos especiais
As secções seguintes descrevem os tipos de dados especiais que os DataFrames do BigQuery usam.
JSON
Nos DataFrames do BigQuery, as colunas que usam o formato JSON do BigQuery (uma norma simples) são representadas por pandas.ArrowDtype
. O tipo de seta subjacente exato depende das versões da sua biblioteca. Os ambientes mais antigos usam normalmente db_dtypes.JSONArrowType()
para compatibilidade, que é um tipo de extensão Arrow que funciona como um wrapper simples em torno de pa.string()
. Por outro lado, as configurações mais recentes (pandas 3.0 e posteriores, e PyArrow 19.0 e posteriores) usam a representação pa.json_(pa.string())
mais recente.
timedelta
O tipo timedelta
não tem um equivalente direto no sistema de tipos nativos do BigQuery. Para gerir dados de duração, os DataFrames do BigQuery usam o tipo INT64
como o formato de armazenamento subjacente nas tabelas do BigQuery. Pode esperar que os resultados dos seus cálculos sejam consistentes com o comportamento que esperaria de operações equivalentes realizadas com a biblioteca pandas.
Pode carregar diretamente valores timedelta
em objetos e
Series
DataFrames do BigQuery, conforme mostrado no exemplo seguinte:
Ao contrário do pandas, os DataFrames do BigQuery só suportam valores timedelta
com precisão de microssegundos. Se os seus dados incluírem nanosegundos, tem de arredondá-los para evitar potenciais exceções, conforme mostrado no exemplo seguinte:
Pode usar a função bigframes.pandas.to_timedelta
para converter um objeto Series
BigQuery DataFrames no tipo timedelta
, conforme mostrado no exemplo seguinte:
Quando carrega dados que contêm valores timedelta
para uma tabela do BigQuery, os valores são convertidos em microssegundos e armazenados em colunas INT64
. Para preservar as informações de tipo, a app BigQuery DataFrames anexa a string #microseconds
às descrições destas colunas. Algumas operações, como as execuções de consultas SQL e as invocações de UDF, não preservam as descrições das colunas, e as informações do tipo timedelta
são perdidas após a conclusão destas operações.
Ferramentas para tipos compostos
Para determinados tipos compostos, os DataFrames do BigQuery oferecem ferramentas que lhe permitem aceder e processar os valores elementares nesses tipos.
Aceder à lista
O objeto ListAccessor
pode ajudar a realizar operações em cada elemento da lista
usando a propriedade list do objeto Series
, conforme mostrado no
exemplo seguinte:
Struct accessor
O objeto StructAccessor
pode aceder e processar campos numa série de estruturas. O objeto de acesso à API é series.struct
, conforme mostrado no exemplo seguinte:
Se o campo struct
ao qual planeia aceder não for ambíguo em relação a outras propriedades Series
, pode ignorar a chamada struct
, conforme mostrado no exemplo seguinte:
No entanto, é uma prática recomendada usar struct
para aceder aos campos, porque
torna o seu código mais fácil de compreender e menos propenso a erros.
Acesso de string
Pode aceder ao objeto StringAccessor
com a propriedade str
num objeto Series
, conforme mostrado no exemplo seguinte:
Acesso à geografia
O BigQuery DataFrames fornece um objeto GeographyAccessor
que partilha APIs semelhantes com a estrutura GeoSeries fornecida pela biblioteca GeoPandas. Pode invocar o objeto GeographyAccessor
com a propriedade geo
num objeto Series
, como mostrado no exemplo seguinte:
O que se segue?
- Saiba como usar os DataFrames do BigQuery.
- Saiba mais sobre as sessões e a E/S do BigQuery DataFrames.
- Saiba como visualizar gráficos com os DataFrames do BigQuery.
- Explore a referência da API BigQuery DataFrames.