Alura > Cursos de Data Science > Cursos de Engenharia de Dados > Conteúdos de Engenharia de Dados > Primeiras aulas do curso Engenharia de Analytics: implementando um pipeline ETL com AWS Glue

Engenharia de Analytics: implementando um pipeline ETL com AWS Glue

Preparando o ambiente na AWS - Apresentação

Já pensou em construir um pipeline de processamento de dados utilizando ferramentas cloud como a AWS? Quer desenvolver um projeto de Engenharia de Analytics para aprimorar suas habilidades práticas? Neste curso, faremos a implementação de um pipeline de ETL utilizando o AWS Glue.

Meu nome é Afonso Rios, sou instrutor na Escola de Dados, e te dou boas-vindas a este curso!

Audiodescrição: Afonso se descreve como um homem de pele morena, com cabelos lisos castanho-escuros, barba castanha-escura, e olhos castanho-escuros. Ele veste uma camisa azul-escura, e ao fundo, há uma parede clara e lisa com iluminação esverdeada.

O que vamos aprender?

Ao longo deste curso, vamos atuar como pessoas engenheiras júnior de Analytics, participando de um treinamento para uma vaga no time de dados da Zoop, uma grande varejista que atende a todo o Brasil. Neste treinamento, o head de Dados nos forneceu uma amostra com três bases da Zoop:

Com isso em mãos, utilizaremos os serviços da AWS para analisar esses dados, criando relatórios e dashboards ao final desta formação. Este é o primeiro curso da formação, no qual focaremos na ingestão e tratamento dos dados para consultas e análises.

Durante essa jornada, iremos armazenar os dados no bucket S3, vamos construir as camadas Bronze e Silver para a ingestão dos dados, e também aprenderemos a criar pipelines de processamento de dados utilizando ferramentas da AWS.

Além disso, realizaremos o processo de ETL dos dados, preparando-os para consultas e análises, e conheceremos diversos recursos da AWS Glue, como, por exemplo:

Também realizaremos consultas ad-hoc, isto é, consultas instantâneas, utilizando o AWS Athena. Por fim, aprenderemos a controlar gastos na AWS, verificando quanto gastamos no projeto.

Tudo isso será feito seguindo os passos repassados pela liderança, desde a ingestão e o tratamento dos dados, até o dado pronto para consultas e análises.

Importante! Alguns recursos que utilizaremos possuem custos. Sempre que chegarmos a um ponto em que haverá custos relacionados ao projeto, deixaremos um aviso. Atente-se a essas explicações, para evitar cobranças indevidas e concluir o curso com o menor custo possível.

Quais são os requisitos?

Para melhor aproveitamento do curso, é ideal ter conhecimentos em linguagem Python, especialmente, sobre a biblioteca PySpark, que faz a interface entre o Apache Spark e o Python, para tratar dados em grande volume. Além disso, é importante saber um pouco sobre Cloud Computing.

Conclusão

Uma vez alinhadas as expectativas, podemos dar início ao nosso projeto!

Preparando o ambiente na AWS - Conhecendo as bases de dados

Estamos participando de um treinamento para o cargo de Engenharia de Analytics na Zoop, uma grande varejista que atende em todo o Brasil. Nosso primeiro desafio será receber bases da Zoop e realizar tratamentos de dados com elas no ambiente da AWS, para podermos fazer consultas, bem como criar dashboards e relatórios, trazendo insights para decisões estratégicas.

Conhecendo as bases de dados

Para solucionar esse primeiro desafio, o head de Dados nos forneceu três bases de dados, com as quais trabalharemos realizando a ingestão no ambiente da AWS, o Amazon Web Services.

Passaremos por todas as funcionalidades e recursos utilizados no processo de ETL (Extract, Transform and Load), que é a extração, tratamento e carga desses dados.

A partir disso, surgem as seguintes questões:

Acessando o notebook no Google Colab

Começaremos analisando um notebook no Google Colab, que já contém as três bases que aplicaremos no ambiente da AWS, apenas para visualizar o conteúdo das tabelas.

Ao clicar no ícone "Arquivos", no menu lateral à esquerda, encontramos as três bases:

Treinamento EA - Zoop.ipynb:

Importando a biblioteca Pandas

Com as três bases adicionadas ao notebook, vamos importar a biblioteca Pandas para ler as tabelas. Para isso, em uma nova célula, faremos o import de pandas com o apelido pd.

