
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create Vertex AI Platform Notebooks instance and clone course repo
/ 15
Generate synthetic data
/ 15
Run your pipeline
/ 15
Creating a JSON schema file
/ 10
Write a JavaScript User-Defined Function in Javascript file
/ 15
Running a Dataflow Template
/ 10
Neste laboratório, vamos mostrar como:
Pré-requisitos:
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.
Faça login no Qwiklabs em uma janela anônima.
Confira o tempo de acesso do laboratório (por exemplo, 1:15:00
) e finalize todas as atividades nesse prazo.
Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.
Aceite os termos e pule a página de recursos de recuperação.
Antes de começar a trabalhar no Google Cloud, veja se o projeto tem as permissões corretas no Identity and Access Management (IAM).
No console do Google Cloud, em Menu de navegação (), selecione IAM e administrador > IAM.
Confira se a conta de serviço padrão do Compute {project-number}-compute@developer.gserviceaccount.com
está na lista e recebeu o papel de editor
. O prefixo da conta é o número do projeto, que está no Menu de navegação > Visão geral do Cloud > Painel.
editor
, siga as etapas abaixo.729328892908
.{project-number}
pelo número do seu projeto.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
Em "Ambiente", selecione Apache Beam.
Clique em CRIAR na parte de baixo da caixa de diálogo.
Agora você precisa dele para usar neste laboratório.
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.
Clique em Verificar meu progresso para conferir o objetivo.
Aproximadamente 5 minutos
O Cloud Dataflow é um serviço do Google Cloud Platform totalmente gerenciado para executar pipelines de processamento de dados em lote e por streaming do Apache Beam.
Apache Beam é um avançado modelo de programação de processamento de dados portátil, unificado e de código aberto. Com ele, os usuários finais podem definir pipelines de processamento paralelo de dados em lote e streaming usando Java, Python ou Go. Além disso, os pipelines do Apache Beam podem ser executados na máquina de desenvolvimento local em pequenos conjuntos de dados e em escala no Cloud Dataflow. No entanto, como o Apache Beam tem código aberto, há outros executores. Portanto, é possível executar pipelines do Beam no Apache Flink e no Apache Spark, entre outros.
Nesta seção, você irá criar um pipeline do tipo Extrair-Transformar-Carregar no Apache Beam do zero.
Para cada laboratório desta Quest, os dados de entrada são semelhantes aos registros do servidor da Web no formato de registro comum (link em inglês), junto a outros dados que um servidor da Web pode conter. Neste primeiro laboratório, os dados são tratados como uma fonte em lote: nos próximos, eles serão tratados como uma fonte em streaming. Sua tarefa é ler os dados, analisá-los e gravá-los no BigQuery, que é um armazenamento de dados sem servidor, para análise posterior.
Antes de começar a editar o código do pipeline real, você precisa verificar se instalou as dependências necessárias.
1 hora
O script cria um arquivo chamado events.json
com linhas semelhantes a estas:
Em seguida, ele copia automaticamente esse arquivo para o bucket do Google Cloud Storage em
events.json
.Clique em Verificar meu progresso para conferir o objetivo.
Encontre soluções para dúvidas sobre esta ou outras seções neste link (link em inglês).
1_Basic_ETL/lab
e clique em my_pipeline.py. O arquivo vai ser aberto em um painel de edição. Verifique se os pacotes a seguir foram importados:run()
. No momento, esse método contém um pipeline que não faz nada. Observe como um objeto Pipeline é criado usando um objeto PipelineOptions (links em inglês) e a linha final do método executa o pipeline:Todos os dados nos pipelines do Apache Beam residem em PCollections (link em inglês). Para criar a PCollection
inicial do pipeline, você precisará aplicar uma transformação de raiz ao objeto de pipeline. A transformação raiz cria uma PCollection
de uma fonte de dados externa ou de alguns dados locais que você especificar.
Há dois tipos de transformações raiz nos SDKs do Beam: leitura e criação. Leitura: as transformações leem dados de uma fonte externa, como um arquivo de texto ou uma tabela de banco de dados Criação: as transformações criam uma PCollection
de uma lista
na memória e são especialmente úteis para testes.
O código de exemplo a seguir mostra como aplicar uma transformação raiz ReadFromText
para ler dados de um arquivo de texto. A transformação é aplicada a um objeto p
do Pipeline
e retorna um conjunto de dados de pipeline na forma de uma PCollection[str]
usando a notação de dicas de tipo parametrizado (link em inglês). "ReadLines" é o nome da transformação. Ela será útil quando você trabalhar com pipelines maiores:
No método run()
, crie uma constante de string chamada "input" e defina o valor dela como gs://<YOUR-PROJECT-ID>/events.json
. Em um laboratório futuro, você usará parâmetros de linha de comando para transmitir essas informações.
Crie uma PCollection
de strings de todos os eventos no events.json
chamando a transformação textio.ReadFromText
(link em inglês).
Adicione as instruções de importação adequadas ao topo do my_pipeline.py
.
Para salvar seu trabalho, clique em Arquivo e selecione Salvar no menu de navegação superior.
$BASE_DIR
e execute os seguintes comandos. Antes de executar o pipeline, defina a variável de ambiente PROJECT_ID
:No momento, o pipeline apenas lê dados.
No entanto, a execução dele demonstra um fluxo de trabalho útil. Nele, você verifica o pipeline localmente e de maneira econômica usando o DirectRunner (link em inglês) em execução na máquina local antes de fazer cálculos mais caros. Para executar o pipeline usando o Google Cloud Dataflow, mude runner
para DataflowRunner (link em inglês).
Se tiver dificuldades, veja a solução (link em inglês).
As transformações são o que mudam seus dados. No Apache Beam, as transformações são feitas pela classe PTransform (link em inglês). No ambiente de execução, essas operações serão realizadas em vários workers independentes.
A entrada e a saída para cada PTransform
são uma PCollection
. Na verdade, talvez você não tenha percebido, mas já usou uma PTransform
ao ler dados do Google Cloud Storage. Uma PCollection
de strings foi criada, independentemente da atribuição a uma variável.
Como o Beam usa um método de aplicação genérico para PCollection
s, representado pelo operador de barra vertical |
no Python, é possível encadear transformações de maneira sequencial. Por exemplo, é possível encadear transformações para criar um pipeline sequencial como este:
Nesta tarefa, você usará um novo tipo de transformação: ParDo (link em inglês). ParDo
é uma transformação do Beam para processamento paralelo genérico.
O paradigma de processamento de ParDo
é semelhante à fase "Map" de um algoritmo no estilo Mapear/Embaralhar/Reduzir: uma transformação ParDo
considera cada elemento na PCollection
de entrada, realiza alguma função de processamento (seu código de usuário) nesse elemento e emite zero, um ou vários elementos a uma PCollection
de saída.
O ParDo
é útil para várias operações comuns de processamento de dados. No entanto, há PTransform
s especiais no Python para tornar o processo mais simples, incluindo os seguintes:
Filter
para considerar cada elemento em uma PCollection
e enviar o elemento para uma nova PCollection
, ou descartá-lo dependendo do resultado de um Python chamável que retorna um valor booleano.PCollection
de entrada tiver elementos de um tipo ou formato diferente do que você quer, use Map
para realizar uma conversão em cada elemento e enviar o resultado para uma nova PCollection
.PCollection
de registros com vários campos, por exemplo, também é possível usar Map
ou FlatMap
para analisar apenas os campos que quer considerar em uma nova PCollection
.ParDo
, Map
ou FlatMap
para executar cálculos simples ou complexos em cada elemento (ou determinados elementos) de uma PCollection
e gerar os resultados como uma nova PCollection
.Para concluir esta tarefa, você precisa escrever uma transformação Map
que leia em uma string JSON representando um evento único, analise usando o pacote json
de Python e gere os resultados que o dicionário retornou em json.loads
.
As funções Map
podem ser implementadas de duas maneiras: in-line ou com uma chamada predefinida. Escreva funções Map
in-line desta forma:
Como alternativa, é possível usar beam.Map
com uma função Python chamável definida anteriormente no script:
Se você precisar de mais flexibilidade do que a oferecida por beam.Map
(e outros DoFn
s leves), implemente ParDo
com DoFn
s personalizados que são da subclasse DoFn (link em inglês). Isso facilita a integração com frameworks de teste.
Se tiver dificuldades, confira a solução (link em inglês).
Neste ponto, o pipeline lê um arquivo do Google Cloud Storage, analisa cada linha e gera um dicionário Python para cada elemento. O próximo passo é gravar esses objetos em uma tabela do BigQuery.
generate_batch_events.sh
. É possível examinar o conjunto de dados com o seguinte código:Para gerar as PCollection
s finais do pipeline, aplique uma transformação Write a essa PCollection
. As transformações Write podem gerar elementos de uma PCollection
em um coletor de dados externo, como uma tabela de banco de dados. É possível usar Write para gerar uma PCollection
a qualquer momento no pipeline, embora o normal seja gravar os dados no final do pipeline.
O código de exemplo a seguir mostra como aplicar uma transformação WriteToText
para gravar uma PCollection
de string em um arquivo de texto:
WriteToText
, use WriteToBigQuery
(link em inglês).Essa função exige vários fatores, como a tabela específica a ser gravada e o esquema dela. Como alternativa, especifique se você pretende anexar a uma tabela, recriar tabelas (útil na iteração inicial do pipeline) ou criar a tabela. Por padrão, essa transformação cria tabelas que não existem e não grava em tabelas que não estejam vazias.
str
), ID (do tipo int
) e saldo (do tipo float
). Em seguida, podemos especificar o esquema em uma única linha:Ou especifique como JSON:
No primeiro caso (a string única), todos os campos são considerados NULLABLE
. Ao usar a abordagem JSON, é possível especificar o modo.
WRITE_TRUNCATE
sempre exclui e recria sua tabela. Isso é útil na iteração inicial do pipeline, especialmente à medida que você faz iterações no esquema. No entanto, isso pode causar problemas não intencionais na produção com facilidade. As opções WRITE_APPEND
ou WRITE_EMPTY
são mais seguras.Lembre-se de definir o esquema da tabela e adicionar o coletor do BigQuery ao seu pipeline. Se tiver dificuldades, confira a solução (link em inglês).
DataflowRunner
para executar o pipeline no Cloud Dataflow.A forma geral precisa ter um único caminho, começando pela transformação Read
e terminando com a transformação Write
. À medida que o pipeline é executado, os workers são adicionados automaticamente, enquanto o serviço determina as necessidades do pipeline, e desaparecem quando não são mais necessários. É possível encontrar esse processo ao acessar o Compute Engine (link em inglês) e acessar as máquinas virtuais criadas pelo serviço Dataflow.
runner
novamente como DirectRunner
para que ele seja executado no local e receba feedback mais rápido. Nesse caso, essa abordagem funciona porque o conjunto de dados é pequeno e você não está usando recursos incompatíveis com o DirectRunner
.
Se o código não estiver funcionando conforme o esperado e você não souber o que fazer, confira a solução (link em inglês).
Clique em Verificar meu progresso para conferir o objetivo.
Aproximadamente 20 minutos
Grande parte do trabalho dos engenheiros de dados é previsível, como jobs recorrentes, ou é semelhante a outros trabalhos. No entanto, o processo para executar pipelines exige experiência em engenharia. Veja as etapas que você acabou de concluir:
Seria muito melhor se houvesse uma maneira de iniciar um job por uma chamada de API ou sem ter que configurar um ambiente de desenvolvimento, já que usuários sem conhecimentos técnicos não conseguiriam realizar esse processo. Com isso, também seria possível executar pipelines.
Os modelos do Dataflow tentam resolver esse problema mudando a representação criada quando um pipeline é compilado para parametrização. Infelizmente, esse processo não é tão simples quanto a exposição de parâmetros de linha de comando, mas isso será feito em outros laboratórios. Com os modelos do Dataflow, o fluxo de trabalho acima fica da seguinte forma:
Neste laboratório, você vai praticar o uso de um dos diversos modelos do Dataflow criados pelo Google para realizar a mesma tarefa do pipeline criado na parte 1.
Assim como antes, você precisa passar um modelo Dataflow para um arquivo JSON que represente o esquema neste exemplo.
logs.logs
:sed
extras são para criar um objeto JSON completo esperado pelo Dataflow.Clique em Verificar meu progresso para conferir o objetivo.
O modelo do Dataflow do Cloud Storage para o BigQuery exige uma função JavaScript para converter o texto bruto em um JSON válido. Nesse caso, cada linha de texto é um JSON válido, e a função não tem tanta importância.
Para concluir esta tarefa, crie um novo arquivo na pasta dataflow_python no Explorador de arquivos do seu ambiente de desenvolvimento integrado.
Para criar um Novo arquivo, clique em Arquivo >> Novo >> Arquivo de texto.
Clique com o botão direito do mouse para renomear o arquivo como transform.js.
Abra o arquivo transform.js no painel de edição e clique nele para abri-lo.
Copie a função abaixo para seu próprio arquivo transform.js e salve:
Clique em Verificar meu progresso para conferir o objetivo.
events.json
no formato schema.json
no formato .js
no formato transform
.Durante a execução do job, é possível inspecioná-lo na IU da Web do Dataflow.
Clique em Verificar meu progresso para conferir o objetivo.
O código do modelo do Dataflow que você acabou de usar está neste guia TextIOToBigQuery (link em inglês).
Role para baixo até encontrar o método principal. O código precisa ser semelhante ao pipeline que você criou.
Pipeline
, que foi criado usando um objeto PipelineOptions
.PTransform
s, começando com uma transformação TextIO.read().Confira o próximo laboratório, que aborda a criação de pipelines que não são simplesmente cadeias de PTransform
s e como adaptar um pipeline que você criou para ser um modelo personalizado do Dataflow.
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:
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.
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
One lab at a time
Confirm to end all existing labs and start this one