Visão geral
Neste laboratório, você:
- escreverá um pipeline que usa a SQL para agregar o tráfego do site por usuário;
- criará um pipeline que usa SQL para agregar o tráfego do site por minuto.
Configuração e requisitos
Antes de clicar no botão "Começar o laboratório"
Importante: leia estas instruções.
Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático do Qwiklabs permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você receberá novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
O que é necessário
Veja os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome)
- Tempo disponível para concluir as atividades
Observação: não use seu projeto ou conta pessoal do Google Cloud neste laboratório.
Observação: se você estiver usando um Pixelbook, faça o laboratório em uma janela anônima.
Como começar o laboratório e fazer login no console
-
Clique no botão Começar o laboratório. Se for preciso pagar pelo laboratório, você verá um pop-up para selecionar a forma de pagamento.
Um painel aparece à esquerda contendo as credenciais temporárias que você precisa usar no laboratório.

-
Copie o nome de usuário e clique em Abrir console do Google.
O laboratório ativa os recursos e depois abre a página Escolha uma conta em outra guia.
Observação: abra as guias em janelas separadas, lado a lado.
-
Na página "Escolha uma conta", clique em Usar outra conta. A página de login abre.

-
Cole o nome de usuário que foi copiado do painel "Detalhes da conexão". Em seguida, copie e cole a senha.
Observação: é necessário usar as credenciais do painel "Detalhes da conexão". Não use suas credenciais do Google Cloud Ensina. Não use sua conta pessoal do Google Cloud, caso tenha uma neste laboratório (isso evita cobranças).
- Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Cloud abre nesta guia.
Observação: para acessar a lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo.
Configuração do ambiente de desenvolvimento baseado em notebook do Jupyter
Neste laboratório, você vai executar todos os comandos em um terminal usando seu notebook.
-
No Menu de navegação do console do Google Cloud, clique em Vertex AI > Workbench.
-
Selecione Ativar a API Notebooks.
-
Na página "Workbench", selecione NOTEBOOKS GERENCIADOS PELO USUÁRIO e clique em CRIAR NOVO.
-
Na caixa de diálogo Nova instância, defina a região como e a zona como .
-
Em "Ambiente", selecione Apache Beam.
-
Clique em CRIAR na parte de baixo da caixa de diálogo.
Observação: pode levar de três a cinco minutos para que o ambiente seja totalmente provisionado. Aguarde até a conclusão dessa etapa.
Observação: clique em Ativar API Notebooks para fazer isso.
- Depois, clique no link ABRIR O JUPYTERLAB ao lado do nome do seu notebook para abrir o ambiente em uma nova guia do seu navegador.

- Em seguida, clique em Terminal. Nele, é possível executar todos os comandos deste laboratório.

Faça o download do repositório de código
Agora você precisa dele para usar neste laboratório.
- Insira este comando no terminal que você abriu:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
cd /home/jupyter/training-data-analyst/quests/dataflow_python/
-
No painel à esquerda do ambiente do notebook no navegador de arquivos, você vai notar que o repositório training-data-analyst foi adicionado.
-
Acesse o repositório clonado /training-data-analyst/quests/dataflow_python/
. Nele, você vai encontrar uma pasta para cada laboratório com duas subpastas: lab
, que contém o código que precisa ser concluído, e solution
, que inclui um exemplo prático caso você precise de ajuda.