Feito isso, ainda na mesma célula, iremos declarar três variáveis: vendas, estoques e redes_sociais. Utilizaremos o método pd.read_parquet() para ler os arquivos no formato .parquet, passando entre parênteses o caminho onde eles estão localizados.

import pandas as pd

vendas = pd.read_parquet("vendas_zoop_bronze.parquet")
estoques = pd.read_parquet("estoques_zoop_bronze.parquet")
redes_sociais = pd.read_parquet("redes_sociais_zoop_bronze.parquet")

Após executar a célula, conseguimos salvar em variáveis as três tabelas.

Conhecendo a tabela de vendas

Analisaremos primeiro a tabela de vendas (vendas). Para isso, em uma nova célula, vamos utilizar o comando vendas.head(), para exibir as cinco primeiras linhas da tabela.

vendas.head()
#ID_vendaDiaMêsAnoHorarioCanal_vendaOrigem_vendaID_produtoProdutoCategoria_produtoQuantidadeMetodo_pagamentoID_clienteNome_clienteGenero_clienteIdade_clienteCidade_clienteUF_clienteRegiao_clienteAvaliacao
00208202108:58:00Loja 2Loja3CafeteiraEletrodomésticos3Cartão de débito21Manuella PereiraFeminino28Campo GrandeMato Grosso do SulCentro-Oeste4
11208202111:32:00Loja 1Loja14ImpressoraEletrônicos1Dinheiro218Maria Sophia RiosFeminino40UberlândiaMinas GeraisSudeste3
22208202113:19:00Loja 1Loja29Máquina de caféEletrodomésticos2Cartão de crédito277Ana Sophia MarquesFeminino34CampinasSão PauloSudeste5
33208202113:42:00Loja 2Loja3CafeteiraEletrodomésticos1PIX282Clara RezendeFeminino39São GonçaloRio de JaneiroSudeste3
44208202114:49:00Loja 1Loja8Micro-ondasEletrodomésticos1Cartão de débito295Thiago LimaMasculino59Foz do IguaçuParanáSul2

Como retorno, recebemos uma tabela com 21 colunas no total, incluindo dados relativos ao tempo da compra (Dia, Mês e Ano), ao horário da compra (Horario), e a canais onde a compra foi realizada (Canal_venda), por exemplo.

Além disso, temos características sobre o produto, como o tipo (Produto) e a categoria (Categoria_produto), e também características do próprio cliente, como o gênero (Genero_cliente), a idade (Idade_cliente), a cidade (Cidade_cliente), entre outros dados.

Note que há bastante informação para explorar apenas com essa base de dados.

Conhecendo a tabela de estoques

Em seguida, podemos conferir a tabela de estoques (estoques). Ao executar o comando estoques.head(), conseguimos verificar que há menos colunas na tabela.

estoques.head()
#ID_estoqueID_produtoProdutoCategoria_produtoDataHorarioQuantidade_em_estoqueQuantidade_novos_produtosQuantidade_vendida
000Smart_TV_55"Eletrônicos2021/07/0121:45:00100200
111FrigobarEletrodomésticos2021/07/0120:13:00100290
222Ventilador_de_tetoEletrodomésticos2021/07/0113:30:00100160
333CafeteiraEletrodomésticos2021/07/0106:20:00100100
444SmartphoneEletrônicos2021/07/0114:33:00100490

Nessa tabela, encontramos colunas como ID_estoque, ID_produto, Produto, Categoria_produto, bem como Data e Horario de chegada do produto no estoque.

Ao final, há três variáveis interessantes: Quantidade_em_estoque; Quantidade_novos_produtos; e Quantidade_vendida. Basicamente, trata-se de um controle de estoques.

Conhecendo a tabela de redes sociais

Por fim, para visualizar a tabela de redes sociais (redes_sociais), vamos primeiro ajustar a exibição das colunas, com o método pd.set_option() recebendo os parâmetros 'display.max_colwidth', 100. Feito isso, na mesma célula, podemos utilizar o comando redes_sociais.head().

