Executar uma consulta
Neste documento, mostramos como executar uma consulta no BigQuery e entender quantos dados a consulta processará antes da execução por meio de uma simulação.
Consultas interativas x em lote
No BigQuery, é possível executar dois tipos de consultas:
- Jobs de consulta interativa, que são jobs executados pelo BigQuery sob demanda.
- Jobs de consulta em lote, que são jobs que o BigQuery aguarda para executar até que os recursos de computação inativos estejam disponíveis.
Por padrão, o BigQuery executa suas consultas como jobs de consulta interativos, que são executados o mais rápido possível. O BigQuery calcula dinamicamente o limite de consultas simultâneas com base na disponibilidade de recursos e favorece a execução de mais consultas interativas simultâneas do que consultas em lote. Quando você atinge o limite de consultas simultâneas, outras consultas aguardam em uma fila. Para mais informações, consulte filas de consulta.
O BigQuery salva os resultados da consulta em uma tabela temporária (padrão) ou permanente. Ao especificar uma tabela permanente como de destino para os resultados, você pode escolher adicionar ao final ou substituir uma tabela existente ou criar uma nova tabela com um nome exclusivo.
Funções exigidas
Para receber as permissões necessárias para executar um job de consulta, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Usuário de jobs do BigQuery (
roles/bigquery.jobUser
) no projeto. -
Leitor de dados do BigQuery (
roles/bigquery.dataViewer
) em todas as tabelas e visualizações referenciadas pela sua consulta. Para consultar visualizações, você também precisa desse papel em todas as tabelas e visualizações subjacentes. Se você estiver usando visualizações autorizadas ou conjuntos de dados autorizados, não será necessário ter acesso aos dados de origem subjacentes.
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Esses papéis predefinidos contêm as permissões necessárias para executar um job de consulta. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As permissões a seguir são necessárias para executar um job de consulta:
-
bigquery.jobs.create
no projeto em que a consulta está sendo executada, independentemente de onde os dados são armazenados. -
bigquery.tables.getData
em todas as tabelas e visualizações referenciadas pela sua consulta. Para consultar visualizações, você também precisa dessa permissão em todas as tabelas e visualizações subjacentes. Se você estiver usando visualizações autorizadas ou conjuntos de dados autorizados, não será necessário ter acesso aos dados de origem subjacentes.
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Solução de problemas
O erro a seguir ocorre quando um princípio não tem permissão para criar
jobs de consulta no projeto: Access Denied: Project [project_id]: User does not have
bigquery.jobs.create permission in project [project_id].
Resolução: confirme se você tem a permissão bigquery.jobs.create
no projeto em que está fazendo a consulta. Essa permissão é necessária além de quaisquer permissões necessárias para os dados consultados.
Para mais informações sobre as permissões do BigQuery, consulte Controle de acesso com o IAM.
Executar uma consulta interativa
Para executar uma consulta interativa, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
Clique em
Criar uma nova consulta.No editor de consultas, insira uma consulta válida do GoogleSQL.
Por exemplo, consulte o conjunto de dados públicos do BigQuery
usa_names
para determinar os nomes mais comuns nos Estados Unidos entre os anos de 1910 e 2013:SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;
Opcional: especifique a tabela de destino e a localização para os resultados da consulta:
- No editor de consultas, clique em Mais e, em seguida, em Configurações de consulta.
- Na seção Destino, marque Definir uma tabela de destino para os resultados da consulta.
- Em Conjunto de dados, insira o nome de um conjunto de dados para a
tabela de destino, por exemplo,
myProject.myDataset
. - Em ID da tabela, insira um nome para a tabela de destino, por exemplo,
myTable
. Se a tabela de destino for uma tabela, em Preferência de gravação na tabela de destino, selecione se quer adicionar ao final ou substituir a tabela com os resultados da consulta.
Se a tabela de destino for uma nova tabela, o BigQuery a criará quando você executar a consulta.
Na seção Configurações adicionais, clique no menu Local dos dados e selecione uma opção.
Neste exemplo, o conjunto de dados
usa_names
é armazenado no local multirregional EUA. Se você especificar uma tabela de destino para essa consulta, o conjunto de dados que contém a tabela de destino também precisará estar na multirregião dos EUA. Não é possível consultar um conjunto de dados em um local e gravar os resultados em uma tabela de destino em outro local.Clique em Save.
Clique em
Executar.Se você não especificar uma tabela de destino, o job de consulta gravará a saída em uma tabela temporária (cache).
Agora é possível conferir os resultados da consulta na guia Resultados do painel Resultados da consulta.
Opcional: para classificar os resultados por coluna, clique em
Abrir menu de classificação ao lado do nome da coluna e selecione uma ordem de classificação. Se o número estimado de bytes processados para a classificação for maior do que zero, o número de bytes será exibido na parte de cima do menu.Opcional: para acessar a visualização dos resultados da consulta, acesse a guia Gráfico (visualização). É possível aumentar ou diminuir o zoom do gráfico, fazer o download dele como um arquivo PNG ou alternar a visibilidade da legenda.
No painel Configuração do gráfico, você pode mudar o tipo de gráfico (linha ou barra) e configurar as medidas e dimensões dele. Os campos nesse painel são preenchidos automaticamente com a configuração inicial inferida do esquema da tabela de destino da consulta. A configuração é preservada entre as seguintes execuções de consulta no mesmo editor de consultas. Suporte a dimensões
INTEGER
,INT64
,FLOAT
FLOAT64
,NUMERIC
,BIGNUMERIC
,TIMESTAMP
,DATE
,DATETIME
eTIME
e tipos de dadosSTRING
, enquanto as medidas dão suporte a tipos de dadosINTEGER
,INT64
,FLOAT
,FLOAT64
,NUMERIC
eBIGNUMERIC
.Opcional: na guia JSON, é possível analisar os resultados da consulta no formato JSON, em que a chave é o nome da coluna e o valor é o resultado dessa coluna.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Use o comando
bq query
. No exemplo a seguir, a sinalização--use_legacy_sql=false
permite usar a sintaxe do GoogleSQL.bq query \ --use_legacy_sql=false \ 'QUERY'
Substitua QUERY por uma consulta válida do GoogleSQL. Por exemplo, consulte o conjunto de dados públicos do BigQuery
usa_names
para determinar os nomes mais comuns nos Estados Unidos entre os anos de 1910 e 2013:bq query \ --use_legacy_sql=false \ 'SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;'
O job de consulta grava a saída em uma tabela temporária (cache).
Também é possível especificar a tabela de destino e o local para os resultados da consulta. Para gravar os resultados em uma tabela existente, inclua a sinalização apropriada para adicionar ao final (
--append_table=true
) ou substituir (--replace=true
) a tabela.bq query \ --location=LOCATION \ --destination_table=TABLE \ --use_legacy_sql=false \ 'QUERY'
Substitua:
LOCATION: a região ou a multirregião da tabela de destino, por exemplo,
US
Neste exemplo, o conjunto de dados
usa_names
é armazenado no local multirregional EUA. Se você especificar uma tabela de destino para essa consulta, o conjunto de dados que contém a tabela de destino também precisará estar na multirregião dos EUA. Não é possível consultar um conjunto de dados em um local e gravar os resultados em uma tabela de destino em outro local.É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
TABLE: um nome para a tabela de destino, por exemplo,
myDataset.myTable
Se a tabela de destino for uma nova tabela, o BigQuery a criará ao executar a consulta. No entanto, é necessário especificar um conjunto de dados atual.
Se a tabela não estiver no projeto atual, adicione o ID do projeto do Google Cloud usando o formato
PROJECT_ID:DATASET.TABLE
. Por exemplo,myProject:myDataset.myTable
. Se--destination_table
não for especificado, será gerado um job de consulta que grava a saída em uma tabela temporária (cache).
API
Para executar uma consulta usando a API, insira um novo job e preencha a propriedade de configuração do job query
. (Opcional) Especifique o local na propriedade location
na seção jobReference
do recurso do job.
Pesquise os resultados chamando getQueryResults
.
Pesquisar até jobComplete
igual a true
. Verifique se há erros e avisos na lista errors
.
C#
Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em C#.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para executar uma consulta com um proxy, consulte Como configurar um proxy.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
PHP
Antes de testar esta amostra, siga as instruções de configuração do PHP no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em PHP.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Ruby
Antes de testar esta amostra, siga as instruções de configuração do Ruby no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Ruby.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para mais informações, consulte Consultas interativas x em lote.
Executar uma consulta em lote
Para executar uma consulta em lote, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
Clique em
Criar uma nova consulta.No editor de consultas, insira uma consulta válida do GoogleSQL.
Por exemplo, consulte o conjunto de dados públicos do BigQuery
usa_names
para determinar os nomes mais comuns nos Estados Unidos entre os anos de 1910 e 2013:SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;
Clique em
Mais e, depois, em Configurações de consulta.Na seção Gerenciamento de recursos, selecione Batch.
Opcional: especifique a tabela de destino e a localização para os resultados da consulta:
- Na seção Destino, marque Definir uma tabela de destino para os resultados da consulta.
- Em Conjunto de dados, insira o nome de um conjunto de dados para a
tabela de destino, por exemplo,
myProject.myDataset
. - Em ID da tabela, insira um nome para a tabela de destino, por exemplo,
myTable
. Se a tabela de destino for uma tabela, em Preferência de gravação na tabela de destino, selecione se quer adicionar ao final ou substituir a tabela com os resultados da consulta.
Se a tabela de destino for uma nova tabela, o BigQuery a criará quando você executar a consulta.
Na seção Configurações adicionais, clique no menu Local dos dados e selecione uma opção.
Neste exemplo, o conjunto de dados
usa_names
é armazenado no local multirregional EUA. Se você especificar uma tabela de destino para essa consulta, o conjunto de dados que contém a tabela de destino também precisará estar na multirregião dos EUA. Não é possível consultar um conjunto de dados em um local e gravar os resultados em uma tabela de destino em outro local.
Clique em Save.
Clique em
Executar.Se você não especificar uma tabela de destino, o job de consulta gravará a saída em uma tabela temporária (cache).
Opcional: para classificar os resultados por coluna, clique em
Abrir menu de classificação ao lado do nome da coluna e selecione uma ordem de classificação. Se o número estimado de bytes processados para a classificação for maior do que zero, o número de bytes será exibido na parte de cima do menu.Opcional: para acessar a visualização dos resultados da consulta, acesse a guia Gráfico (visualização). É possível aumentar ou diminuir o zoom do gráfico, fazer o download dele como um arquivo PNG ou alternar a visibilidade da legenda.
No painel Configuração do gráfico, você pode mudar o tipo de gráfico (linha ou barra) e configurar as medidas e dimensões dele. Os campos nesse painel são preenchidos automaticamente com a configuração inicial inferida do esquema da tabela de destino da consulta. A configuração é preservada entre as seguintes execuções de consulta no mesmo editor de consultas. Suporte a dimensões
INTEGER
,INT64
,FLOAT
FLOAT64
,NUMERIC
,BIGNUMERIC
,TIMESTAMP
,DATE
,DATETIME
eTIME
e tipos de dadosSTRING
, enquanto as medidas dão suporte a tipos de dadosINTEGER
,INT64
,FLOAT
,FLOAT64
,NUMERIC
eBIGNUMERIC
.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Use o comando
bq query
e especifique a sinalização--batch
. No exemplo a seguir, a sinalização--use_legacy_sql=false
permite usar a sintaxe GoogleSQL.bq query \ --batch \ --use_legacy_sql=false \ 'QUERY'
Substitua QUERY por uma consulta válida do GoogleSQL. Por exemplo, consulte o conjunto de dados públicos do BigQuery
usa_names
para determinar os nomes mais comuns nos Estados Unidos entre os anos de 1910 e 2013:bq query \ --batch \ --use_legacy_sql=false \ 'SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;'
O job de consulta grava a saída em uma tabela temporária (cache).
Também é possível especificar a tabela de destino e o local para os resultados da consulta. Para gravar os resultados em uma tabela existente, inclua a sinalização apropriada para adicionar ao final (
--append_table=true
) ou substituir (--replace=true
) a tabela.bq query \ --batch \ --location=LOCATION \ --destination_table=TABLE \ --use_legacy_sql=false \ 'QUERY'
Substitua:
LOCATION: a região ou a multirregião da tabela de destino, por exemplo,
US
Neste exemplo, o conjunto de dados
usa_names
é armazenado no local multirregional EUA. Se você especificar uma tabela de destino para essa consulta, o conjunto de dados que contém a tabela de destino também precisará estar na multirregião dos EUA. Não é possível consultar um conjunto de dados em um local e gravar os resultados em uma tabela de destino em outro local.É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
TABLE: um nome para a tabela de destino, por exemplo,
myDataset.myTable
Se a tabela de destino for uma nova tabela, o BigQuery a criará ao executar a consulta. No entanto, é necessário especificar um conjunto de dados atual.
Se a tabela não estiver no projeto atual, adicione o ID do projeto do Google Cloud usando o formato
PROJECT_ID:DATASET.TABLE
. Por exemplo,myProject:myDataset.myTable
. Se--destination_table
não for especificado, será gerado um job de consulta que grava a saída em uma tabela temporária (cache).
API
Para executar uma consulta usando a API, insira um novo job e preencha a propriedade de configuração do job query
. (Opcional) Especifique o local na propriedade location
na seção jobReference
do recurso do job.
Ao preencher as propriedades do job de consulta, inclua a
propriedade configuration.query.priority
e defina o valor como BATCH
.
Pesquise os resultados chamando getQueryResults
.
Pesquisar até jobComplete
igual a true
. Verifique se há erros e avisos na lista errors
.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Para executar uma consulta em lote, defina a prioridade de consulta como QueryJobConfiguration.Priority.BATCH ao criar uma QueryJobConfiguration.
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Para mais informações, consulte Consultas interativas x em lote.
Cotas
Para informações sobre cotas relacionadas a consultas interativas e em lote, consulte Jobs de consulta.
Conferir o número de consultas interativas e em lote
É possível conferir o número de consultas interativas e em lote usando a visualização INFORMATION_SCHEMA.JOBS_BY_PROJECT
.
O exemplo a seguir usa a visualização INFORMATION_SCHEMA.JOBS_BY_PROJECT
para conferir o número de consultas interativas e em lote que foram executadas nas últimas sete horas:
SELECT
priority,
COUNT(*) active_jobs,
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour)
AND end_time IS NULL
AND job_type = 'QUERY'
GROUP BY priority
A visualização INFORMATION_SCHEMA.JOBS_BY_PROJECT
usa o campo priority
para indicar se uma consulta é INTERACTIVE
ou BATCH
. Para mais informações, consulte
Esquema.
Executar uma simulação
Uma simulação no BigQuery fornece as seguintes informações:
- estimativa de cobranças no modo sob demanda
- validação da sua consulta
- tamanho aproximado e complexidade da consulta no modo de capacidade
Simulações não usam slots de consulta, e você não é cobrado por realizar uma simulação. Use a estimativa retornada para calcular os custos da consulta na calculadora de preços.
Fazer simulações
Para executar uma simulação, faça o seguinte:
Console
Acesse a página do BigQuery.
Digite a consulta no Editor de consultas.
Se a consulta for válida, uma marca de seleção será exibida junto com a quantidade de dados que serão processados pela consulta. Se a consulta for inválida, um ponto de exclamação será exibido com uma mensagem de erro.
bq
Insira uma consulta como a seguinte usando a sinalização --dry_run
.
bq query \ --use_legacy_sql=false \ --dry_run \ 'SELECT COUNTRY, AIRPORT, IATA FROM `project_id`.dataset.airports LIMIT 1000'
Para uma consulta válida, o comando produz a seguinte resposta:
Query successfully validated. Assuming the tables are not modified, running this query will process 10918 bytes of data.
API
Para executar uma simulação usando a API, envie um job de consulta com
dryRun
definido como true
no
tipo
JobConfiguration.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
PHP
Antes de testar esta amostra, siga as instruções de configuração do PHP no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em PHP.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Python
Defina a propriedade QueryJobConfig.dry_run como True
.
Se uma configuração de consulta de simulação for fornecida,
Client.query()
sempre retornará um
QueryJob
concluído (links em inglês).
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
A seguir
- Saiba como gerenciar jobs de consulta.
- Saiba como acessar o histórico de consultas.
- Saiba como salvar e compartilhar consultas.
- Saiba mais sobre filas de consulta.