Usar o sistema de tipos de dados do BigQuery DataFrames
O sistema de tipos de dados do BigQuery DataFrames permite trabalhar com estruturas de dados que se alinham aos tipos de armazenamento integrados do BigQuery. Criar suas análises com base nesses tipos de dados garante uma integração perfeita e mapeamentos de tipos confiáveis em todo o data warehouse.
Mapeamentos de tipo
A tabela a seguir mostra os equivalentes de tipo de dados no BigQuery, no BigQuery DataFrames e em outras bibliotecas Python, bem como os níveis de suporte:
| Tipo de dado | BigQuery | BigQuery DataFrames | Python integrado | 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) |
| Big numeric | 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()) no pandas versão 3.0 ou mais recente e no PyArrow versão 19.0 ou mais recente. Caso contrário, as colunas JSON serão expostas como pandas.ArrowDtype(db_dtypes.JSONArrowType()). Esse recurso está na visualização. |
Sem suporte | json_() (Pré-lançamento) |
| Geografia | GEOGRAPHY |
Geopandas.array.GeometryDtype()Compatível apenas com to_pandas(). |
Sem suporte | Sem suporte |
| Timedelta | Sem suporte | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversões de tipos
Quando usado com dados locais, o BigQuery DataFrames converte os tipos de dados nos equivalentes do BigQuery DataFrames sempre que um mapeamento de tipo é definido, conforme mostrado no exemplo a seguir:
O PyArrow dita 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 exato de Arrow depende das versões da biblioteca. Os ambientes mais antigos
normalmente usam db_dtypes.JSONArrowType() para compatibilidade, que é um tipo de extensão
Arrow que atua como um wrapper leve em torno de pa.string(). Por outro lado,
as 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 integrado 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 diretamente valores timedelta em BigQuery DataFrames e
objetos Series, conforme mostrado no exemplo a seguir:
Ao contrário do pandas, o BigQuery DataFrames só aceita valores timedelta com
precisão de microssegundos. Se os dados incluírem nanossegundos, arredonde-os para
evitar possíveis exceções, como mostrado no exemplo a seguir:
Use 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 do 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 dentro desses tipos.
Acessador de lista
O objeto ListAccessor pode ajudar você 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
estruturas. O objeto de acesso 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, pule a chamada de struct, como mostrado no exemplo a seguir:
No entanto, é uma prática recomendada 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
- Aprenda mais sobre os 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.