pd.set_option('display.max_colwidth', 100)
redes_sociais.head()
#ID_socialDataInfluencia_autorPlataformaNome_produtoCategoria_produtoComentario
002021-09-077864X (Twitter)CafeteiraEletrodomésticosEstou impressionado com a qualidade e a eficiência. #Cafeteira Nota 4
112021-09-3060503X (Twitter)ImpressoraEletrônicosProduto ok, mas achei o preço um pouco elevado. #Impressora Nota 3
222021-09-1986828X (Twitter)Máquina de caféEletrodomésticosProduto incrível! Desempenho muito acima da média. #Maquinadecafe Nota 5
332021-09-1928615X (Twitter)CafeteiraEletrodomésticosProduto bom, mas nada excepcional. #Cafeteira Nota 3
442021-09-1238424FacebookMicro-ondasEletrodomésticosProduto ruim. Esperava muito mais. #Micro-ondas Nota 2

Esse código nos permite visualizar todo o texto em uma coluna. Ao ler redes_sociais.head(), identificamos na tabela as colunas ID_social, Data, Influencia_autor, Plataforma, Nome_produto, Categoria_produto, e Comentario.

Observação: na coluna Comentario, temos o texto do comentário, a hashtag do produto, e uma nota. Seria útil se a nota fosse uma coluna; faremos esse tratamento futuramente.

Conhecendo a planilha de instruções

Além desses dados, recebemos instruções do head de Dados sobre ajustes necessários em cada tabela. Essas informações estão organizadas em um arquivo chamado Zoop_ETL_AWS.xlsx.

Neste arquivo, encontramos, por exemplo, uma planilha específica com características das redes sociais, listando os tipos de dados necessários nas colunas, as descrições das transformações a serem feitas, e os nomes das colunas a serem criadas ou modificadas.

Planilha Redes Sociais do arquivo Zoop_ETL_AWS.xlsx:

Nome da ColunaTipo de dadoDescrição da transformação
ID_sociallongN/A
DatadateN/A
Influencia_autorintN/A
PlataformastringN/A
Nome_produtostringN/A
Categoria_produtostringN/A
AvaliacaointCriar coluna. Extrair nota que está no final da coluna Comentário
ComentariostringModificar coluna. Retirar a expressão "Nota ?"

Por exemplo: na tabela de redes sociais (redes_sociais), criaremos uma coluna de avaliação (Avaliacao) e modificaremos a coluna de comentário (Comentario).

Já tabela de estoques (estoques), faremos modificações em mais de uma coluna. Observe abaixo:

Planilha Estoques do arquivo Zoop_ETL_AWS.xlsx:

Nome da ColunaTipo de dadoDescrição da transformação
ID_estoquelongN/A
ID_produtolongN/A
ProdutostringModificar coluna. Trocar "_" por espaço nos nomes dos produtos
Categoria_produtostringN/A
DatadateModificar coluna. Transformar coluna em data válida
HorariotimestampN/A
Quantidade_em_estoqueintN/A
Quantidade_novos_produtosintN/A
Quantidade_vendidaintN/A

Por fim, na tabela de vendas (vendas), haverá exclusão, criação e modificação de colunas.

Planilha Vendas do arquivo Zoop_ETL_AWS.xlsx:

Nome da ColunaTipo de dadoDescrição da transformação
ID_vendalongN/A
Dia-Excluir coluna
Mês-Excluir coluna
Ano-Excluir coluna
DatadateCriar coluna. Concatenar valores de dia, mês e ano em uma só
HorariotimestampN/A
Canal_vendastringN/A
Origem_vendastringN/A
ID_produtolongN/A
ProdutostringN/A
Categoria_produtostringModificar coluna. Preencher dados faltantes das categorias de acordo com o produto
Preco_unitariodoubleN/A
QuantidadeintN/A
Metodo_pagamentostringN/A
ID_clientelongN/A
Nome_clientestringN/A
Genero_clientestringN/A
Idade_clienteintN/A
Cidade_clientestringN/A
UF_clientestringModificar coluna. Trocar estados por extenso em siglas
Regiao_clientestringN/A
AvaliacaointN/A

Assim, concluímos que há bastante trabalho a ser feito por meio do ETL na AWS.

Conclusão

Conseguimos observar os dados que vamos tratar e entender os ajustes necessários. Agora, vamos iniciar nosso projeto na AWS. Para isso, precisamos entender o pipeline dos dados, como será o processamento, e quais recursos e serviços utilizaremos. Abordaremos isso no próximo vídeo!

Preparando o ambiente na AWS - Entendendo a pipeline

Em um projeto de Engenharia de Analytics na AWS, precisamos definir quais serviços e recursos serão necessários para atingir determinado objetivo. Neste caso, vamos criar um pipeline de ingestão e tratamento de dados para consultas e criação de dashboards.

