O BigQuery hospeda vários conjuntos de dados públicos que estão disponíveis para consulta do público em geral. Neste tutorial, você vai criar um fluxo de trabalho que executa vários jobs de consulta do BigQuery em paralelo, demonstrando uma melhoria no desempenho em comparação com a execução dos jobs em série, um após o outro.
Objetivos
Neste tutorial, você aprenderá a:- Execute uma consulta em um conjunto de dados públicos da Wikipédia para determinar os títulos mais visualizados em um mês específico.
- Implante e execute um fluxo de trabalho que executa vários jobs de consulta do BigQuery em série, um após o outro.
- Implante e execute um fluxo de trabalho que execute os jobs do BigQuery
usando a iteração paralela,
em que os loops
forcomuns são executados em paralelo.
É possível executar os comandos a seguir no console Google Cloud ou usando a Google Cloud CLI no terminal ou no Cloud Shell.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito de Google Cloud .
Console
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
Faça login na sua Conta do Google.
Se você ainda não tiver uma, inscreva-se agora.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative a API Workflows:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable workflows.googleapis.com
-
Configure a autenticação:
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
roles/iam.serviceAccountCreator) e o papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis. -
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. -
Conceda papéis à conta de serviço. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/bigquery.jobUser, roles/logging.logWritergcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Substitua:
SERVICE_ACCOUNT_NAME: o nome da conta de serviço.PROJECT_ID: o ID do projeto em que você criou a conta de serviçoROLE: o papel a ser concedido
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative a API Workflows:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable workflows.googleapis.com
-
Configure a autenticação:
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
roles/iam.serviceAccountCreator) e o papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis. -
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. -
Conceda papéis à conta de serviço. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/bigquery.jobUser, roles/logging.logWritergcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Substitua:
SERVICE_ACCOUNT_NAME: o nome da conta de serviço.PROJECT_ID: o ID do projeto em que você criou a conta de serviçoROLE: o papel a ser concedido
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
Executar um job de consulta do BigQuery
No BigQuery, é possível executar um job de consulta interativa (sob demanda). Para mais informações, consulte Como executar jobs de consulta interativos e em lote.
Console
No console do Google Cloud , acesse a página BigQuery.
Insira a seguinte consulta SQL do BigQuery na área de texto do Editor de consultas:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100Clique em Executar.
bq
No terminal, insira o seguinte comando bq query para executar uma consulta interativa usando a sintaxe SQL padrão:
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
Isso executa uma consulta que retorna os 100 títulos da Wikipédia com mais visualizações em um mês específico e grava a saída em uma tabela temporária.
Observe quanto tempo a consulta leva para ser executada.
Implantar um fluxo de trabalho que executa várias consultas em série
Uma definição de fluxo de trabalho é composta por uma série de etapas descritas usando a sintaxe de fluxos de trabalho. Depois de criar um fluxo de trabalho, implante-o para que ele fique disponível para execução. A etapa de implantação também valida a execução do arquivo de origem.
O fluxo de trabalho a seguir define uma lista de cinco tabelas para executar uma consulta usando o conector do BigQuery do Workflows. As consultas são executadas em série, uma após a outra, e os títulos mais assistidos de cada tabela são salvos em um mapa de resultados.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Clique em Criar.
Insira um nome para o novo fluxo de trabalho, como
workflow-serial-bqjobs.Escolha uma região apropriada; por exemplo: us-central1.
Selecione a conta de serviço que você criou.
Você já precisa ter concedido os papéis do IAM BigQuery > Usuário de jobs do BigQuery e Logging > Gravador de registros à conta de serviço.
Clique em Próxima.
No editor de fluxo de trabalho, insira a seguinte definição:
Clique em Implantar.
gcloud
Abra um terminal e crie um arquivo de código-fonte para seu fluxo de trabalho:
touch workflow-serial-bqjobs.yamlCopie o fluxo de trabalho a seguir no arquivo de código-fonte:
Implante o fluxo de trabalho digitando o seguinte comando:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Substitua
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compelo e-mail da conta de serviço que você criou.Você já deve ter concedido os papéis do IAM
roles/bigquery.jobUsereroles/logging.logWriterà conta de serviço.
Executar o fluxo de trabalho e várias consultas em série
Quando um fluxo de trabalho é executado, a definição atual associada a ele também é.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Na página Fluxos de trabalho, selecione o fluxo de trabalho workflow-serial-bqjobs para acessar a página de detalhes dele.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Confira os resultados do fluxo de trabalho no painel Saída.
gcloud
Abra um terminal.
Execute o fluxo de trabalho:
gcloud workflows run workflow-serial-bqjob
A execução do fluxo de trabalho deve levar aproximadamente um minuto ou cinco vezes o tempo de execução anterior. O resultado vai incluir cada tabela e será semelhante a esta:
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
Implante e execute um fluxo de trabalho que executa várias consultas em paralelo
Em vez de executar cinco consultas em sequência, é possível executá-las em paralelo fazendo algumas mudanças:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Uma etapa
parallelpermite que cada iteração do loopforseja executada em paralelo. A variável
resultsé declarada comoshared, o que permite que ela seja gravável por uma ramificação, e o resultado de cada ramificação pode ser anexado a ela.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Clique em Criar.
Insira um nome para o novo fluxo de trabalho, como
workflow-parallel-bqjobs.Escolha uma região apropriada; por exemplo: us-central1.
Selecione a conta de serviço que você criou.
Clique em Próxima.
No editor de fluxo de trabalho, insira a seguinte definição:
Clique em Implantar.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Confira os resultados do fluxo de trabalho no painel Saída.
gcloud
Abra um terminal e crie um arquivo de código-fonte para seu fluxo de trabalho:
touch workflow-parallel-bqjobs.yamlCopie o fluxo de trabalho a seguir no arquivo de código-fonte:
Implante o fluxo de trabalho digitando o seguinte comando:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Substitua
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compelo e-mail da conta de serviço que você criou.Execute o fluxo de trabalho:
gcloud workflows run workflow-parallel-bqjobs
O resultado será semelhante à saída anterior, mas a execução do fluxo de trabalho deve levar aproximadamente 20 segundos ou menos.
Limpar
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos do tutorial
Exclua os fluxos de trabalho criados neste tutorial:
gcloud workflows delete WORKFLOW_NAME
A seguir
- Para saber mais sobre etapas paralelas, consulte Executar etapas paralelas.
- Para saber mais sobre os conectores do Workflows, consulte Noções básicas sobre conectores.
- Para saber mais sobre o Workflows, consulte a visão geral do Workflows.