top of page

#8 Armazenamento e Consumo de Dados na Nuvem com AWS Athena e S3

Série: Trilha prática para se tornar Engenheiro de Dados – Capítulo 8 Pré-requisitos importantes antes de começar este capítulo Antes de mergulhar no capítulo, garanta que você tem: Ter acompanhado os Capítulos 1 a 7 e o ambiente preparado conforme mostrado neles: Capítulo 1: Seu primeiro pipeline ETL Capítulo 2: Python + SQL – a dupla inseparável Capítulo 3: Data Lake, Data Warehouse e o conceito de Lakehouse Capítulo 4: Orquestração de Pipelines com Airflow Capítulo 5:Apache Spark: Processamento Distribuído de Dados na Prática Capítulo 6:Orquestração de Pipelines: Airflow e Spark na prática Capítulo 7:Persistência e Formatos de Dados: CSV, JSON e Parquet Ter uma conta na AWS ( Free Tier Serve ) Usuário com permissão para S3 , Athena  e Glue  (pode usar AdministratorAccess em dev/teste) Usar de preferencia a região US-EAST-1 Ter configurado AWS CLI (neste post mostramos como configurar) Ter um arquivo CSV  ou Parquet  para subir (vamos te ajudar a gerar também). O que você vai aprender S3 como Data Lake Pense no S3 como uma pasta gigante e infinita na nuvem , onde você pode armazenar dados em qualquer formato: CSV, JSON e Parquet (que você já aprendeu) Logs, arquivos brutos, datasets públicos, etc. Você também vai aprender: Como organizar pastas/prefixos (raw, curated...) Versionamento e camadas de dados Boas práticas para não virar um “data swamp” 🐊 Athena como banco de dados sem servidor (SQL serverless) O Athena permite você consultar arquivos do S3 usando SQL , sem instalar nada, sem configurar servidor, sem cluster. Você vai aprender: Como criar tabelas que apontam para seus arquivos Consultar dados direto do Data Lake Executar filtros, agregações e análises Quando usar Athena (e quando não usar) Glue Data Catalog O Glue é como um Google Drive do seu Data Lake  — mas para tabelas e schemas. Você vai aprender: O que são metadados e por que eles importam Como o Athena usa o Catálogo como “dicionário de dados” Como registrar tabelas e colunas para o Athena entender seus arquivos Mão na Massa: do CSV ao Parquet no S3 + consultas SQL Você vai praticar: Tudo com comandos, prints e exemplos comentados — passo a passo. Custo e Performance — sem sustos Athena cobra por dados lidos na consulta. Então, você vai aprender: 👉 Por que Parquet é MUITO mais barato que CSV 👉 Como partições reduzem custo e aumentam velocidade 👉 Como monitorar quanto suas consultas consumiram 👉 O que evita (erros comuns que custam dinheiro) Spoiler: você vai aprender a rodar queries gastando centavos  😉 E no final, você vai saber: Como consultar dados via SQL na nuvem Boas práticas para dados escaláveis e baratos Conceitos de arquitetura moderna Data Lake + SQL Engine Como empresas usam isso no mundo real Estruturando seu Data Lake no S3 Vamos começar sem enrolação, crie um Bucket S3 usando o Console da AWS, segue os print abaixo: Na console, acesse o serviço S3 Ao acessar, clique no botão superior direito Criar Bucket No campo Nome do Bucket, você deve preencher o nome do seu bucket. Lembrando que bucket devem ser exclusivos, por isso vamos seguir o seguinte padrão de nomenclatura:
coffeetips-datalake-<seu-nome> Na imagem abaixo, estou criando o nome coffeetips-datalake-joao-paulo Caso queria usar o CLI , use os comandos abaixo no seu terminal: aws s3 mb s3://coffeetips-datalake-<seu-nome>
aws s3api put-bucket-versioning --bucket coffeetips-datalake-joao --versioning-configuration Status=Enabled Veja, este nome que criei, não poderá ter nenhum outro igual, ou seja, é único. Após criar o Bucket, vamos criar as pastas: Basta clicar em Criar pasta : Crie cada uma das pastas abaixo: raw/products/ (dados brutos (CSV/JSON)) curated/products/ (dados prontos para consumo (Parquet)) athena-results/ (resultados de queries do Athena) Use o arquivo abaixo Para facilitar, use o arquivo CSV abaixo para auxiliar no Tutorial: Neste arquivo possui alguns registros que serão usados na criação das tabelas e análises nas próximas seções. Subindo arquivos para o S3 Existem diversas maneiras de subir arquivos para o S3, você pode subir manualmente, através do CLI como é mostrado a seguir e por fim, através de um próprio serviço da AWS usando SDK. Pelo Console Acesse o S3 novamente, selecione o Bucket e pasta que foi criado. Para este exemplo, suba os arquivos products.csv na pasta r aw/products/. Pelo CLI aws s3 cp data/products.csv s3://coffeetips-datalake-joao-paulo/raw/products/ Via SDK Não é o intuito desse post mas vou deixar um exemplo prático de como fazer uploads para o S3 através da SDK da AWS. Upload de arquivo no S3 com AWS SDK e Java Configurando o AWS Athena (primeiro uso) Certo, no início do Post fizemos uma breve introdução sobre o Athena, de fato é uma ferramenta para análise exploratória de dados analíticos muito utilizada. Eu mesmo utilizo bastante no dia a dia, basta ter cuidado em adotar boas práticas para que dados sejam bem consumidos sem gastar muitos doletas escaneando um alto volume de dados.

