arrow_back

Serverless Data Processing with Dataflow: como usar o SQL do Dataflow para análises em lote

Acesse mais de 700 laboratórios e cursos

Serverless Data Processing with Dataflow: como usar o SQL do Dataflow para análises em lote

Laboratório 2 horas universal_currency_alt 5 créditos show_chart Avançado
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Acesse mais de 700 laboratórios e cursos

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

  1. 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.

    Painel de credenciais

  2. 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.
  3. Na página "Escolha uma conta", clique em Usar outra conta. A página de login abre.

    Caixa de diálogo "Escolha uma conta" com a opção "Usar outra conta" destacada

  4. 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).
  1. 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. Menu do console do Cloud

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.

  1. No Menu de navegação do console do Google Cloud, clique em Vertex AI > Workbench.

  2. Selecione Ativar a API Notebooks.

  3. Na página "Workbench", selecione NOTEBOOKS GERENCIADOS PELO USUÁRIO e clique em CRIAR NOVO.

  4. Na caixa de diálogo Nova instância, defina a região como e a zona como .

  5. Em "Ambiente", selecione Apache Beam.

  6. 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.
  1. 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.

IDE_link

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

Abrir terminal

Faça o download do repositório de código

Agora você precisa dele para usar neste laboratório.

  1. 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/
  1. No painel à esquerda do ambiente do notebook no navegador de arquivos, você vai notar que o repositório training-data-analyst foi adicionado.

  2. 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.

Opção "Explorador" destacada no menu "Visualização" expandido

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.

  1. 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
  1. 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]
  1. 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

  1. 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.

  1. Em batch_user_traffic_SQL_pipeline.py, adicione a seguinte instrução de importação:
from apache_beam.transforms.sql import SqlTransform
  1. 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
  1. 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.

  1. Preencha o último #TODO. Aplique um SQLTransform usando o dialeto ZetaSQL no seguinte código:
SqlTransform(query, dialect='zetasql')
  1. Salve as alterações que você fez no arquivo.

Tarefa 3. Executar o pipeline

  1. 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}
  1. Acesse o Menu de navegação > Dataflow para exibir o status do pipeline.

  2. Quando o pipeline terminar, acesse a IU do BigQuery para consultar as duas tabelas resultantes.

  3. 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.

  1. 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.

  1. 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.
  1. No próximo #TODO, aplique um SQLTransform usando o dialeto ZetaSQL no seguinte código:
SqlTransform(query, dialect='zetasql')

Tarefa 2. Executar o pipeline

  1. 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
  1. No console do Cloud, acesse Menu de navegação > Dataflow para saber o status do seu pipeline.

  2. 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.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.