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 integração e alinhamento perfeitos com o Trusted Cloud by S3NS data warehouse, refletindo os tipos integrados usados para armazenamento de dados no BigQuery.
Mapeamentos de tipo
A tabela a seguir mostra equivalentes de tipos de dados no BigQuery, no DataFrames do BigQuery e em outras bibliotecas Python, além dos 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) |
Número grande | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
List |
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 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 DataFrames do BigQuery converte tipos de dados nos equivalentes do DataFrames do BigQuery 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 DataFrames do BigQuery 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 pelos DataFrames do BigQuery.
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 do Arrow depende das versões da biblioteca. Ambientes mais antigos geralmente usam db_dtypes.JSONArrowType()
para compatibilidade, que é um tipo de extensão do Arrow que funciona 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 nativos do BigQuery. Para gerenciar dados de duração, o DataFrames do BigQuery usa o tipo INT64
como formato de armazenamento nas tabelas do BigQuery. Os resultados dos seus 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 DataFrames do BigQuery e objetos Series
, conforme mostrado no exemplo a seguir:
Ao contrário do pandas, o DataFrames do BigQuery 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:
Você pode usar a função bigframes.pandas.to_timedelta
para converter um objeto Series
do DataFrames do BigQuery 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 DataFrames do BigQuery 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 alguns tipos compostos, o BigQuery DataFrames oferece ferramentas que permitem acessar e processar os valores elementares nesses tipos.
Assistente de acesso à lista
O objeto ListAccessor
pode ajudar você a realizar operações em cada elemento da lista
usando a propriedade "list" do objeto Series
, como 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 à 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
, conforme mostrado no exemplo a seguir:
No entanto, a 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 oferece um objeto GeographyAccessor
que compartilha APIs semelhantes com a estrutura GeoSeries fornecida pela biblioteca GeoPandas. Você
pode invocar o objeto GeographyAccessor
com a propriedade geo
em um objeto Series
, conforme mostrado no exemplo a seguir:
A seguir
- Saiba como usar o BigQuery DataFrames.
- Saiba mais sobre 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.