Observação: caso você queira editar um arquivo, é só clicar nele. O arquivo será aberto, e você poderá adicionar ou modificar o código.
Clique em Verificar meu progresso para conferir o objetivo.
Crie uma instância de notebook e clone um repo de curso
Parte 1: agregar o tráfego do site por usuário usando SQL
Nesta parte do laboratório, você reescreve o pipeline BatchUserTraffic anterior para que ele faça o seguinte:
- Leia o tráfego do dia de um arquivo no Cloud Storage.
- Converta cada evento em um objeto
CommonLog
.
- Use SQL em vez de transformações Java para somar o número de hits para cada ID de usuário único e realize agregações adicionais.
- Grave os dados resultantes no BigQuery.
- Tenha uma outra ramificação que grava os dados brutos no BigQuery para análise posterior.
Tarefa 1. Gerar dados sintéticos
Assim como nos laboratórios anteriores, a primeira coisa a se fazer é gerar os dados que o pipeline vai processar. Abra o ambiente do laboratório e gere os dados como antes:
Abra o laboratório apropriado
- No terminal do seu ambiente de desenvolvimento integrado, mude para o diretório que você vai usar neste laboratório:
# Change directory into the lab
cd 4_SQL_Batch_Analytics/lab
export BASE_DIR=$(pwd)
Configurar o ambiente virtual e as dependências
Antes de começar a editar o código do pipeline real, você precisa verificar se instalou as dependências necessárias.
- No seu terminal, execute o seguinte comando para criar um ambiente virtual para seu trabalho neste laboratório:
sudo apt-get update && sudo apt-get install -y python3-venv
# Create and activate virtual environment
python3 -m venv df-env
source df-env/bin/activate
- Em seguida, instale os pacotes necessários para executar seu pipeline:
python3 -m pip install -q --upgrade pip setuptools wheel
python3 -m pip install apache-beam[gcp]
- Verifique se as APIs Dataflow e Data Catalog estão ativadas:
gcloud services enable dataflow.googleapis.com
gcloud services enable datacatalog.googleapis.com
Configure o ambiente de dados
# Create GCS buckets and BQ dataset
cd $BASE_DIR/../..
source create_batch_sinks.sh
# Generate event dataflow
source generate_batch_events.sh
# Change to the directory containing the practice version of the code
cd $BASE_DIR
O script cria um arquivo chamado events.json
com linhas semelhantes a estas:
{"user_id": "-6434255326544341291", "ip": "192.175.49.116", "timestamp": "2019-06-19T16:06:45.118306Z", "http_request": "\"GET eucharya.html HTTP/1.0\"", "lat": 37.751, "lng": -97.822, "http_response": 200, "user_agent": "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.01; Trident/5.1)", "num_bytes": 182}
Em seguida, ele copia automaticamente esse arquivo para o bucket do Google Cloud Storage em .
- Acesse o Google Cloud Storage (em inglês) e veja se o bucket de armazenamento tem um arquivo chamado
events.json
.
Clique em Verificar meu progresso para conferir o objetivo.
Configure o ambiente de dados
Tarefa 2. Adicionar dependências do SQL
- No seu Explorador de arquivos, acesse
training-data-analyst/quests/dataflow_python/4_SQL_Batch_Analytics/lab/
e abra o arquivo batch_user_traffic_SQL_pipeline.py
.
Esse pipeline já contém o código necessário para aceitar as opções de linha de comando do caminho de entrada e um nome de tabela de saída, além do código para ler e analisar eventos do Google Cloud Storage e gravar resultados no BigQuery. No entanto, algumas partes importantes estão ausentes.
Como no laboratório anterior, a próxima etapa do pipeline consiste em agregar os eventos por user_id
e contar as visualizações de página de cada um. No entanto, desta vez, você vai agregar usando a transformação SqlTransform
do SQL, em vez de transformações baseadas em Python.
- Em
batch_user_traffic_SQL_pipeline.py
, adicione a seguinte instrução de importação:
from apache_beam.transforms.sql import SqlTransform
- Depois adicione a seguinte consulta SQL ao arquivo na definição de variável
query
:
SELECT user_id,
COUNT(*) AS page_views, SUM(num_bytes) as total_bytes,
MAX(num_bytes) AS max_bytes, MIN(num_bytes) as min_bytes
FROM PCOLLECTION
GROUP BY user_id
- Depois preencha o
#TODO
a seguir. Use este código para criar uma transformação e gravar dados brutos no BigQuery:
logs | 'WriteRawToBQ' >> beam.io.WriteToBigQuery(
raw_table_name,
schema=raw_table_schema,
create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE
)
O Beam SQL pode ser implementado nos dialetos Apache Calcite (padrão) e ZetaSQL (links em inglês). Embora ambos sejam executados pelo Dataflow, vamos implementar o ZetaSQL nesse exemplo. Ele é semelhante à linguagem usada no BigQuery e é o dialeto implementado no "SQL do Dataflow", que consiste em consultas SQL criadas diretamente na IU do Dataflow.
- Preencha o último
#TODO
. Aplique um SQLTransform usando o dialeto ZetaSQL no seguinte código:
SqlTransform(query, dialect='zetasql')
- Salve as alterações que você fez no arquivo.
Tarefa 3. Executar o pipeline
- Volte ao terminal e execute o código a seguir para executar o pipeline:
export PROJECT_ID=$(gcloud config get-value project)
export REGION={{{project_0.startup_script.lab_region|Region}}}
export BUCKET=gs://${PROJECT_ID}
export PIPELINE_FOLDER=${BUCKET}
export RUNNER=DataflowRunner
export INPUT_PATH=${PIPELINE_FOLDER}/events.json
export TABLE_NAME=${PROJECT_ID}:logs.user_traffic
export AGGREGATE_TABLE_NAME=${PROJECT_ID}:logs.user_traffic
export RAW_TABLE_NAME=${PROJECT_ID}:logs.raw
python3 batch_user_traffic_SQL_pipeline.py \
--project=${PROJECT_ID} \
--region=${REGION} \
--staging_location=${PIPELINE_FOLDER}/staging \
--temp_location=${PIPELINE_FOLDER}/temp \
--runner=${RUNNER} \
--experiments=use_runner_v2 \
--input_path=${INPUT_PATH} \
--agg_table_name=${AGGREGATE_TABLE_NAME} \
--raw_table_name=${RAW_TABLE_NAME}
-
Acesse o Menu de navegação > Dataflow para exibir o status do pipeline.
-
Quando o pipeline terminar, acesse a IU do BigQuery para consultar as duas tabelas resultantes.
-
Verifique se logs.raw
existe e tem dados preenchidos, porque você precisará deles mais adiante no laboratório.
Clique em Verificar meu progresso para conferir o objetivo.
Agregar o tráfego do site por usuário com SQL
Parte 2: agregar o tráfego do site por minuto com o SQL
Nesta parte do laboratório, você reescreverá o pipeline anterior BatchMinuteTraffic para que ele faça o seguinte:
- Leia o tráfego do dia de um arquivo no Cloud Storage.
- Converta cada evento em um objeto
CommonLog
e adicione um atributo de carimbo de data/hora Joda ao objeto.
- Use SQL em vez de transformações Java para somar novamente em janelas o número total de hits por minuto.
- Grave os dados resultantes no BigQuery.
Tarefa 1. Adicionar o campo de carimbo de data/hora à linha CommonLog
Nesta tarefa, você vai adicionar um campo de carimbo de data/hora Joda ao objeto CommonLog
, convertendo-o implicitamente em um objeto Row
genérico.
As importações e opções apropriadas já foram definidas para usar o ZetaSQL. Um pipeline foi criado com etapas para ingerir e gravar, mas não para transformar nem agregar dados. No explorador de arquivos do ambiente de desenvolvimento integrado, acesse training-data-analyst/quests/dataflow_python/4_SQL_Batch_Analytics/lab/
e abra o arquivo batch_minute_user_SQL_pipeline.py
.
- No primeiro
#TODO
, adicione o carimbo de data/hora formatado como uma string:
ts = datetime.strptime(element.ts[:-8], "%Y-%m-%dT%H:%M:%S")
ts = datetime.strftime(ts, "%Y-%m-%d %H:%M:%S")
Não será possível transmitir diretamente objetos do tipo datetime
para um SqlTransform
quando você usar o SDK para Python. Nesse caso, vamos converter o objeto em uma string usando strftime
. Depois vamos usar a função TIMESTAMP
em SQL.
- Em seguida, adicione a seguinte consulta SQL:
SELECT
COUNT(*) AS page_views,
STRING(window_start) AS start_time
FROM
TUMBLE(
(SELECT TIMESTAMP(ts) AS ts FROM PCOLLECTION),
DESCRIPTOR(ts),
'INTERVAL 1 MINUTE')
GROUP BY window_start
Note: In this SQL query, we convert our field ts
to type TIMESTAMP
and use it as the event timestamp for our fixed one-minute windows. O campo window_start
é gerado por TUMBLE
e também é do tipo TIMESTAMP
. Devido ao problema anterior com o SDK para Python, é preciso converter esse campo em STRING
antes de enviar a PCollection resultante de volta para as transformações Python.
- No próximo
#TODO
, aplique um SQLTransform usando o dialeto ZetaSQL no seguinte código:
SqlTransform(query, dialect='zetasql')
Tarefa 2. Executar o pipeline
- No seu terminal, use o seguinte código para executar o pipeline:
export PROJECT_ID=$(gcloud config get-value project)
export REGION={{{project_0.startup_script.lab_region|Region}}}
export BUCKET=gs://${PROJECT_ID}
export PIPELINE_FOLDER=${BUCKET}
export RUNNER=DataflowRunner
export INPUT_PATH=${PIPELINE_FOLDER}/events.json
export TABLE_NAME=${PROJECT_ID}:logs.minute_traffic
python3 batch_minute_traffic_SQL_pipeline.py \
--project=${PROJECT_ID} \
--region={{{project_0.startup_script.lab_region|Region}}} \
--stagingLocation=${PIPELINE_FOLDER}/staging \
--tempLocation=${PIPELINE_FOLDER}/temp \
--runner=${RUNNER} \
--inputPath=${INPUT_PATH} \
--tableName=${TABLE_NAME} \
--experiments=use_runner_v2
-
No console do Cloud, acesse Menu de navegação > Dataflow para saber o status do seu pipeline.
-
Quando o pipeline terminar, consulte as tabelas logs.minute_traffic
resultantes na IU do BigQuery. Consulte no terminal se preferir:
bq head -n 10 $PROJECT_ID:logs.minute_traffic
Clique em Verificar meu progresso para conferir o objetivo.
Agregar o tráfego do site por minuto com o SQL
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
- 1 estrela = muito insatisfeito
- 2 estrelas = insatisfeito
- 3 estrelas = neutro
- 4 estrelas = satisfeito
- 5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.