AWS Data Engineering Bootcamp explicado de forma simples (com diagramas e código real)

AWS Data Engineering Bootcamp: o essencial em um artigo — código real, diagramas e etapas concretas, extraídos de um curso de 17 lições.

AWS Data Engineering Bootcamp explicado de forma simples (com diagramas e código real)

Um guia direto ao ponto: AWS Data Engineering Bootcamp dissecado com diagramas, exemplos concretos e comandos testados. Tudo vem de um curso estruturado de 5 capítulos — aqui está o melhor.

tl;dr
  • Introdução à Engenharia de Dados AWS
  • Particionamento e Bucketização
  • Athena e Glue em Ação
  • Cardinalidade e Otimização Avançada
  • Laboratório guiado Athena
~$ cat ./parcours.md # AWS Data Engineering Bootcamp — 5 capítulos
01
Introdução à Engenharia de Dados AWS
→ Capítulo 00 – Lição 1 : Conceitos-Chave em Engenharia de Dados→ Capítulo 00 – Lição 2 : Data Warehouses e suas Equivalências na Nuvem+ 1 mais lições
02
Particionamento e Bucketização
→ Capítulo 01 – Lição 1 : Particionamento e Bucketização em um Data Lake→ Capítulo 01 – Lição 2 : A Bucketização nos Data Warehouses+ 1 mais lições
03
Athena e Glue em Ação
→ Capítulo 02 – Lição 1 : Amazon Athena — Conceitos-Chave e Arquitetura→ Capítulo 02 – Lição 2 : Configurar Athena e Criar um Banco de Dados Glue+ 2 mais lições
04
Cardinalidade e Otimização Avançada
→ Capítulo 03 – Lição 1 : Views SQL, Consultas Nomeadas e AWS CloudFormation→ Capítulo 03 – Lição 2 : Permissões IAM para Athena e Glue — Boas Práticas+ 2 mais lições
05
Laboratório guiado Athena
→ Capítulo 04 (OPCIONAL) – Lab 1 : Criar um Banco de Dados e uma Tabela AWS Glue no Athena→ Capítulo 04 (OPCIONAL) – Lab 2 : Bucketing, Particionamento e Formato Parquet+ 1 mais lições
🏁
Projeto final
→ Você sai com um projeto concreto e demonstrável

Capítulo 02 – Lição 3 : Otimização por Bucketing e Particionamento no Athena

NOTEObjetivo — Aplicar bucketing e particionamento em dados reais no Athena e medir a melhoria de desempenho e a redução de custos.

Otimização por Bucketing no Athena

Por que o Bucketing?

O bucketing distribui os dados em vários arquivos de acordo com uma chave de hash. Ele melhora consideravelmente o desempenho quando você trabalha com colunas de alta cardinalidade.

Reduzir o scan

O Athena direciona apenas os buckets necessários durante uma consulta.

Melhorar os joins

Quando duas tabelas são bucketizadas na mesma chave, o Athena realiza "bucket joins" muito rápidos.

Alta cardinalidade

Ideal para user_id, transaction_id, device_id.

Exemplo Prático : Transações E-Commerce Bucketizadas

output
-- Etapa 1 : Configurar o bucketing durante a criação da tabela
-- Substitua user_id pela sua coluna de alta cardinalidade
CLUSTERED BY (user_id) INTO 8 BUCKETS

-- Exemplo completo com CTAS (Create Table As Select)
CREATE TABLE taxidata.transactions_bucketized
WITH (
    format = 'PARQUET',
    external_location = 's3://mon-bucket/transactions-bucketized/',
    bucketed_by = ARRAY['user_id'],
    bucket_count = 8
) AS
SELECT *
FROM taxidata.transactions_source;
TIPVerificação no S3 — Após a criação, você deve ver 8 arquivos no S3 :
s3://mon-bucket/transactions-bucketized/
├── 000000_0.parquet
├── 000001_0.parquet
├── ...
└── 000007_0.parquet

Etapas para Configurar o Bucketing

Otimização por Particionamento no Athena

Estrutura das Partições no S3

O particionamento organiza os dados em diretórios distintos no S3 de acordo com os valores de uma coluna de baixa cardinalidade :

