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 Google Cloud 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.