Usar bibliotecas de código aberto do Python
É possível usar bibliotecas Python de código aberto no BigQuery para processar dados, criar modelos de machine learning (ML) e gerenciar seus recursos de nuvem usando um código conhecido. Escolher a biblioteca certa para sua carga de trabalho pode ajudar você a escalonar com eficiência de linguagem de cliente leves para o processamento de terabytes de dados usando o mecanismo do lado do servidor do BigQuery.
| Biblioteca | Caso de uso | Tamanho máximo dos dados | Descrição |
|---|---|---|---|
bigquery-dataframes |
Processamento de dados baseado em Python e operações de ML com processamento do lado do servidor | Escalonável para conjuntos de dados de vários terabytes (pushdown do lado do servidor) | APIs do Pandas e do scikit-learn implementadas com o pushdown do lado do servidor. Para mais informações, consulte Introdução ao BigQuery DataFrames. |
pandas-gbq |
Processamento de dados baseado em Python usando uma cópia de dados do lado do cliente | Limitado pela memória do cliente | Permite mover dados de/para DataFrames do Python no lado do cliente. Para mais informações, consulte a documentação e o código-fonte. |
google-cloud-bigquery |
Implantação, administração e consultas baseadas em SQL do BigQuery | Limitado pela memória do cliente | Pacote Python que une todas as APIs BigQuery. Para mais informações, consulte a documentação e o código-fonte. |
Como usar BigQuery DataFrames, pandas-gbq e google-cloud-bigquery
A biblioteca BigQuery DataFrames (bigframes) fornece um DataFrame em Python e uma API de ML com processamento de consultas do lado do servidor. A biblioteca pandas-gbq fornece uma interface para executar consultas e
fazer upload dos DataFrames do Pandas para o BigQuery. É um wrapper fino
da biblioteca de cliente
do BigQuery,
google-cloud-bigquery.
Instalar as bibliotecas
Para usar os exemplos de código deste guia, instale os pacotes bigframes, pandas-gbq e
google-cloud-bigquery:
pip install --upgrade bigframes pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Executar consultas
As três bibliotecas são compatíveis com a consulta de dados armazenados no BigQuery. As principais diferenças entre as bibliotecas incluem:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Sintaxe SQL padrão | GoogleSQL | GoogleSQL (configurável com pandas_gbq.context.dialect) |
GoogleSQL |
| Configurações de consulta | Configurável usando os parâmetros bpd.options.bigquery ou read_gbq |
Enviada como dicionário no formato de uma solicitação 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 GoogleSQL
Na amostra a seguir, mostramos como executar uma consulta do GoogleSQL com e sem a especificação explícita de um projeto. Nas três bibliotecas, se um projeto não for especificado, ele será determinado a partir das credenciais padrão.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Como consultar dados com a sintaxe SQL legada
No exemplo a seguir, mostramos como executar uma consulta usando a sintaxe SQL legada. Consulte o guia de migração do GoogleSQL para ver orientações sobre como atualizar suas consultas para o GoogleSQL.
bigquery-dataframes
O BigQuery DataFrames não é compatível com a sintaxe SQL legada. Use a sintaxe do GoogleSQL.
pandas-gbq
google-cloud-bigquery
Como usar a API BigQuery Storage para fazer o download de resultados grandes
Use a API BigQuery Storage para acelerar os downloads de resultados grandes em 15 a 31 vezes.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Como executar uma consulta com uma configuração
O envio de uma configuração com uma solicitação de API BigQuery é necessário para executar determinadas operações complexas, como executar uma consulta parametrizada ou especificar uma tabela de destino para armazenar os resultados da consulta. No bigquery-dataframes (read_gbq) e no pandas-gbq, a
configuração precisa ser enviada como um dicionário no formato de uma solicitação de consulta.
No google-cloud-bigquery, são fornecidas classes de configuração de jobs, como QueryJobConfig, que contêm as propriedades necessárias para configurar jobs complexos.
A amostra a seguir mostra como executar uma consulta com parâmetros nomeados.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Como carregar um DataFrame do pandas para uma tabela do BigQuery
As três bibliotecas oferecem suporte ao upload de dados de um DataFrame do pandas para uma nova tabela no BigQuery. As principais diferenças incluem:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Tipo de suporte | Converte o DataFrame usando read_pandas e o grava em uma tabela usando to_gbq. |
Converte o formato DataFrame para CSV antes de enviar para a API, que não é compatível com valores aninhados ou de matriz. | Converte o DataFrame em formato Parquet ou CSV antes de enviar para a API, que é compatível com 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 padrão. Observe que pyarrow, que é o mecanismo de parquet usado para enviar os dados do DataFrame para a API BigQuery, deve estar instalado para carregar o DataFrame em uma tabela. |
| Carregar configurações | Configure o comportamento com parâmetros to_gbq, como if_exists. |
Também é possível especificar um esquema de tabela. | Use a classe LoadJobConfig, que contém propriedades para as várias opções de configuração da API. |
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
google-cloud-bigquery requer que a biblioteca pyarrow serialize
um DataFrame Pandas em um arquivo Parquet.
Instale o pacote pyarrow:
pip install pyarrow
Recursos não compatíveis com pandas-gbq e bigquery-dataframes
Embora as bibliotecas pandas-gbq e bigquery-dataframes forneçam interfaces úteis para consultar dados
e gravar dados em tabelas, elas não abrangem muitos dos
recursos da API BigQuery, incluindo, entre outros:
- Como gerenciar conjuntos de dados, incluindo a criação de novos conjuntos de dados, a atualização de propriedades do conjunto de dados e a exclusão de conjuntos de dados
- Carregar dados no BigQuery de formatos diferentes de DataFrames do pandas ou de DataFrames do pandas com colunas JSON
- Como gerenciar tabelas, incluindo listar tabelas em um conjunto de dados, copiar dados de tabelas e excluir tabelas
- Como exportar dados do BigQuery diretamente para o Cloud Storage
Como solucionar erros do pool de conexão
String de erro: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Se você usar o objeto do cliente padrão do BigQuery em Python, o limite será de 10 linhas de execução, já que o tamanho padrão do pool do Python HTTPAdapter é 10. Para usar mais de 10 conexões, crie um objeto requests.adapters.HTTPAdapter
personalizado. 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)