Usar DataFrames do BigQuery
O BigQuery DataFrames fornece um DataFrame e uma API de machine
learning (ML) em Python com tecnologia do mecanismo do BigQuery.
O DataFrames do BigQuery é um pacote de código aberto. Execute
pip install --upgrade bigframes
para instalar a versão mais recente.
O BigQuery DataFrames oferece três bibliotecas:
- O
bigframes.pandas
fornece uma API pandas que pode ser usada para analisar e manipular dados no BigQuery. Muitas cargas de trabalho podem ser migradas do pandas para o bigframes apenas mudando algumas importações. A APIbigframes.pandas
é escalonável para permitir o processamento de terabytes de dados do BigQuery e usa o mecanismo de consulta do BigQuery para realizar cálculos. - O
bigframes.bigquery
oferece muitas funções SQL do BigQuery que podem não ter um equivalente no pandas. - O
bigframes.ml
fornece uma API semelhante à do scikit-learn para ML. Com os recursos de ML do DataFrames do BigQuery, é possível pré-processar dados e treinar modelos neles. Você também pode encadear essas ações para criar pipelines de dados.
Funções exigidas
Para receber as permissões necessárias para concluir as tarefas neste documento, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
Usuário de jobs do BigQuery (
roles/bigquery.jobUser
) -
Usuário de sessão de leitura do BigQuery (
roles/bigquery.readSessionUser
) -
Use DataFrames do BigQuery em um notebook do BigQuery:
-
Usuário do BigQuery (
roles/bigquery.user
) -
Usuário do ambiente de execução do notebook (
roles/aiplatform.notebookRuntimeUser
) -
Criador de código (
roles/dataform.codeCreator
)
-
Usuário do BigQuery (
-
Use as funções remotas do DataFrames do BigQuery:
-
Editor de dados do BigQuery (
roles/bigquery.dataEditor
) -
Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
) -
Desenvolvedor do Cloud Functions (
roles/cloudfunctions.developer
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Leitor de objetos do Storage (
roles/storage.objectViewer
)
-
Editor de dados do BigQuery (
-
Usar modelos remotos do BigQuery DataFrames ML:
Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Além disso, ao usar funções remotas do DataFrames do BigQuery ou modelos remotos de ML do DataFrames do BigQuery, você precisa da função de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin
) se estiver usando uma conexão padrão do BigQuery ou da função de navegador (roles/browser
) se estiver usando uma conexão pré-configurada. Para evitar esse requisito, defina a opção bigframes.pandas.options.bigquery.skip_bq_connection_check
como True
. Nesse caso, a conexão (padrão ou pré-configurada) será usada sem alterações, sem qualquer existência ou verificação de permissão. Se você estiver usando a
conexão pré-configurada e pulando a verificação de conexão, verifique o
seguinte:
- A conexão é criada no local certo.
- Se você estiver usando funções remotas do BigQuery DataFrames, a conta de serviço terá o papel de invocador do Cloud Run (
roles/run.invoker
) no projeto. - Se você estiver usando modelos remotos do BigQuery DataFrames ML, a conta de serviço terá a função
Usuário da Vertex AI (
roles/aiplatform.user
) no projeto.
Quando você está executando a autenticação de usuário final em um ambiente interativo, como um notebook, REPL do Python ou a linha de comando, o DataFrames do BigQuery solicita autenticação, se necessário. Caso contrário, consulte como configurar o Application Default Credentials para vários ambientes.
Configurar opções de instalação
Depois de instalar o BigQuery DataFrames, você pode especificar as seguintes opções.
Localização e projeto
É preciso especificar o local e o projeto em que você quer usar o BigQuery DataFrames.
É possível definir o local e o projeto no notebook da seguinte maneira:
Local de processamento dos dados
O DataFrames do BigQuery foi projetado para escalonar, o que é alcançado mantendo os dados e o processamento no serviço BigQuery. No entanto, é possível transferir dados para a memória da máquina cliente chamando .to_pandas()
em um objeto DataFrame ou Series. Nesse caso, a limitação de memória da máquina cliente será aplicada.
Local da sessão
O BigQuery DataFrames usa um objeto de sessão local para gerenciar metadados internamente. Essa sessão está vinculada a um
local. O DataFrames do BigQuery usa
a multirregião US
como o local padrão, mas é possível usar
session_options.location
para definir um local diferente. Cada consulta em uma sessão é executada no local em que a sessão foi criada.
Se o usuário começar com read_gbq/read_gbq_table/read_gbq_query()
e especificar uma tabela, diretamente ou em uma instrução SQL, o DataFrames do BigQuery preencherá automaticamente bf.options.bigquery.location
com o local da tabela.
Caso queira redefinir o local dos objetos DataFrame ou Series
criados, encerre a sessão executando
bigframes.pandas.close_session()
. Depois disso, você poderá reutilizar
bigframes.pandas.options.bigquery.location
para especificar outro
local.
read_gbq()
exige que você especifique um local se o conjunto de dados que você está consultando não estiver na multirregião US
. Se você tentar ler uma tabela
de outro local, vai receber uma exceção NotFound
.
Migrar para o BigQuery DataFrames versão 2.0
A versão 2.0 do BigQuery DataFrames faz melhorias de segurança e desempenho na API BigQuery DataFrames, adiciona novos recursos e introduz mudanças significativas. Este documento descreve as mudanças e fornece orientações para a migração. Você pode aplicar essas recomendações antes de instalar a versão 2.0 usando a versão 1.x mais recente do BigQuery DataFrames.
A versão 2.0 do BigQuery DataFrames oferece os seguintes benefícios:
- Consultas mais rápidas e menos tabelas são criadas quando você executa consultas que retornam resultados ao cliente, porque
allow_large_results
usaFalse
por padrão. Isso pode reduzir os custos de armazenamento, principalmente se você usa o faturamento por bytes físicos. - Segurança aprimorada por padrão nas funções remotas implantadas pelo BigQuery DataFrames.
Instalar o BigQuery DataFrames versão 2.0
Para evitar mudanças incompatíveis, fixe uma versão específica do BigQuery DataFrames no arquivo requirements.txt
(por exemplo, bigframes==1.42.0
) ou pyproject.toml
(por exemplo, dependencies = ["bigframes = 1.42.0"]
). Quando quiser testar a versão mais recente, execute pip install --upgrade bigframes
para instalar a versão mais recente do BigQuery DataFrames.
Usar a opção allow_large_results
O BigQuery tem um limite máximo de tamanho de resposta para jobs de consulta.
A partir da versão 2.0, o BigQuery DataFrames impõe esse limite por padrão em métodos que retornam resultados ao cliente, como peek()
, to_pandas()
e to_pandas_batches()
. Se o job retornar resultados grandes, defina allow_large_results
como True
no objeto BigQueryOptions
para evitar mudanças incompatíveis. Essa opção é definida como
False
por padrão no BigQuery DataFrames versão 2.0.
import bigframes.pandas as bpd bpd.options.bigquery.allow_large_results = True
É possível substituir a opção allow_large_results
usando o parâmetro allow_large_results
em to_pandas()
e outros métodos. Exemplo:
bf_df = bpd.read_gbq(query) # ... other operations on bf_df ... pandas_df = bf_df.to_pandas(allow_large_results=True)
Usar o decorador @remote_function
A versão 2.0 do BigQuery DataFrames faz algumas mudanças no comportamento padrão do decorador @remote_function
.
Argumentos de palavra-chave são obrigatórios para parâmetros ambíguos
Para evitar a transmissão de valores a um parâmetro não intencional, o BigQuery DataFrames versão 2.0 e mais recentes exigem o uso de argumentos de palavra-chave para os seguintes parâmetros:
bigquery_connection
reuse
name
packages
cloud_function_service_account
cloud_function_kms_key_name
cloud_function_docker_repository
max_batching_rows
cloud_function_timeout
cloud_function_max_instances
cloud_function_vpc_connector
cloud_function_memory_mib
cloud_function_ingress_settings
Ao usar esses parâmetros, forneça o nome deles. Exemplo:
@remote_function( name="my_remote_function", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
Definir uma conta de serviço
A partir da versão 2.0, o BigQuery DataFrames não usa mais a conta de serviço do Compute Engine por padrão para as funções do Cloud Run que ele implanta. Para limitar as permissões da função implantada,
- Crie uma conta de serviço com permissões mínimas.
- Forneça o e-mail da conta de serviço ao parâmetro
cloud_function_service_account
do decorador@remote_function
.
Exemplo:
@remote_function( cloud_function_service_account="my-service-account@my-project.iam.gserviceaccount.com", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
Se você quiser usar a conta de serviço do Compute Engine, defina o parâmetro cloud_function_service_account
do decorador @remote_function
como "default"
. Exemplo:
# This usage is discouraged. Use only if you have a specific reason to use the # default Compute Engine service account. @remote_function(cloud_function_service_account="default", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
Definir configurações de entrada
A partir da versão 2.0, o BigQuery DataFrames define as
configurações de entrada das funções do Cloud Run que ele
implanta em "internal-only"
. Antes, as configurações de entrada eram definidas como "all"
por padrão. Para mudar as configurações de entrada, defina o parâmetro cloud_function_ingress_settings
do decorador @remote_function
.
Exemplo:
@remote_function(cloud_function_ingress_settings="internal-and-gclb", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
Usar endpoints personalizados
Em versões do BigQuery DataFrames anteriores à 2.0, se uma região não oferecesse suporte a endpoints de serviço regionais e bigframes.pandas.options.bigquery.use_regional_endpoints = True
, o BigQuery DataFrames voltaria a endpoints de localização. A versão 2.0 do BigQuery DataFrames remove esse comportamento de substituição. Para se conectar a
endpoints de localização na versão 2.0, defina a opção
bigframes.pandas.options.bigquery.client_endpoints_override
. Exemplo:
import bigframes.pandas as bpd bpd.options.bigquery.client_endpoints_override = { "bqclient": "https://LOCATION-bigquery.googleapis.com", "bqconnectionclient": "LOCATION-bigqueryconnection.googleapis.com", "bqstoragereadclient": "LOCATION-bigquerystorage.googleapis.com", }
Substitua LOCATION pelo nome do local do BigQuery a que você quer se conectar.
Usar o módulo bigframes.ml.llm
Na versão 2.0 do BigQuery DataFrames, o model_name
padrão para GeminiTextGenerator
foi atualizado para "gemini-2.0-flash-001"
. Recomendamos que você forneça um model_name
diretamente para evitar falhas se o modelo padrão mudar no futuro.
import bigframes.ml.llm model = bigframes.ml.llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
Entrada e saída
Com a biblioteca bigframes.pandas
, é possível acessar dados de várias fontes, incluindo arquivos CSV locais, arquivos do Cloud Storage, DataFrames pandas
, modelos do BigQuery e funções do BigQuery. Em seguida, é possível carregar esses dados em um DataFrame do BigQuery DataFrames. Também é possível criar tabelas do BigQuery pelo BigQuery DataFrames.
Carregar dados de uma tabela ou consulta do BigQuery
É possível criar um DataFrame com base em uma tabela ou consulta do BigQuery da seguinte maneira:
Carregar dados de um arquivo CSV
É possível criar um DataFrame com base em um arquivo CSV local ou do Cloud Storage da seguinte maneira:
Tipos de dados
O DataFrames do BigQuery oferece suporte aos seguintes dtypes numpy e pandas:
BigQuery | DataFrames do BigQuery e pandas |
---|---|
ARRAY |
pandas.ArrowDtype(pa.list_()) |
BOOL |
pandas.BooleanDtype() |
DATE |
pandas.ArrowDtype(pa.date32()) |
DATETIME |
pandas.ArrowDtype(pa.timestamp("us")) |
FLOAT64 |
pandas.Float64Dtype() |
GEOGRAPHY |
Compatível apenas com |
INT64 |
pandas.Int64Dtype() |
JSON |
pandas.ArrowDtype(pa.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()) . |
STRING |
pandas.StringDtype(storage="pyarrow") |
STRUCT |
pandas.ArrowDtype(pa.struct()) |
TIME |
pandas.ArrowDtype(pa.time64("us")) |
TIMESTAMP |
pandas.ArrowDtype(pa.timestamp("us", tz="UTC")) |
O DataFrames do BigQuery não oferece suporte aos seguintes tipos de dados do BigQuery:
NUMERIC
BIGNUMERIC
INTERVAL
RANGE
Todos os outros tipos de dados do BigQuery são mostrados como o tipo de objeto.
Manipulação de dados
As seções a seguir descrevem os recursos de manipulação de dados para
BigQuery DataFrames. Você pode encontrar as funções descritas na biblioteca bigframes.bigquery
.
API pandas
Um recurso importante do BigQuery DataFrames é que a
API bigframes.pandas
foi projetada para ser semelhante às APIs na biblioteca pandas. Esse design permite usar padrões de sintaxe conhecidos para tarefas de manipulação de dados. As operações definidas pela API BigQuery DataFrames são executadas no lado do servidor, operando diretamente nos dados armazenados no BigQuery e eliminando a necessidade de transferir conjuntos de dados para fora do BigQuery.
Para verificar quais APIs do pandas são compatíveis com o BigQuery DataFrames, consulte APIs do pandas compatíveis.
Inspecionar e manipular dados
É possível usar a API bigframes.pandas
para realizar operações de inspeção e cálculo de dados. O exemplo de código a seguir usa a biblioteca bigframes.pandas
para inspecionar a coluna body_mass_g
, calcular a média body_mass
e calcular a média body_mass
por species
:
Biblioteca do BigQuery
A biblioteca do BigQuery fornece funções SQL do BigQuery que podem não ter um equivalente no pandas. As seções a seguir apresentam alguns exemplos.
Processar valores de matriz
Você pode usar a função bigframes.bigquery.array_agg()
na biblioteca
bigframes.bigquery
para agregar valores após uma operação groupby
:
Também é possível usar as funções de matriz array_length()
e array_to_string()
.
Criar uma série de structs
É possível usar a função bigframes.bigquery.struct()
na biblioteca bigframes.bigquery
para criar uma nova série de structs com subcampos para cada coluna em um DataFrame:
Converter carimbos de data/hora em períodos Unix
Use a função bigframes.bigquery.unix_micros()
na biblioteca bigframes.bigquery
para converter carimbos de data/hora em microssegundos do Unix:
Também é possível usar as funções de tempo unix_seconds()
e unix_millis()
.
Usar a função escalar SQL
É possível usar a função bigframes.bigquery.sql_scalar()
na biblioteca bigframes.bigquery
para acessar uma sintaxe SQL arbitrária que representa uma expressão de coluna única:
Funções personalizadas do Python
Com o BigQuery DataFrames, é possível transformar suas funções personalizadas do Python em artefatos do BigQuery que podem ser executados em objetos do BigQuery DataFrames em grande escala. Com esse suporte à extensibilidade, é possível realizar operações além do que é possível com as APIs do BigQuery DataFrames e SQL. Assim, você pode aproveitar as bibliotecas de código aberto. As duas variantes desse mecanismo de extensibilidade são descritas nas seções a seguir.
Funções definidas pelo usuário (UDFs)
Com as UDFs (prévia), é possível transformar sua função personalizada do Python em uma UDF do Python. Para um exemplo de uso, consulte Criar uma UDF permanente em Python.
A criação de uma UDF nos DataFrames do BigQuery cria uma rotina do BigQuery como a UDF do Python no conjunto de dados especificado. Para um conjunto completo de parâmetros aceitos, consulte udf.
Limpar
Além de limpar os artefatos da nuvem diretamente no console Google Cloud ou com outras ferramentas, é possível limpar as UDFs do BigQuery DataFrames que foram criadas com um argumento de nome explícito usando o comandobigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
.
Requisitos
Para usar uma UDF do BigQuery DataFrames, ative a
API BigQuery
no seu projeto. Se você estiver fornecendo o parâmetro bigquery_connection
no
projeto, também será necessário ativar a
API BigQuery Connection.
Limitações
- O código na UDF precisa ser independente, ou seja, não pode conter referências a uma importação ou variável definida fora do corpo da função.
- O código na UDF precisa ser compatível com o Python 3.11, já que esse é o ambiente em que o código é executado na nuvem.
- Executar novamente o código de definição da UDF após mudanças triviais no código da função, como renomear uma variável ou inserir uma nova linha, faz com que a UDF seja recriada, mesmo que essas mudanças sejam insignificantes para o comportamento da função.
- O código do usuário fica visível para usuários com acesso de leitura às rotinas do BigQuery. Portanto, inclua conteúdo sensível com cautela.
- Um projeto pode ter até 1.000 funções do Cloud Run por vez em um local do BigQuery.
A UDF do BigQuery DataFrames implanta uma função do Python do BigQuery definida pelo usuário, e as limitações relacionadas se aplicam.
Funções remotas
Com o BigQuery DataFrames, é possível transformar as funções escalares personalizadas em funções remotas do BigQuery. Para um exemplo de uso, consulte Criar uma função remota. Para um conjunto completo de parâmetros compatíveis, consulte remote_function.
Ao criar uma função remota no DataFrames do BigQuery, você cria o seguinte:
- Uma função do Cloud Run.
- Uma conexão com o BigQuery
Por padrão, uma conexão chamada
bigframes-default-connection
é usada. Se preferir, use uma conexão pré-configurada do BigQuery. Nesse caso, a criação da conexão é ignorada. A conta de serviço da conexão padrão recebe o papel do Cloud Run (roles/run.invoker
). - Uma função remota do BigQuery que usa a função do Cloud Run criada com a conexão do BigQuery.
As conexões do BigQuery são criadas no mesmo local que a sessão do DataFrames do BigQuery, usando o nome que você informou na definição da função personalizada. Para visualizar e gerenciar conexões, faça o seguinte:
No console Google Cloud , acesse a página BigQuery.
Selecione o projeto em que você criou a função remota.
No painel Explorer, expanda o projeto e depois Conexões externas.
As funções remotas do BigQuery são criadas no conjunto de dados especificado ou em um conjunto de dados anônimo, que é um tipo de conjunto de dados oculto.
Se você não definir um nome para uma função remota durante a criação dela, o DataFrames do BigQuery vai aplicar um nome padrão que começa com o prefixo bigframes
. Para visualizar e gerenciar funções remotas criadas em um conjunto de dados especificado pelo usuário, faça o seguinte:
No console Google Cloud , acesse a página BigQuery.
Selecione o projeto em que você criou a função remota.
No painel Explorer, expanda o projeto, o conjunto de dados em que você criou a função remota e, em seguida, Rotinas.
Para conferir e gerenciar as funções do Cloud Run, faça o seguinte:
Acessar a página Cloud Run
Selecione o projeto em que você criou a função.
Filtre o Tipo de implantação de função na lista de serviços disponíveis.
Para identificar funções criadas pelo BigQuery DataFrames, procure nomes de funções com o prefixo
bigframes
.
Limpar
Além de limpar os artefatos da nuvem diretamente no console Google Cloud ou com outras ferramentas, é possível limpar as funções remotas do BigQuery criadas sem um argumento de nome explícito e as funções associadas do Cloud Run das seguintes maneiras:
- Para uma sessão do BigQuery DataFrames, use o comando
session.close()
. - Para a sessão padrão do BigQuery DataFrames, use o comando
bigframes.pandas.close_session()
. - Para uma sessão anterior com
session_id
, use o comandobigframes.pandas.clean_up_by_session_id(session_id)
.
Também é possível limpar as funções remotas do BigQuery que foram
criadas com um argumento de nome explícito e as funções associadas do
Cloud Run usando o comando
bigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
.
Requisitos
Para usar as funções remotas do DataFrames do BigQuery, ative as seguintes APIs:
- API BigQuery (
bigquery.googleapis.com
) - API BigQuery Connection (
bigqueryconnection.googleapis.com
) - API Cloud Functions (
cloudfunctions.googleapis.com
) - API Admin do Cloud Run (
run.googleapis.com
) - API Artifact Registry (
artifactregistry.googleapis.com
) - API Cloud Build (
cloudbuild.googleapis.com
) - API Compute Engine (
compute.googleapis.com
) API Cloud Resource Manager (
cloudresourcemanager.googleapis.com
)É possível evitar esse requisito definindo a opção
bigframes.pandas.options.bigquery.skip_bq_connection_check
comoTrue
. Nesse caso, a conexão (padrão ou pré-configurada) será usada sem alterações, sem verificar a existência da conexão ou as permissões dela.
Limitações
- As funções remotas levam cerca de 90 segundos para ficar disponíveis quando você as cria pela primeira vez. Outras dependências de pacote podem aumentar a latência.
- Executar novamente o código de definição da função remota após mudanças triviais no código da função e ao redor dele, por exemplo, renomear uma variável, inserir uma nova linha ou inserir uma nova célula no notebook, pode fazer com que a função remota seja recriada, mesmo que essas mudanças sejam insignificantes para o comportamento da função.
- O código do usuário fica visível para usuários com acesso de leitura às funções do Cloud Run. Portanto, inclua conteúdo sensível apenas com cautela.
- Um projeto pode ter até 1.000 funções do Cloud Run por vez em uma região. Para mais informações, consulte Cotas.
ML e IA
As seções a seguir descrevem os recursos de ML e IA para DataFrames do BigQuery. Esses recursos usam a biblioteca bigframes.ml
.
Locais ML
A biblioteca bigframes.ml
é compatível com os mesmos locais que o BigQuery ML. A previsão do modelo do BigQuery ML e outras funções de ML são aceitas em todas as regiões do BigQuery. O suporte para
treinamento de modelo varia de acordo com a região. Para mais informações, consulte
Locais do BigQuery ML.
Pré-processar dados
Crie transformadores para preparar dados para uso em estimadores (modelos) usando o módulo bigframes.ml.preprocessing e o módulo bigframes.ml.compose. O DataFrames do BigQuery oferece as seguintes transformações:
Use a classe KBinsDiscretizer no módulo
bigframes.ml.preprocessing
para agrupar dados contínuos em intervalos.Use a classe LabelEncoder no módulo
bigframes.ml.preprocessing
para normalizar os rótulos de destino como valores inteiros.Use a classe MaxAbsScaler no módulo
bigframes.ml.preprocessing
para dimensionar cada recurso para o intervalo[-1, 1]
de acordo com o valor absoluto máximo.Use a classe MinMaxScaler no módulo
bigframes.ml.preprocessing
para padronizar recursos escalonando cada recurso para o intervalo[0, 1]
.Use a classe StandardScaler no módulo
bigframes.ml.preprocessing
para padronizar recursos removendo a média e dimensionando para a variância da unidade.Use a classe OneHotEncoder no módulo
bigframes.ml.preprocessing
para transformar valores categóricos em formato numérico.Use a classe ColumnTransformer no módulo
bigframes.ml.compose
para aplicar transformadores a colunas do DataFrames.
Treinar modelos
É possível criar estimadores para treinar modelos nos DataFrames do BigQuery.
Modelos de clustering
Crie estimadores para modelos de clustering usando o módulo bigframes.ml.cluster.
- Use a classe KMeans para criar modelos de clustering K-means. Use esses modelos para segmentação de dados. Por exemplo, identificar segmentos de clientes. K-means é uma técnica de aprendizado não supervisionada, portanto, treinamento de modelo não requer rótulos ou dados de divisão para treinamento ou avaliação.
Use o módulo bigframes.ml.cluster
para criar estimadores para modelos de clustering.
O exemplo de código a seguir mostra o uso da classe bigframes.ml.cluster KMeans
para criar um modelo de clustering K-means para segmentação de dados:
Modelos de decomposição
É possível criar estimadores para modelos de decomposição usando o módulo bigframes.ml.decomposition.
- Use a classe PCA para criar modelos de análise de componentes principais (PCA, na sigla em inglês). Use esses modelos para calcular os componentes principais e usá-los para realizar uma mudança de base nos dados. Isso reduz a dimensionalidade, projetando cada ponto de dados apenas nos primeiros componentes principais. Assim, você consegue dados de dimensões menores, preservando o máximo possível da variação deles.
Modelos do conjunto
Crie estimadores para modelos de conjunto usando o módulo bigframes.ml.ensemble.
Use a classe RandomForestClassifier para criar modelos de classificador de floresta aleatória. Use esses modelos para construir várias árvores de decisão de método de aprendizado para classificação.
Use a classe RandomForestRegressor para criar modelos de regressão de floresta aleatória. Use esses modelos para construir várias árvores de decisão de método de aprendizado para regressão.
Use a classe XGBClassifier para criar modelos de classificador de árvore otimizados com gradiente. Use esses modelos para construir aditivamente várias árvores de decisão de método de aprendizado para classificação.
Use a classe XGBRegressor para criar modelos de regressão de árvore otimizada com gradiente. Use esses modelos para construir aditivamente várias árvores de decisão de método de aprendizado para regressão.
Modelos de previsão
É possível criar estimadores para modelos de previsão usando o módulo bigframes.ml.forecasting.
- Use a classe ARIMAPlus para criar modelos de previsão de série temporal.
Modelos importados
É possível criar estimadores para modelos importados usando o módulo bigframes.ml.imported.
Use a classe ONNXModel para importar modelos Open Neural Network Exchange (ONNX).
Use a classe TensorFlowModel para importar modelos do TensorFlow.
Use a classe XGBoostModel para importar modelos XGBoostModel.
Modelos lineares
Crie estimadores para modelos lineares usando o módulo bigframes.ml.linear_model.
Use a classe LinearRegression para criar modelos de regressão linear. Use esses modelos para previsão. Por exemplo, a previsão das vendas de um item em um determinado dia.
Use a classe LogisticRegression para criar modelos de regressão logística. Use esses modelos para a classificação de dois ou mais valores possíveis, por exemplo, se uma entrada é
low-value
,medium-value
ouhigh-value
.
O exemplo de código abaixo mostra o uso de bigframes.ml
para realizar as seguintes ações:
- Carregar dados do BigQuery
- Limpar e preparar dados de treinamento
- Criar e aplicar um modelo de regressão bigframes.ml.LinearRegression
Modelos de linguagem grande
É possível criar estimadores para LLMs usando o módulo bigframes.ml.llm.
Use a classe GeminiTextGenerator para criar modelos geradores de texto do Gemini. Use esses modelos para tarefas de geração de texto.
Use o módulo bigframes.ml.llm para criar estimadores para modelos de linguagem grandes (LLMs) remotos.
O exemplo de código a seguir mostra como usar a classe bigframes.ml.llm
GeminiTextGenerator
para criar um modelo do Gemini para geração de código:
Modelos remotos
Para usar modelos remotos de ML do DataFrames do BigQuery (bigframes.ml.remote
ou bigframes.ml.llm
), ative as seguintes APIs:
API Cloud Resource Manager (
cloudresourcemanager.googleapis.com
)É possível evitar esse requisito definindo a opção
bigframes.pandas.options.bigquery.skip_bq_connection_check
comoTrue
. Nesse caso, a conexão (padrão ou pré-configurada) será usada sem alterações, sem verificar a existência da conexão ou as permissões dela.
A criação de um modelo remoto no DataFrames do BigQuery cria uma conexão com o BigQuery.
Por padrão, uma conexão com o nome bigframes-default-connection
é usada. Se preferir, use uma conexão pré-configurada do BigQuery. Nesse caso, a criação da conexão é ignorada. A conta de serviço
da conexão padrão recebe o
papel de usuário da Vertex AI (roles/aiplatform.user
) no projeto.
Criar pipelines
É possível criar pipelines de ML usando o módulo bigframes.ml.pipeline. Os pipelines permitem montar várias etapas de ML para validação cruzada ao definir parâmetros diferentes. Isso simplifica o código e permite implantar etapas de pré-processamento de dados e um estimador juntos.
Use a classe Pipeline para criar um pipeline de transformações com um estimador final.
Selecionar modelos
Use o módulo bigframes.ml.model_selection para dividir os conjuntos de dados de treinamento e teste e selecionar os melhores modelos:
Use a função
train_test_split
para dividir os dados em conjuntos de treinamento e teste (avaliação), conforme mostrado no exemplo de código a seguir:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Use a classe
KFold
e o métodoKFold.split
para criar conjuntos de treinamento e teste de várias dobras para treinar e avaliar modelos, conforme mostrado no exemplo de código a seguir. Esse recurso é útil para conjuntos de dados pequenos.kf = KFold(n_splits=5) for i, (X_train, X_test, y_train, y_test) in enumerate(kf.split(X, y)): # Train and evaluate models with training and testing sets
Use a função
cross_validate
para criar automaticamente conjuntos de treinamento e teste de várias dobras, treinar e avaliar o modelo e receber o resultado de cada dobra, conforme mostrado no exemplo de código a seguir:scores = cross_validate(model, X, y, cv=5)
Otimização de desempenho
Nesta seção, apresentamos maneiras de otimizar a performance do BigQuery DataFrames.
Modo de ordenação parcial
O DataFrames do BigQuery oferece um recurso de modo de ordenação. Defina a propriedade ordering_mode
como partial
para gerar consultas mais eficientes.
O modo de ordenação partial
contrasta com o modo padrão strict
, que cria uma ordenação total em todas as linhas. Uma ordenação total torna os DataFrames do BigQuery mais compatíveis com o pandas, fornecendo acesso baseado em ordem a linhas com a propriedade DataFrame.iloc
. No entanto, a ordenação total e o índice sequencial padrão sobre essa ordenação significam que nem os filtros de coluna nem os de linha reduzem o número de bytes verificados, a menos que esses filtros sejam aplicados como parâmetros às funções read_gbq
e read_gbq_table
. Para fornecer uma ordenação total em todas as linhas do DataFrame, o BigQuery DataFrames cria um hash de todas as linhas. Isso pode resultar em uma verificação completa de dados que ignora os filtros de linha e coluna.
Definir a propriedade ordering_mode
como partial
impede que os DataFrames do BigQuery gerem uma ordenação total em todas as linhas. O modo de ordenação parcial também desativa recursos que exigem uma ordenação total em todas as linhas, como a propriedade DataFrame.iloc
.
O modo de ordenação parcial define a classe DefaultIndexKind
como um índice nulo, em vez de um índice sequencial na ordenação.
Ao filtrar um DataFrame com a propriedade ordering_mode
definida como partial
, o BigQuery DataFrames não precisa mais calcular quais linhas estão faltando no índice sequencial, gerando consultas mais rápidas e eficientes. A API BigQuery DataFrames ainda é a API pandas familiar, assim como a experiência padrão com o modo de ordenação estrita.
No entanto, o modo de ordenação parcial difere do comportamento comum do pandas. Por exemplo, ele não realiza junções implícitas por índice.
Nos modos de ordenação parcial e estrita, você paga pelos recursos do BigQuery que usa. No entanto, usar o modo de ordenação parcial pode reduzir os custos ao trabalhar com tabelas grandes em cluster e particionadas, porque os filtros de linha nas colunas de cluster e partição reduzem o número de bytes processados.
Uso
Para usar a ordenação parcial, defina a propriedade ordering_mode
como partial
antes de realizar qualquer outra operação com o BigQuery DataFrames, conforme mostrado no exemplo de código a seguir:
Como não há um índice sequencial com o modo de ordenação parcial, os DataFrames do BigQuery não relacionados não são unidos implicitamente.
Em vez disso, chame explicitamente o método DataFrame.merge
para unir dois DataFrames do BigQuery que derivam de expressões de tabela diferentes.
Os recursos Series.unique()
e Series.drop_duplicates()
não são compatíveis com o modo de ordenação parcial. Em vez disso, use o método groupby
para encontrar valores únicos desta forma:
No modo de ordenação parcial, a saída das funções DataFrame.head(n)
e Series.head(n)
não é idempotente em todas as invocações. Para baixar uma amostra pequena e arbitrária dos dados, use os métodos DataFrame.peek()
ou Series.peek()
.
Para um tutorial detalhado em que você usa a propriedade ordering_mode = "partial"
, consulte este notebook do BigQuery DataFrames que demonstra o uso do modo de ordenação parcial.
Solução de problemas
Como os DataFrames no modo de ordenação parcial nem sempre têm uma ordenação ou um índice, você pode encontrar os seguintes problemas ao usar alguns métodos compatíveis com pandas.
Erro "Pedido obrigatório"
Alguns recursos exigem uma ordenação, como as funções DataFrame.head()
e DataFrame.iloc
. Para conferir uma lista de recursos que exigem ordenação, consulte a coluna Exige ordenação em APIs pandas compatíveis.
Quando não há ordenação no objeto, a operação falha com uma mensagem OrderRequiredError
como esta:
OrderRequiredError: Op iloc requires an ordering. Use .sort_values or .sort_index to provide an ordering.
Como descrito na mensagem de erro, é possível fornecer uma ordenação usando o método
DataFrame.sort_values()
para classificar por uma ou mais colunas. Outras operações, como DataFrame.groupby()
, fornecem implicitamente uma ordenação total no grupo por chaves.
Se não for possível determinar que a ordenação é totalmente estável em todas as linhas, as operações subsequentes poderão mostrar uma mensagem AmbiguousWindowWarning
como esta:
AmbiguousWindowWarning: Window ordering may be ambiguous, this can cause unstable results.
Se a carga de trabalho puder acomodar resultados não determinísticos ou se você puder verificar manualmente que a ordenação fornecida é total, filtre a mensagem AmbiguousWindowWarning
desta forma:
Erro de índice nulo
Alguns recursos exigem um índice, como as propriedades DataFrame.unstack()
e Series.interpolate()
. Para uma lista de recursos que exigem um
índice, consulte a coluna Requer índice em APIs pandas
compatíveis.
Quando você usa uma operação que exige um índice com o modo de ordenação parcial, a operação gera uma mensagem NullIndexError
como esta:
NullIndexError: DataFrame cannot perform interpolate as it has no index. Set an index using set_index.
Como descrito na mensagem de erro, você pode fornecer um índice usando o método
DataFrame.set_index()
para classificar por uma ou mais colunas. Outras operações, como a
DataFrame.groupby()
, fornecem implicitamente um índice sobre o grupo por chaves, a menos que
o parâmetro as_index=False
seja definido.
Visualizações
A API bigframes.pandas
é um gateway para o ecossistema completo de ferramentas em Python. A API permite operações estatísticas avançadas, e é possível ver as agregações geradas pelo BigQuery DataFrames.
Também é possível alternar de um DataFrame do BigQuery DataFrames para um
pandas
com operações de amostragem integradas.
A seguir
- Saiba como gerar código do BigQuery DataFrames com o Gemini.
- Saiba como analisar downloads de pacotes do PyPI com o BigQuery DataFrames.
- Confira o código-fonte, os notebooks de exemplo e as amostras do BigQuery DataFrames no GitHub.
- Confira a referência da API BigQuery DataFrames.