Para isso, precisamos entender como será a arquitetura na AWS para alcançar esse resultado.

Entendendo a pipeline

Já temos as bases de dados de vendas (vendas), estoques (estoques) e redes sociais (redes_sociais) que utilizaremos nesse processo.

Com base nisso, como será a nossa arquitetura para comportar todas as informações?

Analisando um fluxograma do processo

Para entender melhor a arquitetura, trouxemos um fluxograma que explica todo o processo de ingestão, tratamento e carga dos dados para consultas que realizaremos ao longo do curso, além dos serviços e recursos necessários para cada uma dessas etapas. Observe-o abaixo:

Fluxograma de arquitetura em nuvem AWS exibindo o fluxo de dados e processos de segurança. À esquerda, 'BASES ZOOP' conecta 'ARQUIVOS .PARQUET' a duas camadas S3, 'BRONZE' e 'SILVER'. No centro, 'PROCESSAMENTO DE DADOS' inclui 'AWS GLUE CRAWLER', 'AWS GLUE DATA CATALOG', 'AWS GLUE DATA QUALITY' e 'AWS GLUE ETL JOB', todos conectados sequencialmente. À direita, 'CAMADA DE SEGURANÇA' destaca 'IAM', e logo abaixo, temos 'AMAZON ATHENA' conectado a 'AWS GLUE DATA CATALOG'. O fluxograma é representado sobre um fundo escuro com linhas de conexão em verde e elementos em tons de verde e cinza.

Observação: quando chegarmos ao momento específico de cada um desses elementos e serviços, haverá explicações detalhadas sobre o que cada um realiza dentro do pipeline.

No fluxograma, temos à esquerda a parte das bases que recebemos do head de Data, que consiste em arquivos .parquet com as bases de vendas, estoques e redes sociais.

Dentro do retângulo maior, temos o AWS Cloud, que representa tudo que estará no ambiente da AWS. Começamos pelo bucket S3, simbolizado pela caixa "S3 CAMADA BRONZE".

A camada bronze é a que recebe os dados brutos. Sendo assim, faremos a ingestão diretamente na camada bronze, que será a primeira etapa do nosso projeto dentro da AWS.

No interior do retângulo maior, podemos observar um retângulo menor pontilhado, que representa o momento do processamento dos dados, utilizando vários recursos do AWS Glue.

Entre os recursos, temos o AWS Glue Crawler, responsável por ler e catalogar os dados, puxando-os do S3 e construindo tabelas no Data Catalog. O AWS Glue Data Catalog armazena as informações das tabelas e os metadados, disponibilizando-os para outros serviços do AWS Glue, como o AWS Glue ETL Job, que realiza o processo de ETL, transformando as tabelas dos dados brutos do S3.

Após o processamento, voltamos para fora do retângulo pontilhado, na caixa "S3 CAMADA SILVER", correspondente à camada Silver. Esta camada contém os dados processados, transformados e harmonizados, prontos para serem utilizados em consultas e outras situações necessárias.

Além disso, no processamento de dados, temos também o recurso AWS Glue Data Quality, responsável por assegurar a qualidade dos dados. Esses dados processados seguem regras e processos específicos para verificar se estão com a qualidade necessária para uso.

Fora do retângulo pontilhado, à direita, temos o Amazon Athena, responsável por realizar consultas de dados no Data Catalog. Por fim, no canto superior direito, está a camada de segurança da AWS, o IAM, um usuário que utilizaremos para todos esses processos, evitando o uso da raiz.

Após este vídeo, disponibilizaremos uma atividade em que você criará seu próprio usuário de IAM para realizar todos esses processos no decorrer do curso.

Conclusão

Importante! Parte desses recursos, principalmente o AWS Glue, possui custos de utilização. Sempre que passarmos por processos que exigem cuidado com essa questão para evitar cobranças indevidas, deixaremos um aviso. Portanto, preste atenção nas orientações quando elas forem apresentadas ao longo das aulas.

Esta é a arquitetura da AWS que vamos implementar e criar no projeto. Agora, precisamos iniciar o primeiro processo na AWS: uma vez criado o usuário de IAM, estaremos prontos para realizar a ingestão dos dados no bucket S3. Nos encontramos no próximo vídeo!

Sobre o curso Engenharia de Analytics: implementando um pipeline ETL com AWS Glue

O curso Engenharia de Analytics: implementando um pipeline ETL com AWS Glue possui 176 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Engenharia de Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas