O BigQuery hospeda vários conjuntos de dados públicos 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úblico da Wikipedia para determinar os títulos mais visualizados em um mês específico.
- Implante e execute um fluxo de trabalho que execute 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
for
comuns são executados em paralelo.
É possível executar os comandos a seguir no console do Google Cloud ou usando a CLI do Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, você 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 do Google Cloud.
Console
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
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.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
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.
-
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflows API:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
Executar um job de consulta do BigQuery
No BigQuery, é possível executar um job de consulta interativo (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 100
Clique em Executar.
bq
No terminal, digite 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, implantá-lo para disponibilizá-lo para execução. A etapa de implantação também valida que o arquivo de origem possa ser executado.
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 visualizados de cada tabela são salvos em um mapa de resultados.
Console
No console do 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 anteriormente.
Você já deve ter concedido os benefícios do BigQuery > Usuário de jobs do BigQuery e Logging > Gravador de registros do IAM ao serviço do Compute Engine.
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.yaml
Copie o fluxo de trabalho a seguir para o 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.com
pelo e-mail da conta de serviço que você criou anteriormente.Você já deve ter concedido os benefícios
roles/bigquery.jobUser
eroles/logging.logWriter
papéis do IAM para o serviço do Compute Engine.
Executar o fluxo de trabalho e executar várias consultas em série
Quando um fluxo de trabalho é executado, a definição atual associada a ele também é.
Console
No console do Google Cloud, acesse a página Fluxos de trabalho.
Na página Fluxos de trabalho, selecione o workflow-serial-bqjobs para acessar a respectiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Veja 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 no tempo de execução anterior. O resultado incluirá cada tabela e será semelhante a o seguinte:
{
"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"
}
}
Implantar e executar um fluxo de trabalho que execute várias consultas em paralelo
Em vez de executar cinco consultas em sequência, você pode executá-las em paralelo fazendo algumas alterações:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Uma etapa
parallel
permite que cada iteração da repetiçãofor
seja executada em paralelo. A variável
results
é declarada comoshared
, o que permite ser gravável por uma ramificação e o resultado de cada ramificação pode ser anexado a ela.
Console
No console do 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 anteriormente.
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.
Veja 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.yaml
Copie o fluxo de trabalho a seguir para o 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
Substituir
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
pelo e-mail da conta de serviço que você criou anteriormente.Execute o fluxo de trabalho:
gcloud workflows run workflow-parallel-bqjobs
O resultado será semelhante ao anterior, mas a execução do fluxo de trabalho 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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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.