bash
# Estrutura das partições no S3 (formato Hive)
s3://taxi-datalake/yellow/
├── year=2015/month=01/
│   └── data.parquet
├── year=2015/month=02/
│   └── data.parquet
├── year=2016/month=01/
│   └── data.parquet
└── year=2017/month=01/
    └── data.parquet

Criar uma Tabela Particionada via CTAS

output
-- CTAS (Create Table As Select) com particionamento
-- Conversão CSV → Parquet COM particionamento
CREATE TABLE taxidata.yellow_partitioned
WITH (
    format = 'PARQUET',
    external_location = 's3://taxi-datalake/yellow-partitioned/',
    partitioned_by = ARRAY['year', 'month']
) AS
SELECT
    vendor, pickup, dropoff, count,
    distance, ratecode, storeflag, pulocid, dolocid,
    paytype, fare, extra, mta_tax, tip, tolls, surcharge, total,
    YEAR(pickup) AS year,
    MONTH(pickup) AS month
FROM taxidata.yellow;
NOTEImportante — As colunas de partição (year, month) devem ser listadas em último no SELECT e no array partitioned_by.

Descobrir as Partições

output
-- Após adicionar dados, descobrir as novas partições
MSCK REPAIR TABLE taxidata.yellow_partitioned;

-- Adicionar manualmente uma partição específica
ALTER TABLE taxidata.yellow_partitioned
ADD PARTITION (year='2017', month='02')
LOCATION 's3://taxi-datalake/yellow-partitioned/year=2017/month=02/';

Consultas Otimizadas com o Particionamento

output
-- Consulta SEM particionamento : scan de TODA a tabela
SELECT COUNT(*), SUM(fare) AS total_fares
FROM taxidata.yellow
WHERE YEAR(pickup) = 2017 AND MONTH(pickup) = 1;
-- → Scan : 100% dos dados (ex: 1 TB)

-- Consulta COM particionamento : scan apenas da partição relevante
SELECT COUNT(*), SUM(fare) AS total_fares
FROM taxidata.yellow_partitioned
WHERE year = 2017 AND month = 1;
-- → Scan : ~1/36 dos dados (se 3 anos × 12 meses)
-- → Redução de ~97% dos dados escaneados !

Combinação Otimizada : Particionamento + Bucketing

Capítulo 02 – Lição 2 : Configurar o Athena e Criar um Banco de Dados Glue

NOTEObjetivo — Configurar o ambiente Athena, criar um banco de dados AWS Glue, definir uma tabela externa sobre dados S3 e executar as primeiras consultas SQL.

Etapa 1 — Configurar o Ambiente Athena

WARNINGPré-requisito obrigatório — Antes de qualquer consulta no Athena, configure o bucket S3 para os resultados. Sem isso, o Athena recusará executar suas consultas.
bash
# Alternativa : configurar via AWS CLI
aws athena update-work-group \
  --work-group primary \
  --configuration-updates "ResultConfigurationUpdates={OutputLocation=s3://mon-bucket-athena-results/}"

Etapa 2 — Criar um Banco de Dados Glue

No editor do Athena, execute :

output
-- Criar o banco de dados taxidata no AWS Glue Data Catalog
CREATE DATABASE taxidata;
TIPResultado — Este comando cria um banco de dados taxidata no AWS Glue Data Catalog. Você pode visualizá-lo no console do Glue em "Databases".
bash
# Verificar a criação via AWS CLI
aws glue get-database --name taxidata

# Listar todos os bancos de dados
aws glue get-databases

Etapa 3 — Definir o Esquema da Tabela (Dataset Táxis NYC)

Vamos criar a tabela externa yellow sobre os dados de táxis de Nova York armazenados no S3 :

output
-- Criar a tabela externa yellow sobre os dados S3
CREATE EXTERNAL TABLE IF NOT EXISTS taxidata.yellow (
   `vendor`    string,
   `pickup`    timestamp,
   `dropoff`   timestamp,
   `count`     int,
   `distance`  int,
   `ratecode`  string,
   `storeflag` string,
   `pulocid`   string,
   `dolocid`   string,
   `paytype`   string,
   `fare`      decimal,
   `extra`     decimal,
   `mta_tax`   decimal,
   `tip`       decimal,
   `tolls`     decimal,
   `surcharge` decimal,
   `total`     decimal
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
   'serialization.format' = ',',
   'field.delim' = ','
) LOCATION 's3://aws-tc-largeobjects/CUR-TF-200-ACDSCI-1/Lab2/yellow/'
TBLPROPERTIES ('has_encrypted_data'='false');
NOTEExplicação dos parâmetros chave :
  • CREATE EXTERNAL TABLE — a tabela aponta para o S3, o Athena não copia os dados
  • LazySimpleSerDe — serializador/desserializador para arquivos CSV delimitados
  • field.delim = ',' — os campos são separados por vírgulas
  • LOCATION — caminho S3 contendo os arquivos de dados
  • has_encrypted_data='false' — os dados não estão criptografados

