top of page

Coffee and Tips Newsletter

Inscreva-se na nossa newsletter semanal

Nos vemos em breve!

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

  • Foto do escritor: JP
    JP
  • há 4 horas
  • 8 min de leitura

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:



  • 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).


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


AWS Athena

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



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


AWS S3


Ao acessar, clique no botão superior direito Criar Bucket


AWS s3


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


AWS S3

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:


aws s3 bucket

Basta clicar em Criar pasta:


AWS s3

Crie cada uma das pastas abaixo:


  1. raw/products/ (dados brutos (CSV/JSON))

  2. curated/products/ (dados prontos para consumo (Parquet))

  3. athena-results/ (resultados de queries do Athena)


AWS S3

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


  1. 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 raw/products/.


AWS S3

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.



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

AWS Athena


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.


AWS Athena

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?


AWS Athena

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.


AWS Athena


Execute os Scripts


Execute os scripts por vez abaixo:


Criando o Database

CREATE DATABASE IF NOT EXISTS coffeetips_raw;

AWS Athena

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');
Aws Athena

Tabela criada conforme imagem abaixo:


Aws Athena
  1. 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;

AWS Athena


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


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


AWS S3

Veja a tabela no Athena, o campo category está classificada como Particionado.


aws athena partition

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.


aws athena


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?

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




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!


 
 
 

Comentários


bottom of page