Usar o sistema de tipos de dados do BigQuery DataFrames
O sistema de tipos de dados do BigQuery DataFrames é criado com base nos tipos de dados do BigQuery. Esse design garante a integração total e o alinhamento com o Google Cloud data warehouse, refletindo os tipos integrados usados para armazenamento de dados no BigQuery.
Mapeamentos de tipo
A tabela a seguir mostra os equivalentes de tipo de dados no BigQuery, no BigQuery DataFrames e em outras bibliotecas do Python, bem como os níveis de suporte deles:
| Tipo de dado | BigQuery | BigQuery DataFrames | Integrado ao Python | PyArrow |
|---|---|---|---|---|
| Booleano | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
| Número inteiro | INT64 |
pandas.Int64Dtype() |
int |
int64() |
| Ponto 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") |
| Carimbo de data/hora | 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) |
| List<T> | 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 mais recente do pandas e na versão 19.0 ou mais recente do PyArrow. Caso contrário, as colunas JSON são expostas como pandas.ArrowDtype(db_dtypes.JSONArrowType()). Esse recurso está na visualização. |
Indisponível | json_() (pré-lançamento) |
| Geografia | GEOGRAPHY |
Geopandas.array.GeometryDtype()Com suporte apenas para to_pandas(). |
Indisponível | Indisponível |
| Timedelta | Indisponível | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversões de tipos
Quando usado com dados locais, o BigQuery DataFrames converte tipos de dados nos equivalentes do BigQuery DataFrames sempre que um mapeamento de tipo é definido, conforme mostrado no exemplo a seguir:
O PyArrow determina o comportamento quando há discrepâncias entre os equivalentes de tipo de dados. Em casos raros em que o tipo integrado do Python funciona de maneira diferente da contraparte do PyArrow, o BigQuery DataFrames geralmente favorece o comportamento do PyArrow para garantir a consistência.
O exemplo de código a seguir usa a operação datetime.date + timedelta para mostrar que, ao contrário da biblioteca datetime do Python, que ainda retorna uma instância de data, o BigQuery DataFrames segue o comportamento do PyArrow retornando uma instância de carimbo de data/hora:
Tipos especiais
As seções a seguir descrevem os tipos de dados especiais usados pelo BigQuery DataFrames.
JSON
No BigQuery DataFrames, as colunas que usam o formato
JSON
do BigQuery (um padrão leve) são representadas por pandas.ArrowDtype. O tipo de seta exato depende das versões da biblioteca. Ambientes mais antigos normalmente usam db_dtypes.JSONArrowType() para compatibilidade, que é um tipo de extensão de seta que atua como um wrapper leve em torno de pa.string(). Em contraste, configurações mais recentes (pandas 3.0 e versões mais recentes e PyArrow 19.0 e versões mais recentes) usam a representação pa.json_(pa.string()) mais recente.
timedelta
O tipo timedelta não tem um equivalente direto no sistema de tipos integrados do BigQuery. Para gerenciar dados de duração, o BigQuery DataFrames usa o tipo INT64 como o formato de armazenamento subjacente nas tabelas do BigQuery. Os resultados dos cálculos serão consistentes com o comportamento esperado de operações equivalentes realizadas com a biblioteca pandas.
É possível carregar valores timedelta diretamente em objetos do BigQuery DataFrames e Series, conforme mostrado no exemplo a seguir:
Ao contrário do pandas, o BigQuery DataFrames só oferece suporte a valores timedelta com precisão de microssegundos. Se os dados incluírem nanossegundos, será necessário arredondá-los para evitar possíveis exceções, conforme mostrado no exemplo a seguir:
É possível usar a função bigframes.pandas.to_timedelta para converter um
objeto Series do BigQuery DataFrames no tipo timedelta, conforme mostrado
no exemplo a seguir:
Quando você carrega dados que contêm valores timedelta em uma tabela do BigQuery, os valores são convertidos em microssegundos e armazenados em colunas INT64. Para preservar as informações de tipo, o BigQuery DataFrames anexa a string #microseconds às descrições dessas colunas. Algumas operações, como execuções de consulta SQL e invocações de UDF, não preservam as descrições de colunas, e as informações de tipo timedelta são perdidas após a conclusão dessas operações.
Ferramentas para tipos compostos
Para determinados tipos compostos, o BigQuery DataFrames oferece ferramentas que permitem acessar e processar os valores elementares nesses tipos.
Acessador de lista
O objeto ListAccessor pode ajudar a realizar operações em cada elemento da lista usando a propriedade de lista do objeto Series, conforme mostrado no exemplo a seguir:
Acessador de struct
O objeto StructAccessor pode acessar e processar campos em uma série de structs. O objeto acessador da API é series.struct, conforme mostrado no exemplo a seguir:
Se o campo struct que você planeja acessar não for ambíguo em relação a outras propriedades Series, é possível pular a chamada struct, conforme mostrado no exemplo a seguir:
No entanto, é recomendável usar struct para acessar campos, porque isso facilita a compreensão do código e reduz a probabilidade de erros.
Acessador de string
É possível acessar o objeto StringAccessor com a propriedade str em um objeto Series, conforme mostrado no exemplo a seguir:
Acessador de geografia
O BigQuery DataFrames fornece um objeto GeographyAccessor que compartilha APIs semelhantes com a estrutura GeoSeries fornecida pela biblioteca GeoPandas. É possível invocar o objeto GeographyAccessor com a propriedade geo em um objeto Series, conforme mostrado no exemplo a seguir:
A seguir
- Saiba mais sobre o BigQuery DataFrames.
- Saiba mais sobre as sessões e E/S do BigQuery DataFrames.
- Saiba como visualizar gráficos usando o BigQuery DataFrames.
- Confira a referência da API BigQuery DataFrames.