Etapa 4 — Visualizar os Dados

output
-- Visualizar as 10 primeiras linhas
SELECT * FROM taxidata.yellow LIMIT 10;

-- Contar o número total de viagens
SELECT COUNT(*) AS total_trajets FROM taxidata.yellow;

-- Verificar os tipos de pagamento disponíveis
SELECT DISTINCT paytype, COUNT(*) AS nb_trajets
FROM taxidata.yellow
GROUP BY paytype
ORDER BY nb_trajets DESC;

Etapa 5 — Criar uma Tabela Otimizada (Janeiro 2017)

output
-- Criar uma tabela para os dados de janeiro de 2017 apenas
-- Mais rápida para testes e validação
CREATE EXTERNAL TABLE IF NOT EXISTS taxidata.jan (
   `vendor`    string,
   `pickup`    timestamp,
   `dropoff`   timestamp,
   `count`     int,
   `distance`  int,
   `ratecode`  string,
   `storeflag` string,
   `pulocid`   string,
   `dolocid`   string,
   `paytype`   string,
   `fare`      decimal,
   `extra`     decimal,
   `mta_tax`   decimal,
   `tip`       decimal,
   `tolls`     decimal,
   `surcharge` decimal,
   `total`     decimal
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
   'serialization.format' = ',',
   'field.delim' = ','
) LOCATION 's3://aws-tc-largeobjects/CUR-TF-200-ACDSCI-1/Lab2/January2017/'
TBLPROPERTIES ('has_encrypted_data'='false');

Capítulo 03 – Lição 1 : Views SQL, Consultas Nomeadas e AWS CloudFormation

NOTEObjetivo — Criar views SQL no Athena para simplificar as análises, definir consultas nomeadas reutilizáveis e automatizar sua implantação com AWS CloudFormation.

As Views SQL no Athena

Uma view SQL é uma consulta salva que você pode usar como uma tabela. Ela não armazena dados — ela executa a consulta subjacente a cada chamada.

TIPVantagem das views — Simplifique consultas complexas, crie camadas de abstração e compartilhe análises padronizadas com sua equipe.

Exemplo 1 : View das Viagens por Cartão de Crédito

output
-- Criar uma view para pagamentos com cartão de crédito
-- paytype = '1' significa pagamento com cartão
CREATE VIEW taxidata.cctrips AS
SELECT
    vendor,
    SUM(fare)  AS total_fares_cc,
    COUNT(*)   AS nb_trajets_cc,
    AVG(fare)  AS tarif_moyen_cc
FROM taxidata.yellow
WHERE paytype = '1'
GROUP BY vendor;

-- Usar a view
SELECT * FROM taxidata.cctrips;

Exemplo 2 : View das Viagens em Dinheiro

output
-- Criar uma view para pagamentos em dinheiro
-- paytype = '2' significa pagamento em dinheiro
CREATE VIEW taxidata.cashtrips AS
SELECT
    vendor,
    SUM(fare)  AS total_fares_cash,
    COUNT(*)   AS nb_trajets_cash,
    AVG(fare)  AS tarif_moyen_cash
FROM taxidata.yellow
WHERE paytype = '2'
GROUP BY vendor;

-- Usar a view
SELECT * FROM taxidata.cashtrips;

Exemplo 3 : View de Comparação com CTE (WITH)

output
-- View de comparação combinando cartão de crédito e dinheiro
-- Uso de CTE (Common Table Expressions) com WITH
CREATE VIEW taxidata.comparepay AS
WITH
    cc AS (
        SELECT
            vendor,
            SUM(fare) AS cctotal,
            COUNT(*)  AS nb_cc
        FROM taxidata.yellow
        WHERE paytype = '1'
        GROUP BY vendor
    ),
    cash AS (
        SELECT
            vendor,
            SUM(fare) AS cashtotal,
            COUNT(*)  AS nb_cash
        FROM taxidata.yellow
        WHERE paytype = '2'
        GROUP BY vendor
    )
