O BigQuery aloja vários conjuntos de dados públicos que estão disponíveis para consulta pelo público em geral. Neste tutorial, vai criar um fluxo de trabalho que executa várias tarefas de consulta do BigQuery em paralelo, demonstrando uma melhoria no desempenho em comparação com a execução das tarefas em série, uma após a outra.
Objetivos
Neste tutorial, vai:- Execute uma consulta num conjunto de dados público da Wikipédia para determinar os títulos mais vistos num mês específico.
- Implementar e executar um fluxo de trabalho que executa várias tarefas de consulta do BigQuery em série, uma após a outra.
- Implementar e executar um fluxo de trabalho que executa as tarefas do BigQuery usando a iteração paralela, e onde os ciclos
for
normais são executados em paralelo.
Pode executar os seguintes comandos na Google Cloud consola ou através da CLI Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
Consola
- 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.
-
Verify 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.
-
Verify 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify 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: roles/bigquery.jobUser, roles/logging.logWriter.
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.
-
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify 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: roles/bigquery.jobUser, roles/logging.logWriter.
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.
-
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
Execute uma tarefa de consulta do BigQuery
No BigQuery, pode executar uma tarefa de consulta interativa (a pedido). Para mais informações, consulte o artigo Executar tarefas de consulta interativas e em lote.
Consola
Na Google Cloud consola, aceda à página BigQuery.
Introduza 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, introduza o seguinte comando bq query
para executar uma consulta interativa com 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'
Isto executa uma consulta que devolve os 100 principais títulos da Wikipédia com mais visualizações num mês específico e escreve o resultado numa tabela temporária.
Tenha em atenção o tempo que a consulta demora a ser executada.
Implemente um fluxo de trabalho que execute várias consultas em série
Uma definição de fluxo de trabalho é composta por uma série de passos descritos através da sintaxe dos fluxos de trabalho. Depois de criar um fluxo de trabalho, implementa-o para o disponibilizar para execução. O passo de implementação também valida se é possível executar o ficheiro de origem.
O fluxo de trabalho seguinte define uma lista de cinco tabelas para executar uma consulta em relação às mesmas usando o conetor do BigQuery dos Workflows. As consultas são executadas em série, uma após a outra, e os títulos mais vistos de cada tabela são guardados num mapa de resultados.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em Criar.
Introduza um nome para o novo fluxo de trabalho, como
workflow-serial-bqjobs
.Escolha uma região adequada; por exemplo, us-central1.
Selecione a conta de serviço que criou anteriormente.
Já deve ter concedido as funções de IAM BigQuery > Utilizador da tarefa do BigQuery e Logging > Escritor de registos à conta de serviço.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Abra um terminal e crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-serial-bqjobs.yaml
Copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:
Implemente o fluxo de trabalho introduzindo 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 email da conta de serviço que criou anteriormente.Já deve ter concedido as funções de IAM
roles/bigquery.jobUser
eroles/logging.logWriter
à conta de serviço.
Execute o fluxo de trabalho e execute várias consultas em série
A execução de um fluxo de trabalho executa a definição do fluxo de trabalho atual associada ao fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Na página Fluxos de trabalho, selecione o fluxo de trabalho workflow-serial-bqjobs para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
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 demorar aproximadamente um minuto ou cinco vezes o tempo de execução anterior. O resultado inclui cada tabela e tem um aspeto semelhante ao 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" } }
Implemente e execute um fluxo de trabalho que executa várias consultas em paralelo
Em vez de executar cinco consultas sequencialmente, pode executá-las em paralelo fazendo algumas alterações:
- runQueries: parallel: shared: [results] for: value: table in: ${tables}
- Um passo
parallel
permite que cada iteração do ciclofor
seja executada em paralelo. A variável
results
é declarada comoshared
, o que permite que seja gravável por um ramo, e o resultado de cada ramo pode ser anexado à mesma.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em Criar.
Introduza um nome para o novo fluxo de trabalho, como
workflow-parallel-bqjobs
.Escolha uma região adequada; por exemplo, us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
Veja os resultados do fluxo de trabalho no painel Saída.
gcloud
Abra um terminal e crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-parallel-bqjobs.yaml
Copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:
Implemente o fluxo de trabalho introduzindo 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.com
pelo email da conta de serviço que criou anteriormente.Execute o fluxo de trabalho:
gcloud workflows run workflow-parallel-bqjobs
O resultado é semelhante ao resultado anterior, mas a execução do fluxo de trabalho deve demorar aproximadamente 20 segundos ou menos!
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar 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.
Elimine recursos de tutoriais
Elimine os fluxos de trabalho criados neste tutorial:
gcloud workflows delete WORKFLOW_NAME
O que se segue?
- Para saber mais sobre os passos paralelos, consulte o artigo Execute passos paralelos.
- Para saber mais sobre os conetores do Workflows, consulte o artigo Compreender os conetores.
- Para saber mais sobre os fluxos de trabalho, consulte a vista geral dos fluxos de trabalho.