Mas bora lá, acesse o Athena e clique em Iniciar editor de consultas conforme imagem abaixo.
Pronto, agora você está tendo o primeiro acesso a esta poderosa ferramenta. Agora siga os passos abaixo de forma objetiva e breve, sem enrolação.

Como próximo passo, acesse a aba Configurações e em seguida, clique em Gerenciar . Na tela seguinte, preencha o campo Location of query result usando o endereço da pasta que foi criada no início do tutorial. Atente-se em colocar o nome do seu bucket, GG? Agora, vamos explorar o Athena , a melhor parte desse tutorial! Volte na aba Editor conforme imagem abaixo e execute os scripts a seguir no console. Execute os Scripts Execute os scripts por vez abaixo: Criando o Database CREATE DATABASE IF NOT EXISTS coffeetips_raw; que criamo Criando a tabela externa Novamente, lembre-se de alterar o Location  baseado no nome do Bucket que você criou. CREATE EXTERNAL TABLE IF NOT EXISTS products_csv (
id int,
title string,
description string,
category string,
price double,
discountPercentage double,
rating double,
stock int,
brand string,
sku string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim' = ',', 'skip.header.line.count'='1'
)
LOCATION 's3://coffeetips-datalake-joao-paulo/raw/products/'
TBLPROPERTIES ('has_encrypted_data'='false');
Tabela criada conforme imagem abaixo: Explorando o Athena Agora que criamos o Banco de Dados e Tabela apontando para o CSV, vamos executar algumas queries no Athena para validar. Rodando o Script SQL Execute o Script abaixo para validarmos os registros de origem do CSV. SELECT id, title, price, rating
FROM products_csv
ORDER BY price DESC
LIMIT 5; Criando uma tabela Parquet Agora iremos criar uma tabela em formato Parquet, porém iremos reutilizar os dados da tabela products_csv e executar um CTAS (CREATE TABLE AS SELECT) para extrair os dados dessa tabela e transforma-los em formato Parquet. O formato Parquet tem cada vez mais sido adotado no mercado pelo fato de possibilitar o consumo ser mais performático e barato devido a sua estrutura colunar. Falamos sobre Parquet no capítulo 7 , vai lá e dá uma lembrada se quiser. Para isso, execute o script abaixo que em breve iremos discutir sobre este algumas particularidades de alguns parâmetros. CREATE TABLE coffeetips_raw.products_part
WITH (
format = 'PARQUET',
parquet_compression = 'SNAPPY',
external_location = ' s3://coffeetips-datalake-joao-paulo/curated/products/ ',
partitioned_by = ARRAY['category']
) AS
SELECT
id,
title,
description,
price,
rating,
brand,
sku,
category
FROM coffeetips_raw.products_csv;
Lembre-se de alterar o Location para o endereço do seu Bucket. Perceba que estamos criando uma tabela chamado products_part , pois estamos usando uma novidade até então, a partição (partitioned_by). Iremos falar mais com detalhes na próxima seção, porém, tenha certeza que tudo executou perfeitamente e a tabela foi criada. Trabalhando com Particionamento Após a criação da tabela com partição no exemplo anterior, iremos falar sobre Particionamento . É um termo bastante usado em Engenharia de Dados, é basicamente uma forma de organizar os dados por pastas diminuindo o alto volume de Scans e consequentemente provendo um melhor desempenho nas consultas SQL. Particionamento x Cardinalidade Uma regra simples para definir uma coluna como partição é com base na cardinalidade, ou seja, quanto menor a cardinalidade, melhor será o efeito do particionamento. Como isso funciona na prática? Na tabela criada existe o campo category , pressupõe que existem menos categorias que ids únicos. Isso é um exemplo de baixa cardinalidade, diferente da coluna id , que pode ter alta cardinalidade. (1 milhão de Ids únicos por exemplo.)

