Como executar jobs de consulta interativa e em lote
Neste documento, descrevemos como executar jobs de consulta interativa (sob demanda) e em lote.
Os resultados da consulta são salvos em uma tabela temporária ou permanente. Você pode optar por anexar ou substituir dados em uma tabela existente ou criar uma nova tabela, se não houver nenhuma com o mesmo nome.
Permissões necessárias
Para executar um job de consulta, é necessário ter a permissão bigquery.jobs.create
do gerenciamento de identidade e acesso (IAM) no projeto que executa o job de consulta.
Cada um dos seguintes papéis predefinidos do IAM inclui as permissões necessárias para executar um job de consulta:
roles/bigquery.admin
roles/bigquery.jobUser
roles/bigquery.user
Você também precisa da permissão bigquery.tables.getData
em todas as tabelas e visualizações referenciadas pela consulta. Além disso, ao consultar
uma visualização, você precisa dessa permissão em todas as tabelas e visualizações subjacentes.
No entanto, se você usa visualizações autorizadas
ou conjuntos de dados autorizados, não precisa
de acesso aos dados de origem subjacentes.
Cada um dos papéis predefinidos do IAM a seguir inclui a permissão necessária em todas as tabelas e visualizações referenciadas pela consulta:
roles/bigquery.admin
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.dataViewer
Para mais informações sobre os papéis do IAM no BigQuery, consulte Papéis e permissões predefinidos.
Como executar consultas interativas
Por padrão, o BigQuery executa jobs de consulta interativa, o que significa que a consulta é executada o mais rápido possível. Essas consultas são realizadas de acordo com o limite de taxa simultânea e o limite diário.
Para executar uma consulta interativa que grava em uma tabela temporária, siga estas etapas:
Console
No console do Cloud, abra a página do BigQuery.
Clique em Escrever nova consulta.
Insira uma consulta SQL do BigQuery válida na área de texto do Editor de consultas.
(Opcional) Para alterar o local de processamento de dados, clique em Mais e, em seguida, clique em Configurações de consulta. Em Local de processamento, clique em Seleção automática e escolha o local dos dados. Por fim, clique em Salvar para atualizar as configurações da consulta.
Clique em Executar.
Isso cria um job de consulta que grava a saída em uma tabela temporária.
bq
Insira o comando bq query
e inclua o texto da consulta.
Opcional: forneça a sinalização --location
e defina o valor do
local.
É possível especificar as sinalizações opcionais a seguir. A lista inclui algumas das sinalizações mais comuns. Para uma lista completa de sinalizações de comando query
, consulte bq query
na referência da ferramenta de linha de comando bq
.
Especifique:
- sinalização
--destination_table
para criar uma tabela permanente com base nos resultados da consulta. Para gravar os resultados da consulta em uma tabela que não esteja em seu projeto padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: project_id:dataset. Se--destination_table
não for especificado, será gerado um job de consulta que grava a saída em uma tabela temporária (cache). - sinalização
--append_table
para anexar os resultados da consulta a uma tabela de destino. - sinalização
--destination_kms_key
para usar uma chave do Cloud Key Management Service para criptografar os dados da tabela de destino. - sinalização
--use_legacy_sql=false
para usar a sintaxe SQL padrão. É possível definir uma sintaxe padrão para a ferramenta de linha de comandobq
usando o arquivo.bigqueryrc
. - Sinalização
--label
para aplicar um rótulo ao job de consulta no formulário key:value. Repita essa sinalização para especificar vários rótulos. - Sinalização
--max_rows
ou-n
para especificar o número de linhas a serem retornadas nos resultados da consulta. - sinalização
--maximum_bytes_billed
para limitar os bytes faturados da consulta. Se a consulta ultrapassar o limite, ela falhará (sem gerar cobranças). Se não especificado, os bytes faturados são definidos como o padrão do projeto. - sinalização
--udf_resource
para carregar e avaliar um arquivo de código a ser usado como um recurso de função definido pelo usuário. É possível especificar um URI do Cloud Storage ou o caminho para um arquivo de código local. Repita a sinalização para especificar vários arquivos.
Digite o seguinte comando para executar uma consulta interativa usando a sintaxe padrão do SQL:
bq --location=location query \ --use_legacy_sql=false \ 'query'
Em que:
- location é o nome do local onde a consulta é
processada. A sinalização
--location
é opcional. Por exemplo, se você estiver usando BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc; - query é uma consulta na sintaxe SQL padrão.
Exemplos:
Digite o seguinte comando para gravar resultados de consulta interativa em uma tabela de destino chamada mytable
em mydataset
. O conjunto de dados está no projeto padrão. A consulta recupera dados do conjunto de dados públicos USA Name Data.
bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
Digite o seguinte comando para gravar resultados de consulta interativa em uma tabela de destino chamada mytable
em mydataset
. O conjunto de dados está em myotherproject
, e não no projeto padrão. A consulta recupera dados de uma tabela não particionada, o conjunto de dados públicos USA Name Data.
bq query \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
Para executar uma consulta usando a API, insira um novo job e preencha a propriedade jobs#configuration.query. Especifique seu 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#.
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.
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.
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 Node.js.
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 PHP.
Python
Antes de testar esta amostra, siga as instruções de configuração para 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.
Ruby
Antes de testar esta amostra, siga as instruções de configuração para 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 Ruby.
Como executar consultas em lote
O BigQuery também oferece consultas em lote. O BigQuery enfileira cada consulta em lote em seu nome e inicia a consulta assim que os recursos inativos ficarem disponíveis no pool de recursos compartilhados do BigQuery. Isso geralmente ocorre em poucos minutos. Se o BigQuery não tiver iniciado a consulta em 24 horas, ele altera a prioridade do job para interativa.
As consultas em lote não contam para o limite de taxa simultânea, o que facilita a execução de muitas consultas de uma vez. As consultas em lote usam os mesmos recursos que as consultas interativas (sob demanda). Se você usa consultas de lote e interativas com preços fixos, compartilhe seus slots alocados.
Para executar uma consulta em lote, siga estas etapas:
Console
No console do Cloud, abra a página do BigQuery.
Clique no botão Redigir nova consulta.
Insira uma consulta SQL válida na área de texto do Editor de consultas.
Clique no botão Mais e depois em Configurações de consulta.
Selecione a opção Lote na seção Prioridade do job.
Opcional: em Local de processamento, clique em Não especificado e escolha o local dos seus dados.
Clique em Salvar para atualizar as configurações da consulta.
Clique em Executar.
bq
Insira o comando bq query
e inclua o texto da consulta. Especifique a
sinalização --batch
para executar uma consulta em lote.
Opcional: forneça a sinalização --location
e defina o valor como seu local.
É possível especificar as sinalizações opcionais a seguir. A lista inclui algumas das sinalizações mais comuns. Para uma lista completa de sinalizações de comando query
, consulte bq query
na referência da ferramenta de linha de comando bq
.
Especifique:
- sinalização
--destination_table
para criar uma tabela permanente com base nos resultados da consulta. Para gravar os resultados da consulta em uma tabela que não esteja em seu projeto padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: project_id:dataset. Se--destination_table
não for especificado, será gerado um job de consulta que grava a saída em uma tabela temporária (cache). - sinalização
--append_table
para anexar os resultados da consulta a uma tabela de destino. - sinalização
--destination_kms_key
para usar uma chave do Cloud Key Management Service para criptografar os dados da tabela de destino. - sinalização
--use_legacy_sql=false
para usar a sintaxe SQL padrão. É possível definir uma sintaxe padrão para a ferramenta de linha de comandobq
usando o arquivo.bigqueryrc
. - Sinalização
--label
para aplicar um rótulo ao job de consulta no formulário key:value. Repita essa sinalização para especificar vários rótulos. - Sinalização
--max_rows
ou-n
para especificar o número de linhas a serem retornadas nos resultados da consulta. - sinalização
--maximum_bytes_billed
para limitar os bytes faturados da consulta. Se a consulta ultrapassar o limite, ela falhará (sem gerar cobranças). Se não especificado, os bytes faturados são definidos como o padrão do projeto. - Sinalização
--udf_resource
para carregar e avaliar um arquivo de código a ser usado como um recurso de função definido pelo usuário. É possível especificar um URI do Cloud Storage ou o caminho para um arquivo de código local. Repita a sinalização para especificar vários arquivos.
Digite o seguinte comando para executar uma consulta em lote usando a sintaxe SQL padrão:
bq --location=location query \ --batch \ --use_legacy_sql=false \ 'query'
Em que:
- location é o nome do local onde a consulta é
processada. A sinalização
--location
é opcional. Por exemplo, se você estiver usando BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc; - query é uma consulta na sintaxe SQL padrão.
Exemplos:
Digite o seguinte comando para gravar os resultados da consulta em lote em uma tabela de destino chamada mytable
em mydataset
. O conjunto de dados está no projeto padrão. A consulta recupera dados do conjunto de dados públicos USA Name Data.
bq query \
--batch \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
Digite o seguinte comando para gravar os resultados da consulta em lote em uma tabela de destino chamada mytable
em mydataset
. O conjunto de dados está em myotherproject
, e não no projeto padrão. A consulta recupera dados de uma tabela não particionada, o conjunto de dados públicos do USA Name Data (em inglês).
bq query \
--batch \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
Para executar uma consulta usando a API, insira um novo job e preencha a propriedade de configuração do job query
. Opcional: especifique seu 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
com o valor definido como BATCH
.
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.
Java
Para executar uma consulta em lote, defina a prioridade de consulta como QueryJobConfiguration.Priority.BATCH ao criar uma QueryJobConfiguration.
Antes de testar essa amostra, siga as instruções de configuração para 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.
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 Node.js.
Python
Antes de testar esta amostra, siga as instruções de configuração para 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.
A seguir
- Para saber como gerenciar jobs de consulta, consulte Como gerenciar jobs.
- Para saber como visualizar o histórico de consultas, veja Detalhes do job.
- Veja Como salvar e compartilhar consultas.