Escolha uma biblioteca Python
Pode escolher entre três bibliotecas Python no BigQuery, com base no seu exemplo de utilização.
Exemplo de utilização | Mantido por | Descrição | |
---|---|---|---|
DataFrames do BigQuery | Processamento de dados e operações de ML baseados em Python com processamento do lado do servidor (por exemplo, através de espaços) | APIs Pandas e Scikit learn implementadas com pushdown do lado do servidor. Para mais informações, consulte o artigo Introdução aos DataFrames do BigQuery. | |
pandas-gbq | Tratamento de dados baseado em Python com a cópia de dados do lado do cliente | Biblioteca de código aberto mantida pela PyData e colaboradores voluntários | Permite-lhe mover dados para e a partir de DataFrames do Python do lado do cliente. Para mais informações, consulte a documentação e o código fonte. |
google-cloud-bigquery | Implementação, administração e consultas baseadas em SQL do BigQuery | Biblioteca de código aberto mantida pela Google | Pacote Python que envolve todas as APIs BigQuery. Para mais informações, consulte a documentação e o código fonte. |
Usar o pandas-gbq e o google-cloud-bigquery
A biblioteca pandas-gbq
oferece uma interface simples para executar consultas e carregar frames de dados do pandas para o BigQuery. É um wrapper simples
em torno da biblioteca de cliente do BigQuery,
google-cloud-bigquery
. Ambas as bibliotecas focam-se em ajudar a realizar a análise de dados através de SQL.
Instale as bibliotecas
Para usar os exemplos de código neste guia, instale o pacote pandas-gbq
e as bibliotecas cliente Python do BigQuery.
Instale os pacotes
pandas-gbq
e
google-cloud-bigquery
.
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
A executar consultas
Ambas as bibliotecas suportam a consulta de dados armazenados no BigQuery. As principais diferenças entre as bibliotecas incluem:
pandas-gbq | google-cloud-bigquery | |
---|---|---|
Sintaxe de SQL predefinida | GoogleSQL (configurável com pandas_gbq.context.dialect ) |
GoogleSQL |
Configurações de consultas | Enviado como dicionário no formato de um pedido de consulta. | Use a classe QueryJobConfig , que contém propriedades para as várias opções de configuração da API. |
Consultar dados com a sintaxe do GoogleSQL
O exemplo seguinte mostra como executar uma consulta GoogleSQL com e sem especificar explicitamente um projeto. Para ambas as bibliotecas, se não for especificado um projeto, o projeto é determinado a partir das credenciais predefinidas.
pandas-gbq
:
google-cloud-bigquery
:
Consultar dados com a sintaxe do SQL antigo
O exemplo seguinte mostra como executar uma consulta com a sintaxe SQL antiga. Consulte o guia de migração do GoogleSQL para ver orientações sobre como atualizar as suas consultas para o GoogleSQL.
pandas-gbq
:
google-cloud-bigquery
:
Usar a API BigQuery Storage para transferir resultados grandes
Use a API BigQuery Storage para acelerar os downloads de grandes resultados 15 a 31 vezes.
pandas-gbq
:
google-cloud-bigquery
:
Executar uma consulta com uma configuração
É necessário enviar uma configuração com um pedido API do BigQuery para realizar determinadas operações complexas, como executar uma consulta parametrizada ou especificar uma tabela de destino para armazenar os resultados da consulta. Em pandas-gbq
, a configuração tem de ser enviada como um dicionário no formato de um pedido de consulta.
No google-cloud-bigquery
, são fornecidas classes de configuração de tarefas, como QueryJobConfig
, que contêm as propriedades necessárias para configurar tarefas complexas.
O exemplo seguinte mostra como executar uma consulta com parâmetros com nomes.
pandas-gbq
:
google-cloud-bigquery
:
Carregar um DataFrame do pandas para uma tabela do BigQuery
Ambas as bibliotecas suportam o carregamento de dados de um pandas DataFrame para uma nova tabela no BigQuery. As principais diferenças incluem:
pandas-gbq | google-cloud-bigquery | |
---|---|---|
Suporte de tipos | Converte o DataFrame para o formato CSV antes de o enviar para a API, que não suporta valores aninhados ou de matriz. | Converte o DataFrame no formato Parquet ou CSV antes de o enviar para a API, que suporta valores aninhados e de matriz. Escolha Parquet para valores de estrutura e matriz e CSV para flexibilidade de serialização de data e hora. O parquet é a escolha predefinida. Tenha em atenção que o pyarrow , que é o motor parquet usado para enviar os dados do DataFrame para a API BigQuery, tem de estar instalado para carregar o DataFrame para uma tabela. |
Carregue configurações | Opcionalmente, pode especificar um esquema de tabela). | Use a classe LoadJobConfig , que contém propriedades para as várias opções de configuração da API. |
pandas-gbq
:
google-cloud-bigquery
:
google-cloud-bigquery
requer a biblioteca pyarrow
para serializar
um pandas DataFrame num ficheiro Parquet.
Instale o pacote pyarrow
:
pip install pyarrow
Funcionalidades não suportadas pelo pandas-gbq
Embora a biblioteca pandas-gbq
forneça uma interface útil para consultar dados e escrever dados em tabelas, não abrange muitas das funcionalidades da API BigQuery, incluindo, entre outras:
- Gerir conjuntos de dados, incluindo criar novos conjuntos de dados, atualizar propriedades do conjunto de dados> e eliminar conjuntos de dados
- Carregar dados para o BigQuery a partir de formatos que não sejam pandas DataFrames ou de pandas DataFrames com colunas JSON
- Gerir tabelas, incluindo listar tabelas num conjunto de dados, copiar dados de tabelas> e eliminar tabelas
- Exportar dados do BigQuery diretamente para o Cloud Storage
Resolução de problemas relacionados com erros do conjunto de ligações
Error string: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Se usar o objeto cliente do BigQuery predefinido em Python, está
limitado a um máximo de 10 threads, porque o tamanho do conjunto predefinido para o HTTPAdapter do Python
é 10. Para usar mais de 10 associações, crie um objeto personalizado.requests.adapters.HTTPAdapter
Por exemplo:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)