Imagine que teremos 10 ou mais diferente categorias, nesse caso teremos no máximo dezenas de pastas de partições. Melhor do que ter 1 milhão de pastas. Veja no S3, após a execução do comando acima, foi criado uma pasta para cada categoria , no caso temos 29 diferentes categorias. Veja a tabela no Athena, o campo category está classificada como Particionado . Agora que criamos uma tabela Parquet e devidamente particionada, execute um query nessa tabela e veja se retornou os registos. Não retornou? Que bom, Isso pode acontecer! O mesmo aconteceu comigo, veja a imagem abaixo. Uma particularidade das partições é que ela possui um mecanismo onde é preciso registra-las para que os dados possam ser retornados. Isso é uma particularidade do Hive (catalogo usado pelo AWS Glue) Não entrarei no detalhe, mas para resolver isso é bem simples, basta executar o comando abaixo no console do Athena para registrar todas as partições do catalogo de Dados. MSCK REPAIR TABLE `products_part`; Quer ver as partições criadas? Execute o comando abaixo: SHOW PARTITIONS coffeetips_raw.products_part; Pronto, agora é só brincar e executar alguns comando SQL retornando alguns registros! Veja uma Query abaixo onde é feito um filtro pela partição (category) criada, mude as categorias e divirta-se! SELECT brand, avg(price) AS avg_price
FROM coffeetips_raw.products_part
WHERE category = 'groceries'
GROUP BY brand
ORDER BY avg_price DESC; Um grande ponto de atenção: Após os testes, apague todos os recursos evitando que a AWS te cobre no futuro, combinado? Parquet x Desempenho Quando executou algumas Queries, você percebeu alguma diferença no resultado? Foi mais rápido a consulta? Talvez.. A verdade que como o volume de registros é baixo e temos poucos arquivos Parquet, você não vai perceber ou não verá diferença. Porém em um ambiente produtivo, usar arquivos Parquet e adotar uma estratégia de partição é EXTREMAMENTE importante! A diferença é notada quando temos milhões de registros e centenas ou milhares de arquivos.  Conclusão Neste capítulo você aprendeu sobre a importância do uso do AWS Athena para consumir dados em Parquet e CSV, além de ter criado tabelas e ter aprendido o conceito de particionamento. Veja bem, todo este conteúdo é de grande importância na Engenharia de Dados, são pontos que farão a diferença no seu dia a dia, desde quem está no mercado até para aqueles que tem interesse em entrar na área. Leituras recomendadas Capítulo 1: Seu primeiro pipeline ETL Capítulo 2: Python + SQL – a dupla inseparável Capítulo 3: Data Lake, Data Warehouse e o conceito de Lakehouse Capítulo 4: Orquestração de Pipelines com Airflow Capítulo 5:Apache Spark: Processamento Distribuído de Dados na Prática Capítulo 6:Orquestração de Pipelines: Airflow e Spark na prática Capítulo 7:Persistência e Formatos de Dados: CSV, JSON e Parquet Introdução ao Apache Hive com Spark e Java Diferenças entre tabelas externas e internas usando Hive Diferentes classes de armazenamento do S3 Configurando S3 Bucket event notification com SQS via Terraform Entendendo AWS S3 em 1 minuto Upload de arquivo no S3 com AWS SDK e Java O que vem a seguir? 👉 Capítulo 9 – Data Quality e Observabilidade de Dados na prática Gostou desse capítulo? 👉 Assine a newsletter Coffee & Tips  e receba os próximos capítulos direto no seu e-mail. 👉 Pré-venda exclusiva Em breve também vamos lançar um E-Book avançado , com tutoriais em Spark, Airflow, Redshift, tudo para você se tornar um Engenheiro de Dados! Cadastre-se agora na lista de pré-venda  e garanta: Acesso antecipado antes do lançamento oficial 🚀 Benefícios exclusivos para inscritos 💡 Conteúdo extra que não estará disponível gratuitamente Fique ligado!

#8 Armazenamento e Consumo de Dados na Nuvem com AWS Athena e S3
bottom of page