SELECT
    cc.vendor,
    cc.cctotal,
    cc.nb_cc,
    cash.cashtotal,
    cash.nb_cash,
    ROUND(cc.cctotal / cash.cashtotal, 2) AS ratio_cc_cash
FROM cc
JOIN cash ON cc.vendor = cash.vendor;

-- Consulta na view
SELECT * FROM taxidata.comparepay ORDER BY ratio_cc_cash DESC;

Gerenciamento de Views

output
-- Listar as views disponíveis
SHOW VIEWS IN taxidata;

-- Ver a definição de uma view
SHOW CREATE VIEW taxidata.comparepay;

-- Substituir uma view existente
CREATE OR REPLACE VIEW taxidata.cctrips AS
SELECT
    vendor,
    SUM(fare) AS total_fares_cc,
    COUNT(*) AS nb_trajets_cc
FROM taxidata.yellow
WHERE paytype = '1'
GROUP BY vendor;

-- Excluir uma view
DROP VIEW taxidata.cashtrips;

As Consultas Nomeadas no Athena

As consultas nomeadas (Named Queries) permitem salvar consultas SQL usadas com frequência diretamente no Athena. Elas são compartilhadas dentro da sua conta AWS.

Vantagens

Limitação

Automatizar com AWS CloudFormation

Em vez de criar manualmente as consultas nomeadas pelo console, você pode implantá-las como código com o AWS CloudFormation.

Template CloudFormation para uma Consulta Nomeada

Crie um arquivo chamado athenaquery.cf.yml :

output
AWSTemplateFormatVersion: 2010-09-09
Description: "Requête Athena nommée pour l'analyse des taxis NYC"

Resources:
  AthenaNamedQuery:
    Type: AWS::Athena::NamedQuery
    Properties:
      Database: "taxidata"
      Description: "Sélection des trajets dont le montant dépasse 100 $"
      Name: "FaresOver100DollarsUS"
      QueryString: >
        SELECT
            distance,
            paytype,
            fare,
            tip,
            tolls,
            surcharge,
            total
        FROM yellow
        WHERE total >= 100.0
        ORDER BY total DESC

Outputs:
  AthenaNamedQuery:
    Description: "L'ID de la requête nommée Athena créée"
    Value: !Ref AthenaNamedQuery

Implantar o Template CloudFormation via AWS CLI

bash
# Etapa 1 : Validar o template antes da implantação
aws cloudformation validate-template \
    --template-body file://athenaquery.cf.yml

# Etapa 2 : Criar a stack CloudFormation
aws cloudformation create-stack \
    --stack-name mon-athena-stack \
    --template-body file://athenaquery.cf.yml \
    --capabilities CAPABILITY_IAM

# Etapa 3 : Verificar o estado da criação
aws cloudformation describe-stacks \
    --stack-name mon-athena-stack \
    --query 'Stacks[0].StackStatus'

# Etapa 4 : Listar as consultas nomeadas criadas
aws athena list-named-queries \
    --work-group primary

# Etapa 5 : Obter detalhes de uma consulta nomeada
aws athena get-named-query \
    --named-query-id "ID_RETOURNÉ_PAR_LIST"
va-plus-loin

Este artigo cobre os trechos mais úteis — o curso completo AWS Data Engineering Bootcamp (5 capítulos, 17 lições, exercícios corrigidos e projeto final) leva você até o fim.

./acceder-au-cours-complet curso gratuito : Dominando o Claude Code

FAQ

Quanto tempo para aprender o AWS Data Engineering Bootcamp?
Com uma progressão estruturada (5 capítulos, 17 lições curtas e práticas), você atinge um nível operacional em algumas semanas dedicando 30 a 60 minutos por dia. O importante é praticar cada conceito imediatamente.
É necessário algum pré-requisito?
Básicos de informática são suficientes. Se você sabe usar um terminal e ler código simples, está pronto.
Por onde começar concretamente?
Reproduza os comandos deste artigo e depois siga o curso completo AWS Data Engineering Bootcamp : ele encadeia as 17 lições em ordem, com exercícios e projeto final.

📬 Quer receber este tipo de guia toda semana? Inscreva-se gratuitamente — código real, zero enrolação.