Transformação Serverless com AWS Glue e DataBrew
Construa o julgamento de transformação do Domínio 1 desde a base: como o modelo de jobs serverless do AWS Glue, o Data Catalog, os DynamicFrames, os job bookmarks e os gatilhos se encaixam; como dimensionar workers e cobrar DPU-horas na tabela de preços de outubro de 2026; quando as receitas e o profiling do AWS Glue DataBrew superam ETL escrito à mão; e como tabelas de erro, novas tentativas, job insights, gravações particionadas e higiene de arquivos pequenos mantêm um pipeline correto, com quatro estudos de caso de clientes da AWS, uma caixa de atualizações de 2026 com fonte, um gráfico interativo de preços e catorze questões no estilo de exame.
Transformação é onde o julgamento de um engenheiro de dados se torna visível. Ingestão pode ser comprada como um tubo gerenciado; armazenamento pode ser alugado pelo gigabyte. Mas decidir qual motor roda o job, quanta capacidade ele ocupa enquanto roda, quais registros são processados na segunda execução e para onde vão as linhas rejeitadas; isso é trabalho de design, e é exatamente o que o Domínio 1 do DEA-C01 (Ingestão e Transformação de Dados, 34% do exame; pesos pelo guia de exame DEA-C01, acesso em outubro de 2026) examina por meio das declarações de tarefa "preparando dados para transformação (AWS Glue DataBrew)", "usando recursos do AWS Glue para processar dados" e "usando Lambda para automatizar o processamento de dados".
====================================================================
A SUPERFÍCIE DE DECISÃO DA TRANSFORMAÇÃO (DEA-C01 DOMÍNIO 1)
====================================================================
Motor ............... AWS Glue Spark (ETL serverless)
AWS Glue Python shell (processo único)
AWS Glue streaming (Spark Structured Streaming)
AWS Glue Ray (workers Z.2X)
AWS Glue DataBrew (receitas sem código + profiling)
AWS Lambda (micro-transformações de menos de 15 min)
Representação ........ DynamicFrame (autodescritivo, tipos choice)
vs DataFrame (schema deve ser resolvido)
Incrementalidade ..... job bookmarks (lote) / checkpoints + watermarks
(streaming)
Orquestração ......... gatilhos: agendado | condicional | sob demanda
| evento (EventBridge)
Capacidade ........... tipos de worker G./R./Z. + NumberOfWorkers,
cobrados em DPU-horas (1 DPU = 4 vCPU + 16 GB)
Design de falha ....... tabelas de erro, Spigot, EvaluateDataQuality,
novas tentativas, timeouts, job run insights
====================================================================Nesta lição você vai:
- modelar o job serverless do Glue: tipos de jobs, anatomia, integração com o Data Catalog, estados de execução e timeouts;
- separar DynamicFrame de DataFrame e conduzir
resolveChoice→apply_mapping→toDF()na ordem certa; - operar job bookmarks: Enable / Disable / Pause,
job.initejob.commit,transformation_ctxcomo chave de estado, e as cinco maneiras de quebrá-los; - ligar gatilhos em topologias serial, condicional e agendada, e conhecer os dois limites duros de gatilho;
- dimensionar workers e DPU-horas na lista de preços de outubro de 2026, incluindo a armadilha de memória G vs R e o mínimo de 10 minutos do crawler;
- criar com ETL visual do Glue Studio: nós, notebooks, a sessão de pré-visualização de dados e os limites de importação do nó Recipe;
- escolher o DataBrew corretamente: seus seis objetos centrais, o teto de 100 passos da receita, receita vs jobs de perfil, e sua medição sem DPU;
- projetar tratamento de erros:
ErrorsAsDynamicFrame,Spigot,EvaluateDataQuality, novas tentativas, padrões de timeout e onde vivem as tabelas de erro; - ajustar desempenho: gravações particionadas, job run insights, agrupamento de arquivos de entrada, aritmética de arquivos pequenos e auto scaling do Glue;
- estudar quatro estudos de caso de clientes da AWS (BMW Group, PayU, Integral Ad Science e Nasdaq) e uma caixa de atualizações de outubro de 2026 com fonte;
- praticar com 14 questões no estilo de exame mais quatro verificações interativas.
1. Fundamentos do Glue ETL: um motor Spark serverless com um catálogo anexado
1.1 O que "serverless" significa aqui
O AWS Glue é um serviço de ETL serverless: você define um job, a AWS provisiona e desmonta o ambiente de execução Spark (ou shell), e você paga apenas enquanto o job roda, cobrado por segundo (jobs e sessões interativas são cobrados em incrementos de 1 segundo, arredondados para cima, com mínimo de 1 minuto para jobs Spark: preços do AWS Glue, acesso em outubro de 2026). Não há cluster para manter quente, AMI para atualizar nem nó para aposentar. O Data Catalog que os crawlers preenchem é a cola entre armazenamento e computação: os schemas vivem no catálogo, os dados vivem no S3 (ou fontes JDBC), e os jobs leem os dois.
1.2 Tipos de jobs e linguagens
Tipo de job | JobCommand.Name | Runtime | Cobrado como | Encaixe no exame |
|---|---|---|---|---|
Spark ETL | glueetl | PySpark / Scala no Spark | DPU-hora (mín. 1 min) | Transformações em massa de GB: TB, joins, gravações particionadas em lake |
Spark streaming | gluestreaming | Spark Structured Streaming | DPU-hora (2 DPU padrão) | Micro-batch contínuo de fontes Kinesis/Kafka |
Python shell | pythonshell | Python 3.9 em processo único (Glue 3.0+) | DPU-hora a 0,0625 ou 1 DPU | Trabalho não-Spark > 15 minutos: pulls de API, movimentação de arquivos, SQL leve |
Ray | ray (worker Z.2X) | Ray sobre Python | M-DPU-hora | Cargas de trabalho Python paralelas (por exemplo, estilo Pandas) |
Rotas de autoria: scripts PySpark/Scala, Python (shell ou Ray), autoria visual no Glue Studio e notebooks interativos (Pandas no Spark, SQL no Spark). Um job do Glue é montado a partir de: o comando, tipo e contagem de workers, uma role de IAM, connections opcionais, uma security configuration opcional, gatilhos, um timeout, novas tentativas, argumentos padrão e MaxConcurrentRuns.
MaxConcurrentRuns tem padrão 1, e a API de jobs da AWS afirma explicitamente: "O padrão é 1. Um erro é retornado quando este limite é atingido." Esse padrão também é sua primeira linha de defesa para os job bookmarks, que não são seguros para concorrência (Seção 3).
1.3 Estados de execução, timeouts e histórico
Item | Valor (API do AWS Glue, acesso em outubro de 2026) |
|---|---|
Estados de execução | STARTING RUNNING STOPPING STOPPED SUCCEEDED FAILED TIMEOUT ERROR WAITING EXPIRED |
WAITING | a execução está na fila: capacidade ou posição de gatilho, não uma falha |
Padrão de timeout | 2.880 minutos no Glue 4.0 e anteriores · 480 minutos no Glue 5.0 e posteriores |
Teto de timeout | deve ser menor que 7 dias (10.080 minutos) |
Novas tentativas | MaxRetries; NotifyDelayAfter levanta um alerta quando uma execução é atrasada |
Histórico de execuções | retido por 90 dias |
1.4 Anatomia do job e integração com o Data Catalog
Duas propriedades desse diagrama são examináveis:
- O catálogo é metadado, não armazenamento. Os crawlers são cobrados separadamente dos jobs (Seção 5), e um job pode rodar com ou sem um crawler na mesma cadeia de gatilhos.
- O estado do bookmark vive fora do script.
job.inito lê,job.commito grava, e nenhuma das duas chamadas é opcional se você habilitou os bookmarks (Seção 3).
- 📚 Você sabia? O Glue registra cada execução com seu estado e mantém o histórico de 90 dias, e
WAITINGsimplesmente significa na fila. Combinado comMaxConcurrentRunsno padrão 1, uma execução que parece "presa" emWAITINGestá te contando sobre capacidade ou posição de gatilho: não sobre seu código (API de job-runs do AWS Glue, acesso em outubro de 2026).
2. DynamicFrame versus DataFrame: o conceito do Glue mais testado
2.1 As duas representações
Propriedade | DataFrame (Spark) | DynamicFrame (Glue) |
|---|---|---|
Requisito de schema | O schema deve ser resolvido antes da maioria das operações | "Cada registro é autodescritivo, então nenhum schema é necessário inicialmente" (guia do desenvolvedor do AWS Glue, acesso em outubro de 2026) |
Valores ambíguos | Alarga para o tipo mais geral (geralmente string) ou falha | Carrega um tipo choice genuíno, por exemplo choice<long,string>, quando as linhas discordam |
Erros em nível de linha | Falha ou converte silenciosamente | Preservados como linhas de erro ( ErrorsAsDynamicFrame) |
API de transformação | Métodos do DataFrame | Transformações do Glue: resolveChoice, apply_mapping, Relationalize, Join, Spigot, EvaluateDataQuality, … |
Conversão | : | toDF() apenas depois que os choices forem resolvidos |
2.2 Por que tipos choice aparecem: a armadilha da amostragem do crawler
A própria amostra da AWS (dados de provedores do Medicaid) é a ilustração canônica: um crawler que inspecionou apenas um prefixo de 2 MB inferiu a coluna provider-id como long. Um DataFrame construído sobre todo o conjunto de dados encontrou valores que a amostra nunca viu e forçou tudo para string. Um DynamicFrame reportou corretamente choice<long,string>: as linhas genuinamente discordavam. O bug está na amostra de inferência de schema, não nos dados, e a correção pertence ao script.
2.3 resolveChoice: resolver a ambiguidade
resolveChoice(specs=…, choice=…, database=…, table_name=…) oferece quatro ações para uma coluna choice (referência da API da AWS, acesso em outubro de 2026):
Ação | O que faz | Efeito colateral que você deve prever |
|---|---|---|
cast:TYPE | Converte cada valor para TYPE | Valores que não convertem viram null |
project:TYPE | Mantém apenas os valores já do tipo TYPE | Os valores do outro tipo são descartados |
make_cols | Uma coluna por tipo: col_long, col_string | O schema alarga para colunas irmãs |
make_struct | Aninha ambos em um struct | O código a jusante deve ler campos do struct |
MATCH_CATALOG (via database + table_name) | Alinha ao tipo declarado no catálogo | Exige uma tabela no catálogo |
choice<long,string> --cast:long--> long (não conversível -> null)
--project:long--> long (strings descartadas)
--make_cols--> provider_id_long + provider_id_string
--make_struct--> {c_long, c_string}2.4 apply_mapping: renomear, cast, aninhar, descartar
apply_mapping(mappings, case_sensitive=False, …) recebe uma lista de quadruplas:
(coluna_origem, tipo_origem, coluna_destino, tipo_destino)
("provider id", "string", "provider.id", "string") # destino pontilhado aninha
("zip", "string", "zip", "bigint") # cast no lugar
("legacy_col", "string", "", "") # destino vazio -> descartaRegras que custam pontos no exame: use crase num nome de origem que contenha um ponto literal; um destino pontilhado cria um campo aninhado (provider.id); e case_sensitive tem padrão False.
2.5 A ordem não é negociável
⚠️ resolveChoice antes de apply_mapping antes de toDF(). apply_mapping assume um tipo por coluna já resolvido; converter para DataFrame com um choice não resolvido força a coluna para um tipo geral (geralmente string) e derrota silenciosamente o cast que você faria. A ordem é a diferença entre uma chave bigint limpa e uma tabela de strings preenchidas.
2.6 Exemplo resolvido E1: IDs de provedor ambíguos
Entrada: 160.000 linhas, coluna "provider id"
crawler (amostra de 2 MB) diz long | 2 linhas dizem string | DynamicFrame diz choice<long,string>
Passo 1 resolveChoice([('provider id', 'cast:long')])
-> coluna é long; os 2 valores não conversíveis viram null
Passo 2 apply_mapping([('provider id','long','provider.id','long'),
('name','string','name','string'),
('legacy_flag','string','','')]) # aninhar + descartar
Passo 3 toDF() -> schema agora fixado e tipado
Passo 4 sink.write(frame, format='parquet',
partitionKeys=['year','month','day'])
Leitura: cast é com perdas (nulls), project é destrutivo (descarta valores das linhas),
make_cols é aditivo, make_struct é reestruturante.2.7 Transformações embutidas de DynamicFrame que valem ser nomeadas
Relationalize · UnnestFrame · Map · FlatMap · Join · Spigot · ErrorsAsDynamicFrame · EvaluateDataQuality · FlagDuplicatesInColumn · SelectFields · DropFields · FillMissingValues · mergeDynamicFrame · FindMatches (referência de transformações PySpark do AWS, acesso em outubro de 2026). O exame testa reconhecimento: qual transformação roteia rejeições, qual amostra a saída, qual testa regras.
Como responder
Exercício de ordenação com 5 itens. Coloque-os na ordem correta e verifique a resposta.
Ordene o pipeline de DynamicFrame do Glue como a AWS o documenta:
3. Job bookmarks: processamento incremental em lote sem duplicatas
3.1 Os três modos
Modo | Comportamento | Padrão? |
|---|---|---|
Enable | Atualiza o estado do bookmark a cada execução e processa apenas o delta desde o último commit | Não |
Disable | Processa todo o conjunto de dados a cada execução | Sim |
Pause | Processa incrementalmente, mas não atualiza o estado | Não |
3.2 Como o estado é mantido
O estado do bookmark é armazenado pelo serviço do Glue como mais ou menos {job_name, run_id, run_number, attempt_number, states: {transformation_ctx: state}}, com chave de nome do job mais versão. Seu script participa com exatamente duas chamadas: job.init lê o estado no início, job.commit o grava no fim. O guia do desenvolvedor da AWS é direto: "Bookmarks não funcionam sem chamá-los."
E a regra-chave, literalmente da página de bookmarks da AWS:
"O
transformation_ctxserve como chave para buscar o estado do bookmark de uma fonte específica no seu script. Para que o bookmark funcione corretamente, você deve sempre manter a fonte e otransformation_ctxassociado consistentes."
3.3 Exemplo resolvido E2: a aritmética do delta
Conjunto de dados: s3://raw/orders/ com 1.000 arquivos na primeira habilitação.
Execução 1 (bookmarks acabaram de ser habilitados): 320 arquivos novos -> processados 320, estado -> 320
Execução 2: 410 arquivos novos -> processados 410, estado -> 730
Execução 3: 270 arquivos novos -> processados 270, estado -> 1.000
Arquivos processados em três execuções: 320 + 410 + 270 = 1.000
Total ingênuo de reprocessamento: 1.000 x 3 = 3.000
Sem continuidade de estado, o número errado tentador é 320+410+270 contados
contra um estado resetado, ou 2.680 se a execução 1 fosse anterior à habilitação.
Lição: bookmarks deduplicam a SAÍDA em relação às FONTES rastreadas - o
estado é a única coisa que lembra o que "já processado" significa.3.4 Quando os bookmarks quebram (a lista favorita de falhas do exame)
Falha | O que realmente acontece |
|---|---|
Você muda um caminho de fonte mas mantém o mesmo transformation_ctx | O estado deixa de corresponder à realidade → arquivos pulados ou faltando |
Duas execuções rodam concorrentemente | Commits disputam; o estado fica confiável → mantenha MaxConcurrentRuns = 1 |
Você espera um rewind | Não existe. Reset existe; rewind não |
reset-job-bookmark | Reseta todas as transformações do job de uma vez e não apaga as saídas que você já gravou |
Você assume que destinos são rastreados | Apenas arquivos de fonte são rastreados, nunca destinos |
Você apaga o job do Glue | Seu bookmark é apagado junto |
Fonte JDBC sem chave de bookmark | Você precisa escolher as colunas-chave do bookmark você mesmo |
Job de streaming | Bookmarks são o mecanismo errado: streaming usa checkpointLocation + watermarks |
- 📚 Você sabia? A própria redação da AWS para a garantia é que os bookmarks "evitam processamento duplicado e dados duplicados": a frase "exactly-once" é uma sigla que o mundo do exame usa, mas o modelo honesto é processamento at-least-once com saídas deduplicadas, porque apenas fontes são rastreadas e uma execução com falha entre
job.initejob.commitdeixa o estado intocado. Nunca reivindique uma garantia do lado do destino que você não consiga apontar na estrutura de estado (guia do desenvolvedor do AWS Glue, acesso em outubro de 2026).
Como responder
Exercício de preenchimento com 6 lacunas. Digite as palavras que faltam e verifique a resposta.
Complete as afirmações sobre job bookmarks com o próprio vocabulário do guia do desenvolvedor da AWS:
O estado do bookmark tem como chave espaço mais uma versão, e a chave por fonte dentro do estado é o espaço da fonte. O script deve chamar espaço no início e espaço na conclusão: a AWS afirma que bookmarks não funcionam sem chamá-los. Os três modos são espaço (padrão, conjunto de dados inteiro), Enable (delta, estado atualizado) e Pause (delta, estado não atualizado), e o estado é resetado com o comando da CLI espaço.
Banco de Palavras, arraste as palavras para os espaços acima:
4. Gatilhos: topologias serial, condicional e agendada
4.1 Os quatro tipos de gatilho
Type da API | Nome no console | Dispara quando |
|---|---|---|
SCHEDULED | Scheduled | Uma expressão cron expira |
CONDITIONAL | Conditional | Uma lista de predicados de jobs/crawlers monitorados atinge os status requeridos, unidos por Logical AND / OR |
ON_DEMAND | On-demand | Você o ativa (API/console/CLI) |
EVENT | (nível de API) | Um evento do EventBridge, com EventBatchingCondition {BatchSize, BatchWindow} |
4.2 As regras que fazem gatilhos condicionais funcionarem
- Os jobs monitorados devem terem sido iniciados por um gatilho. Um job que você começou à mão e que depois terminou com sucesso não disparará um gatilho condicional.
- A cadeia deve descer de um gatilho raiz único, agendado ou sob demanda.
- Limites: no máximo 2 crawlers por gatilho; no máximo 50 jobs por gatilho (cotas do AWS Glue, acesso em outubro de 2026).
Serial vs paralelo em uma linha cada: serial = J3 dispara quando J1 AND J2 ambos SUCCEEDED; fan-out = J4 dispara quando J1 OR J2 FAILED. Essa é toda a gramática de gatilho condicional: mais a regra do gatilho raiz, onde vivem a maioria dos erros dos candidatos.
5. Tipos de worker e dimensionamento de DPU: de onde vem a conta
5.1 A unidade
1 DPU = 4 vCPU e 16 GB de memória, e a AWS afirma que "uma única DPU também é chamada de worker." Jobs no Glue 2.0 e posteriores são dimensionados com WorkerType + NumberOfWorkers: nunca com MaxCapacity (esse campo legado pertence ao Glue 1.0 e anteriores; definir ambos é erro). Padrões: jobs Spark 10 DPU, streaming 2 DPU, ambos com mínimo de 2 DPU.
5.2 Catálogo de workers (em outubro de 2026)
Worker | DPU por worker | vCPU | Memória | Disco (livre) | Restrição |
|---|---|---|---|---|---|
G.1X | 1 | 4 | 16 GB | 94 GB (44 GB livres) | Todo Spark; padrão para Glue ≥2.0 |
G.2X | 2 | 8 | 32 GB | 138 GB (78 GB livres) | Recomendado para transformações de ML |
G.4X | 4 | 16 | 64 GB | 256 GB (230 GB livres) | Glue ≥3.0 (Regiões limitadas) |
G.8X | 8 | 32 | 128 GB | 512 GB (485 GB livres) | Glue ≥3.0 (Regiões limitadas) |
G.12X | 12 | 48 | 192 GB | 768 GB (741 GB livres) | Glue ≥4.0 |
G.16X | 16 | 64 | 256 GB | 1024 GB (996 GB livres) | Glue ≥4.0 |
G.025X | 0,25 | 2 | 4 GB | 84 GB (34 GB livres) | Apenas streaming, ≥3.0 |
R.1X / R.2X / R.4X / R.8X | 1 / 2 / 4 / 8 M-DPU | 4 / 8 / 16 / 32 | 32 / 64 / 128 / 256 GB | igual aos pares G | Otimizado para memória (≥4.0) |
Z.2X | 2 M-DPU | 8 | 64 GB | 128 GB (~120 GB livres) | Apenas Ray, até 8 workers Ray |
M-DPU significa "dobrar a alocação de memória para um determinado tamanho em comparação com DPUs padrão."
⚠️ A família G não compra memória por CPU. Todo worker G mantém a razão 4 vCPU: 16 GB; apenas a família R. dobra essa razão (4 vCPU: 32 GB). Mover de G.1X para G.4X, portanto, não conserta uma falha por falta de memória: apenas dá a mesma razão quatro vezes mais rápido e quatro vezes mais largo. OOM → R.; shuffle/desbalanceamento → mais workers; trabalho single-thread genuinamente lento → worker maior.
5.3 A tabela de preços de outubro de 2026
Linha de base us-east-1 (N. Virginia); todo número em outubro de 2026 (taxas do Glue 6.0 anunciadas em 2026-08-21):
Medidor | Glue ≤5.1 | Glue ≥6.0 | Mínimo de cobrança |
|---|---|---|---|
Job Spark / Spark Streaming | $0,44 / DPU-hora | $0,308 / DPU-hora | 1 segundo, arredondado para cima; mínimo de 1 minuto |
Flex execution (G.1X/G.2X, ≥3.0) | $0,29 / DPU-hora | ver página de preços ao vivo | 1 minuto; atraso/interrupção de início possível |
Workers otimizados para memória R (≥4.0) | $0,52 / DPU-hora | ver página de preços ao vivo | 1 minuto |
Sessão interativa / notebook do Studio | $0,44 / DPU-hora | $0,308 / DPU-hora | 1 minuto; 5 DPU padrão, mínimo de 2 DPU |
Python shell (0,0625 ou 1 DPU) | $0,44 / DPU-hora | : | 1 minuto |
Ray | $0,44 / M-DPU-hora | : | 1 minuto |
Crawler do Data Catalog | $0,44 / DPU-hora | : | mínimo de 10 minutos por execução |
Data Quality avaliado em um job de ETL | $0,44 / DPU-hora | $0,308 / DPU-hora | 1 minuto |
Job de receita/perfil do DataBrew | $0,48 / node-hora | : | por nó |
Sessão interativa do DataBrew | $1,00 / bloco de 30 minutos | : | contado a partir da primeira interação |
Os quatro medidores baseados em DPU dessa tabela como um gráfico interativo (mesmas unidades, então são legitimamente comparáveis, o medidor de node-hora do DataBrew é deliberadamente não plotado, porque é uma unidade diferente):
Lendo o gráfico: custo total = DPU × horas × altura da barra. A barra do 6.0 é ~30% menor que a do 5.1 (o corte de preço de 2026-08-21), o Flex compra ~34% de desconto em troca de um possível início atrasado ou interrupção, e a barra do R é o prêmio por memória dobrada por DPU.
5.4 Exemplo resolvido E3: a própria aritmética de DPU-hora da AWS
Job: 6 DPU (por exemplo 6 x G.1X) rodando 15 minutos no Glue <= 5.1
Custo = 6 DPU x 0,25 h x $0,44 / DPU-h = $0,66 por execução (em outubro de 2026)
Mesmo job no Glue 6.0:
Custo = 6 x 0,25 x $0,308 = $0,462 por execução
Economia por execução = $0,66 - $0,462 = $0,198 (~30%)
30 execuções por mês = 30 x $0,198 = $5,94 por mês
Fonte: exemplo resolvido da página de preços do AWS Glue ("6 DPU * 0.25 hour * $0.44,
or $0.66"), em outubro de 2026; taxa do 6.0 do anúncio de 2026-08-21.5.5 Exemplo resolvido E4: Flex versus padrão
Job: 6 DPU x 1/3 hora (em outubro de 2026)
Padrão: 6 x 0,3333 x $0,44 = $0,88
Flex: 6 x 0,3333 x $0,29 = $0,58 (o próprio exemplo resolvido da AWS)
O Flex compra ~34% de desconto aceitando um possível início atrasado e interrupção.
Nunca use Flex para trabalho com SLA; ele existe para jobs interrompíveis e tolerantes a falhas.5.6 Exemplo resolvido E5: a escolha do worker não muda nada no preço
Capacidade alvo: 16 DPU (em outubro de 2026, $0,44/DPU-h no Glue <= 5.1)
16 x G.1X = 16 workers x 1 DPU = 16 DPU -> 16 x $0,44 = $7,04 / hora
8 x G.2X = 8 x 2 = 16 DPU -> 16 x $0,44 = $7,04 / hora
4 x G.4X = 4 x 4 = 16 DPU -> 16 x $0,44 = $7,04 / hora
2 x G.8X = 2 x 8 = 16 DPU -> 16 x $0,44 = $7,04 / hora
Custo idêntico, formatos diferentes: 16 executores no G.1X vs 2 no G.8X,
16 GB vs 128 GB por worker. Escolha por paralelismo e memória por executor,
nunca por preço - a DPU é a unidade medida.5.7 Exemplo resolvido E6, o mínimo de 10 minutos do crawler
Crawler roda de hora em hora, 2 DPU, o trabalho real leva 3 minutos (em outubro de 2026).
Cobrado por execução: 2 DPU x (10/60) h x $0,44 = $0,147 <- mínimo de 10 min
Execuções em um mês de 30 dias: 24 x 30 = 720
Mensal: 720 x $0,147 = $105,60
Com duração real de 3 minutos: 720 x (2 x 0,05 x $0,44) = $31,68
Prêmio oculto do mínimo: $105,60 - $31,68 = $73,92 / mês
Movimento no exame: rastrear por evento (gatilho condicional depois do SUCCEEDED
do job) em vez de de hora em hora, ou agrupar a descoberta de partições,
antes de otimizar DPU.5.8 Auto scaling e o MaxCapacity legado
Para Glue 3.0 e posteriores, o auto scaling é habilitado com --enable-auto-scaling=true nas famílias de worker G.1X…G.16X e R.1X…R.8X (G.025X para streaming); o worker Standard não o suporta. Com auto scaling ligado, NumberOfWorkers é tratado como o máximo, e jobs em lote no Glue 4.0+ podem ser revisados com a métrica do CloudWatch DPUSeconds. Os preços do Data Catalog acrescentam seu próprio medidor: os primeiros 1.000.000 de objetos e 1.000.000 de requisições são grátis por mês, depois $1,00 por 100.000 objetos além do nível gratuito e $1,00 por milhão de requisições além dele (em outubro de 2026).
- 📚 Você sabia? Um job do DataBrew não é precificado em DPU-horas de modo algum: é $0,48 por node-hora com padrão de 5 nós, e uma sessão interativa do DataBrew é $1,00 por bloco de 30 minutos: três interações separadas dentro de 75 minutos são cobradas como três blocos = $3,00 (preços do AWS Glue/DataBrew, em outubro de 2026). Misturar os dois medidores é uma armadilha clássica de estimativa de custo.
6. Glue Studio: ETL visual sobre o mesmo motor
6.1 O que a camada visual realmente é
O Glue Studio permite criar, executar e monitorar jobs do Glue no motor Spark serverless "sem precisar aprender Spark ou escrever código." Cada nó no canvas é uma ação, uma origem, uma transformação ou um destino, e o Studio gera um script PySpark a partir do schema de origem mais a localização e o schema de destino. O script é real e editável no modo desenvolvedor; o grafo visual e o código são duas vistas do mesmo job.
Modo de autoria | O que você obtém |
|---|---|
ETL visual | Canvas de nós de origem/transformação/destino; script gerado |
Notebook interativo | Células Pandas sobre Spark ou SQL contra uma sessão interativa |
Editor de script | PySpark/Scala escrito à mão |
6.2 Sessões, pré-visualizações e monitoramento
- Sessão de pré-visualização de dados: 2 DPUs por até 30 minutos, parada automática, cobrada na taxa padrão de DPU (em outubro de 2026).
- Monitoramento: a página de Jobs e detalhes da execução, mais o painel de monitoramento de execuções de jobs com blocos para taxa de sucesso e uso estimado de DPU, links para o CloudWatch, o Spark History Server e os job run insights.
- Logs:
/aws-glue/jobs/logs-v2(logging contínuo),/aws-glue/jobs/output,/aws-glue/jobs/error; as métricas do CloudWatch chegam a cada 30 segundos como deltas.
6.3 O nó Data Preparation Recipe: DataBrew dentro do Studio
Você pode autuar um passo de receita embutido no Studio ou importar uma receita publicada do DataBrew em um nó Data Preparation Recipe, sujeito a limites rígidos (docs do AWS Glue Studio, acesso em outubro de 2026):
Regra | Valor |
|---|---|
Versão mínima do Glue | 4.0 (versão do Python definida automaticamente) |
Não importável | GROUP_BY, PIVOT, UNPIVOT, TRANSPOSE: use nós dedicados do Studio |
Não suportado se a receita contiver | UNION ou JOIN: use os nós Join/Union do Studio |
Requisito de Região | apenas Regiões comerciais do DataBrew |
Essa ponte é a razão de DataBrew e Glue Studio estarem no exame juntos: uma receita autuada por um analista vira um passo governado dentro de um job agendado de um engenheiro, que então ganha bookmarks, novas tentativas e auto scaling que nunca teve como um job autônomo do DataBrew.
7. AWS Glue DataBrew: preparação e profiling sem código
7.1 Seis objetos centrais, e o nome que não existe
O AWS Prescriptive Guidance lista exatamente seis conceitos centrais (acesso em outubro de 2026):
Objeto | Papel |
|---|---|
Project | O espaço de trabalho onde um dataset e uma receita se encontram |
Dataset | Uma referência somente leitura a uma origem (S3, tabelas do catálogo do Glue, …) |
Recipe | Uma lista ordenada de passos de transformação com expressões de condição opcionais |
Job | Um job de receita (aplicar uma versão de receita) ou um job de perfil (calcular estatísticas) |
Data lineage | Registro do que a receita fez com os dados |
Data profile | A saída estatística de um job de perfil (JSON no S3) |
⚠️ Não existe objeto do DataBrew chamado "data flow". Os seis objetos acima são o vocabulário completo; um "flow" é linguagem solta para um grafo visual do Glue Studio ou para a própria receita. Uma opção de exame pedindo para você "criar um data flow do DataBrew" está testando se você conhece os nomes reais dos objetos.
7.2 Receitas: limitadas, versionadas, point-and-click
- Uma receita é uma lista ordenada de objetos
RecipeAction(Action.Operation+Parameters+ConditionExpressionsopcionais). - Máximo de 100 transformações por receita; máximo de 100 versões publicadas por receita (cotas da AWS, acesso em outubro de 2026).
- Escala da biblioteca: mais de 250 transformações point-and-click (página do produto) / mais de 200 ações de receita (guia do desenvolvedor).
- Operações relevantes para o exame:
SPLIT,GROUP_BY,REPLACE_TEXT,REMOVE_VALUES,CHANGE_DATA_TYPE,PIVOT,UNPIVOT,TRANSPOSE,NEST,UNNESTe Remover duplicatas.
7.3 Jobs, agendamentos e rulesets de qualidade de dados
Controle | Valor (em outubro de 2026) |
|---|---|
Saída do job de receita | Amazon S3 · Glue Data Catalog · Amazon Redshift |
Saída do job de perfil | Avaliação estatística como JSON no S3 |
Sintaxe de agendamento | Cron de seis campos; dia-do-mês e dia-da-semana são mutuamente exclusivos ( ?) |
Intervalo mínimo de agendamento | Expressões cron mais rápidas que 5 minutos não são suportadas |
Rulesets | 100 regras por ruleset, 10 rulesets por dataset, 100 rulesets por conta |
Cotas de conta | 10 jobs simultâneos · 300 nós por conta · 100 jobs · 100 datasets · 100 projetos · 10 projetos abertos · 500 receitas · 10 agendamentos |
7.4 Exemplo resolvido E7: precificando um pipeline do DataBrew
Job de receita: 5 nós (o padrão), roda 10 minutos (em outubro de 2026)
Custo = 5 nós x (10/60) h x $0,48 / node-hora = $0,40 por execução
Dia interativo do analista: 3 sessões dentro de 75 minutos
Custo = 3 x $1,00 / bloco de 30 min = $3,00
Job de receita agendado de hora em hora por um mês (pior caso, 720 execuções):
720 x $0,40 = $288,00 vs o mesmo job como Glue ETL apenas se um job Spark
for genuinamente necessário - os medidores NÃO são intercambiáveis.7.5 Quando escolher DataBrew, quando escolher Glue
Dimensão | DataBrew | Glue ETL (Spark) |
|---|---|---|
Código | Nenhum: point-and-click | PySpark/Scala (ou gerado pelo Studio) |
Melhor para | Preparação, limpeza, profiling, autosserviço do analista | Transformações em massa, joins, processamento distribuído |
Medidor | $0,48 / node-hora + $1,00 / sessão de 30 min | DPU-hora |
Bookmarks / novas tentativas / auto scaling | Somente depois que uma receita é importada no Glue Studio | Nativo |
Teto rígido | 100 transformações por receita | Tamanho do script, não passos |
Qualidade de dados | Rulesets em datasets, rodando dentro de jobs | Nó/transformação EvaluateDataQuality |
- 📚 Você sabia? A AWS afirma que o DataBrew pode reduzir o tempo de preparação de dados em até 80% em comparação com trabalho de preparação sob medida (página do produto AWS Glue DataBrew, acesso em outubro de 2026): uma afirmação voltada ao cliente, não uma garantia, e o fato examinável é o mecanismo (project → dataset → recipe → job de receita/perfil), não a porcentagem.
Como responder
Exercício de associação com 6 pares. Associe cada item à esquerda com a resposta à direita.
Associe cada objeto do AWS Glue DataBrew ao que ele realmente é:
Arraste as respostas daqui:
8. Tratamento de erros: linhas rejeitadas, novas tentativas e para onde vão as falhas
8.1 Os três padrões dentro do script
Padrão | Mecanismo | Use quando |
|---|---|---|
Tabela de erro | ErrorsAsDynamicFrame (ou errorsFromDF) roteia registros rejeitados para um DynamicFrame separado em vez de falhar a execução | Violações de schema devem ser capturadas, não fatais |
Spigot | Desvia uma amostra de registros para um caminho de rejeições | Você quer um canário, não toda rejeição |
EvaluateDataQuality | Avaliação de regras (Studio: nó "Data quality rules") que pode falhar ou desviar na violação | As regras são declarativas e auditáveis |
O frame rejeitado é então gravado em seu próprio prefixo: essa é a tabela de erro que o exame quer dizer: linhas ruins caem em s3://…/errors/, linhas boas caem no sink particionado, e um gatilho condicional a jusante ou uma consulta do analista pode ler cada uma independentemente.
⚠️ Não existe recurso do Glue chamado "ErrorCDC." Uma busca no guia do desenvolvedor do Glue, referência da API e notas de versão (verificado em outubro de 2026) não retorna nada sob esse nome. Os mecanismos reais são ErrorsAsDynamicFrame, errorsFromDF, Spigot e EvaluateDataQuality: se uma opção usa um nome que você nunca viu na documentação, trate-a como distrator e escolha o mecanismo documentado.
8.2 Novas tentativas, timeouts e estados de execução
Escada de falha de job (API de job-runs do AWS Glue):
falha transitória -> MaxRetries (configurado no job) -> nova tentativa
fila longa -> estado WAITING (na fila, não falhou)
NotifyDelayAfter -> alerta levantado enquanto a execução é atrasada
acima do limite -> estado TIMEOUT (padrão 480 min no Glue >= 5.0,
padrão 2.880 min no Glue <= 4.0,
teto rígido < 10.080 min = 7 dias)
erro não tratado -> estado FAILED ou ERROR; histórico retido por 90 dias8.3 Exemplo resolvido E8: a armadilha do padrão de timeout
Um pipeline foi projetado em 2024 no Glue 4.0, onde um Timeout em branco
tem padrão de 2.880 minutos (48 horas). A equipe atualiza para Glue 5.1/6.0
e deixa o Timeout em branco -> o padrão agora é 480 minutos (8 horas).
Tempo de execução do job: 60 horas = 3.600 minutos
Resultado: estado TIMEOUT aos 480 minutos, muito antes da conclusão.
Correção: defina um timeout explícito (sempre < 10.080 minutos) e trate o
padrão como dependente da versão, não como uma constante. (Padrões em outubro de 2026.)8.4 Security configuration: quatro planos, uma regra de precedência
Uma security configuration é um conjunto nomeado que pode ser anexado a um job, crawler ou development endpoint, cobrindo quatro planos: dados no S3 (SSE-S3 ou SSE-KMS), CloudWatch Logs (SSE-KMS), job bookmarks (CSE-KMS: lado do cliente) e ativos de qualidade de dados. Três regras que valem decorar:
- "Atualmente, uma security configuration sobrepõe qualquer configuração de criptografia do lado do servidor (SSE-S3) passada como parâmetro de um job de ETL."
- Apenas chaves KMS simétricas são suportadas, e security configurations não são suportadas para jobs Ray.
- A role do job precisa de permissões de KMS mais
logs:AssociateKmsKey. A criptografia do catálogo é uma configuração separada, em nível de conta (CatalogEncryptionMode:DISABLED,SSE-KMS,SSE-KMS-WITH-SERVICE-ROLE).
9. Desempenho: insights, partições e o imposto dos arquivos pequenos
9.1 Job run insights, o caminho mais rápido até a causa raiz
Disponível no Glue 2.0 e posteriores, opt-in pela caixa de seleção do Studio "Generate job insights" ou --enable-job-insights=true. Quando habilitado, uma execução com falha reporta (docs do AWS Glue, acesso em outubro de 2026):
- a linha do script que falhou,
- a última ação do Spark,
- o fluxo de exceções em ordem cronológica, e
- uma causa raiz com uma ação recomendada.
Compare isso com a falha seca An error occurred while calling o111.collectToPython: um é um diagnóstico, o outro é um sintoma. Os insights caem no mesmo grupo de logs /aws-glue/jobs/logs-v2 que você já envia ao CloudWatch.
9.2 Gravações particionadas e pushdown
Grave as chaves de partição com o sink (partitionKeys = ["year","month","day"]) para que os leitores a jusante toquem apenas nas partições que uma consulta nomeia. O particionamento é uma decisão de tempo de gravação que você não consegue retrofitar de barato em um prefixo plano, é por isso que o sink pertence à conversa de design, não ao sprint de limpeza. Saídas conscientes de partições também são o que torna os crawlers baratos de rodar: o crawler registra partições, e uma tabela particionada é o que permite a um motor pular arquivos que ele jamais lerá.
9.3 Exemplo resolvido E9: aritmética de arquivos pequenos
Ingestão: 1 TB por ano de eventos brutos, particionado ano/mês/dia,
128 arquivos de saída por partição (em outubro de 2026 - contagens de
arquivo são aritmética estrutural, não um limite da AWS).
Partições por ano = 365
Arquivos de saída por ano = 365 x 128 = 46.720 arquivos
Tamanho médio de arquivo = 1 TB / 46.720 ~= 21 MB (antes da compressão)
Cada um desses arquivos é um objeto, uma entrada de listagem, uma entrada de
tarefa e uma linha de metadado. Remédios no lado do Glue:
- groupFiles / groupPartition: o agrupamento automático entra além de ~50.000
arquivos de entrada para que uma tarefa leia UM GRUPO de arquivos;
- coalesce(n) / repartition(n) para ajustar a contagem de arquivos de SAÍDA;
- sem agrupamento, o driver pode ficar sem memória só com metadados de arquivo
(orientação de agrupamento de entrada e escalonamento do Spark do AWS Glue).9.4 O que verificar antes de comprar mais DPU
1. Desbalanceamento - uma chave quente; mais workers não ajudam, use sal ou pré-agregue
2. Muitas tarefas - arquivos pequenos; agrupe entradas, una saídas (coalesce) primeiro
3. Worker errado - OOM no G.*? mude para R.* (4 vCPU : 32 GB), não suba a escada G
4. Auto scaling - Glue >= 3.0, --enable-auto-scaling=true, NumberOfWorkers = max
5. Versão - Glue 5.1 vs 6.0 muda o preço por DPU em ~30% (em outubro de 2026)
6. Medidor - isto é sequer um job de DPU? pythonshell de 0,0625 DPU ou Lambda podem servir10. Connections, criptografia e a escada de versões
10.1 Connections são objetos do catálogo, não configurações de job
"Uma conexão do AWS Glue é um objeto do Data Catalog que armazena credenciais de login, strings de URI, informações de virtual private cloud (VPC)…"
Connections são, portanto, reutilizáveis entre crawlers, jobs e development endpoints. Os tipos incluem JDBC, NETWORK, MARKETPLACE, CUSTOM, KAFKA, MONGODB, SFTP (a AWS observa que SFTP atualmente não é suportado) e as famílias SaaS/banco de dados (MYSQL, ORACLE, POSTGRESQL, SQLSERVER, SYNAPSE, TERADATA, OPENSEARCH, SALESFORCE, …). Para JDBC você fornece HOST/PORT/JDBC_ENGINE ou uma JDBC_CONNECTION_URL completa, mais USERNAME/PASSWORD ou SECRET_ID, com alternadores de SSL. Dentro de uma VPC, o Glue cria uma ENI; os security groups precisam de uma regra de entrada auto-referenciada para todas as portas TCP, e a saída exige um NAT gateway ou endpoints VPC. Limites: 1.000 connections por conta, e ConnectionsList por job também tem teto de 1.000.
10.2 A escada de versões (em outubro de 2026)
Versão do Glue | Spark | Python | Status |
|---|---|---|---|
6.0 | 4.1.1 | 3.13 | GA 2026-08-21, −30% de preços, Iceberg v3, Java 17 / Scala 2.13.17 |
5.1 | 3.5.6 | 3.11 | Padrão quando GlueVersion é omitido (desde 2025-11-26) |
5.0 | 3.5.4 | 3.11 | Suportado; padrão de timeout já 480 min |
4.0 | 3.3.0 | 3.10 | Suportado; padrão de timeout 2.880 min |
3.0 | 3.1.1 | 3.7 | Suportado; transformações de ML indisponíveis |
2.0 / 1.0 / 0.9 | 2.4.3 | 3.7 / 2.7-3.6 | Fim de vida 2026-04-01 |
Deltas de migração do Glue 6.0 que quebram scripts antigos: padrão de spark.sql.legacy.timeParserPolicy alterado; o modo ANSI pode falhar em casts implícitos string→numérico; --additional-python-modules está obsoleto em favor de --python-virtual-env; EMRFS foi removido (S3A é o único sistema de arquivos do S3); e o AWS SDK for Java v1 foi removido (apenas SDK v2, o boto3 não é afetado).
10.3 Escolhendo o motor em uma tabela
Dimensão | AWS Lambda | Glue Spark | Glue Python shell |
|---|---|---|---|
Runtime máximo | 15 minutos (duro) | padrão 480 min (≥5.0) / 2.880 min (≤4.0), sempre < 7 dias | mesmas regras de timeout do Glue |
Paralelismo | uma invocação ≈ um worker | Spark distribuído com shuffles | processo único |
Superfície de gatilho | 220+ eventos de serviço, SQS/Kinesis/DynamoDB, API Gateway | gatilhos do Glue, EventBridge, Step Functions | igual ao Glue |
Medidor de custo | GB-segundo + requisições | DPU-hora (granularidade de 1 segundo, mínimo de 1 minuto) | DPU-hora (0,0625 ou 1 DPU) |
Encaixe | micro-transformações de eventos < 15 min | massa de GB: TB, joins, gravações particionadas em lake | Python não-Spark > 15 minutos |
10.4 Exemplo resolvido E10: "a opção correta mais barata"
Requisito: toda noite às 03:00, rodar um job de cópia de arquivos de ~90 segundos,
payload pequeno, sem Spark, sem shuffle, SLA folgado.
A) Job etl do Glue, mínimo de 2 DPU, cobrança de 1 minuto
-> família de motor correta, mas você paga 2 DPU pela execução inteira
(admitidamente curta): 2 x (1/60) x $0,44 = $0,0147/execução de piso,
mais o gatilho e a sobrecarga do script. (em outubro de 2026)
B) Glue pythonshell a 0,0625 DPU
-> 0,0625 x (1/60) x $0,44 = $0,00046/execução - nativo do Glue, sem Spark.
C) AWS Lambda
-> medição em GB-segundo, sem piso de DPU, o teto de 15 minutos é irrelevante.
Leitura: "precisa rodar no Glue" -> pythonshell. "Correta mais barata" -> Lambda.
"Precisa de shuffles distribuídos" -> nenhum dos dois; use glueetl.Atualizações de 2026 (em outubro de 2026)
O que mudou neste tópico entre 2025 e outubro de 2026: cada linha é verificada contra uma fonte primária da AWS e é examinável porque o exame testa o comportamento atual:
- O Glue 6.0 foi GA em 2026-08-21 com "preços 30% menores que versões anteriores do AWS Glue" e suporte completo a Apache Iceberg v3 (Spark 4.1.1, Python 3.13, Scala 2.13.17, Java 17; Iceberg 1.11.0, Hudi 1.1.1, Delta 4.2.0): AWS What's New, 2026-08-21; notas de versão do Glue, acesso em outubro de 2026.
- Glue 5.1 é o padrão quando
GlueVersioné omitido (anunciado em 2025-11-26 / blog 2025-12-09), e 0.9/1.0/2.0 chegaram ao fim de vida em 2026-04-01; novos jobs de Python Shell 3.6 não podiam mais ser criados depois de 2026-03-31: política de suporte de versões do Glue, acesso em outubro de 2026. - 6.0 quebra código antigo: EMRFS removido (apenas S3A), AWS SDK for Java v1 removido, binário do Scala 2.12 → 2.13,
--additional-python-modulesobsoleto para--python-virtual-env, e o modo ANSI pode falhar em casts implícitos string→numérico: migrando para o Glue 6.0, acesso em outubro de 2026. - Guia de exame v1.1 (2025-12-12) consolidou conhecimentos/habilidades em uma única lista e acrescentou 8 novas habilidades, nenhuma removida, incluindo 1.2.10 Integrar Grandes Modelos de Linguagem (LLM) para processamento de dados e 2.1.7 Gerenciar formatos de tabela abertos (por exemplo Apache Iceberg); a lista de serviços no escopo moveu-se em +6 / −3 (Aurora, Amazon Q, Bedrock, Kendra, Data Exchange, S3 Tables adicionados; Cloud9, CodeCommit, AWS SCT removidos), página de revisões do DEA-C01, 2025-12-12; páginas no escopo/fora do escopo, acesso em outubro de 2026.
- Aviso de fato obsoleto: uma especificação de pipeline de 2024 dizendo
GlueVersion=4.0, destino "kinesis-firehose" e "12 meses de Free Tier" está errada nos três pontos hoje, o padrão é 5.1, o nome no console é Amazon Data Firehose (renomeado em 2024-02-09, APIs inalteradas, e o guia do DEA ainda imprime "Amazon Kinesis Data Firehose"), e contas criadas depois de 2025-07-15 recebem um Free Plan de 6 meses com até $200 em créditos, página do AWS Free Tier, acesso em outubro de 2026. - O Glue agora é uma perna de um triângulo de formatos de tabela abertos: o Glue 6.0 grava Apache Iceberg v3 (VARIANT + shredding, vetores de exclusão, linhagem de linha), enquanto o Redshift ganhou gravações em Iceberg (GA 2025-11-17, tabelas registradas no Glue Data Catalog), JIT ANALYZE (2025-11-18), UPDATE/DELETE/MERGE em Iceberg incluindo S3 Tables (2026-04-23) e views materializadas do Iceberg (2026-10-05), uma tabela Iceberg autuada pelo Glue agora pode ser modificada in place pelo Redshift, consultada pelo Athena e compartilhada pelo Lake Formation, AWS What's New, 2025-11-17 / 2026-04-23 / 2026-10-05; anúncio do Glue 6.0, 2026-08-21.
- Nem todo caminho de streaming precisa mais de um job do Glue: o Kinesis Data Streams agora pode entregar direto para tabelas Iceberg no Amazon S3 Tables (2026-08-28, formato de origem convertido para Parquet automaticamente, compactação inline, "sem ETL") ou para buckets S3 de propósito geral (2026-08-29), ambos disponíveis apenas nos modos de capacidade sob demanda e precificados por GB entregue, AWS What's New, 2026-08-28 e 2026-08-29. Leia isso como uma opção de custo a avaliar, não como "o Glue está obsoleto": gravações em lake agendadas, dirigidas por bookmarks e verificadas por qualidade continuam sendo o padrão do Glue que este exame testa.
- 📚 Você sabia? As próprias remoções do guia de exame são tão examináveis quanto suas adições: AWS SCT, Cloud9 e CodeCommit saíram da lista no escopo no v1.1, é por isso que "use Schema Conversion Tool" agora é um distrator onde "use Glue ou ferramenta nativa" é a resposta, e a chegada de S3 Tables ao escopo é a razão de o Glue gravar Iceberg (incluindo recursos do Iceberg v3 no 6.0) ser jogo limpo (página de serviços no escopo do DEA-C01, acesso em outubro de 2026).
- 📚 Você sabia? A confusão de renomeação corre nos dois sentidos neste tópico: a lista no escopo do DEA ainda imprime "Amazon Kinesis Data Firehose" enquanto o produto é Amazon Data Firehose desde 2024-02-09, "nenhuma outra alteração, incluindo endpoints de serviço, APIs, AWS Command Line Interface (AWS CLI), políticas de acesso do AWS Identity and Access Management (IAM) e métricas do Amazon CloudWatch" (AWS What's New, 2024-02-09). As ações de IAM continuam
firehose:*, então qualquer nome é válido no exame, nunca "conserte" uma opção que usa o mais antigo (página de história do AWS Firehose, acesso em outubro de 2026).
Casos Reais
A AWS publica como essas abstrações parecem em produção. Todo número abaixo é afirmação do cliente ou da AWS, não auditada, com a fonte nomeada para que você possa verificar, o ponto examinável é o padrão, não o marketing.
Caso A, BMW Group: um lake on-premises vira um lake de nuvem governado (Glue como camada de schema)
Elemento | Detalhe |
|---|---|
Cliente | BMW Group, fabricante automotivo |
Desafio | Um data lake on-premises construído em 2015 não conseguia servir múltiplos locatários |
Serviços | Produtores: Amazon Data Firehose + AWS Lambda + AWS Glue + Amazon EMR; consumidores: Amazon Athena, SageMaker AI, Amazon EMR; armazenamento no Amazon S3, schemas no AWS Glue Data Catalog |
Resultados | 10 TB/dia de 1,2 milhão de veículos; um Cloud Data Hub servindo mais de 500 usuários; telemetria compartilhada de forma anonimizada |
Domínio do exame | Domínio 1 (transformação e processamento dirigido por catálogo) com ganchos do Domínio 4 (atribuição de custo multi-tenant) |
Fonte | aws.amazon.com/solutions/case-studies/bmw-group-case-study (acesso em outubro de 2026) |
O padrão examinável é a separação que a AWS ensina: os dados aterram no S3, os schemas vivem no Glue Data Catalog, a transformação roda no Glue/EMR, e o consumo (Athena, SageMaker) lê o mesmo catálogo. Produtores e consumidores são contas diferentes com privilégios diferentes: é por isso que o contrato é o catálogo, não o bucket.
Caso B, PayU: Glue ETL para um warehouse compartilhado (transformação alimentando consolidação)
Elemento | Detalhe |
|---|---|
Cliente | PayU, empresa de fintech/pagamentos |
Desafio | Dados em silos em ~40 bancos de dados de produção; consultas levando 10 to 15 minutos; frescor apenas uma vez por dia |
Serviços | AWS Glue ETL → Amazon S3 → Amazon Redshift, mais Redshift Data Sharing entre 5 clusters (2 de ETL + 3 de consumo) |
Resultados | Consultas 10 to 15 min → menos de 1 min; frescor 1x/dia → menos de 30 minutos (ML streaming abaixo de 5 s); $20.000/mês economizados; ~200 TB escaneados por dia; volume de consultas 150.000 → 35.000 por mês (−77%) |
Domínio do exame | Domínio 1 (recursos do Glue para processar dados) alimentando Domínio 3/4 (custo e desempenho) |
Fonte | aws.amazon.com/solutions/case-studies/payu-redshift-case-study (acesso em outubro de 2026) |
"Em 1 mês, reduzimos as consultas em 77 por cento, o que teria sido um exercício de 6 meses no ambiente anterior.": PayU, estudo de caso da AWS (acesso em outubro de 2026)
Leia a PayU como duas alavancas separadas: a mudança de plataforma (Glue → S3 → Redshift com data sharing) é uma mudança de arquitetura que vale $20.000/mês (afirmação do cliente), enquanto a racionalização da demanda é uma redução de 77% nas consultas. Respostas que colapsam ambos em "a AWS economizou 77% de custo" estão lendo o número errado.
Caso C, Integral Ad Science: o catálogo como plano de autorização (Glue Data Catalog + Lake Formation)
Elemento | Detalhe |
|---|---|
Cliente | Integral Ad Science (IAS), ad-tech |
Desafio | Um data lake de autosserviço abrangendo contas de produtor e consumidor sob GDPR/CCPA, com acesso concedido por classificação de dados e papel do trabalho em vez de políticas por bucket escritas à mão |
Serviços | Concessões do AWS Lake Formation e controle de acesso baseado em tags (LF-TBAC), AWS Glue Data Catalog, Amazon Athena, Amazon EMR, federação Okta; S3 acessível apenas por meio de uma role de acesso a dados do Lake Formation |
Resultados | Centenas de regras de permissão reduzidas a exatamente duas; controle em nível de coluna; tags em nível de banco herdadas por tabelas e colunas; workgroups do Athena por unidade de negócio servem como tags de cobrança + limites de consulta |
Domínio do exame | Domínio 1 (processamento dirigido por catálogo) com Domínio 4 (acesso governado e de autosserviço) |
Fonte | aws.amazon.com/blogs/big-data/integral-ad-science-secures-self-service-data-lake-using-aws-lake-formation (2021-09-23, acesso em outubro de 2026) |
"Com os controles de acesso baseados em tags do Lake Formation, a IAS reduziu centenas de regras de permissão a precisamente duas regras.": AWS Big Data Blog (acesso em outubro de 2026)
Leia a IAS como o mesmo catálogo que esta lição descreve (§1.4) usando um segundo chapéu: o Glue Data Catalog guarda o schema, e o Lake Formation decide quem pode ler qual tabela, coluna ou linha daquele schema. É por isso que "é só adicionar uma política de bucket do S3" é o instinto errado numa resposta de exame sobre um lake governado e multi-conta, e por que tags, não princípios, são o mecanismo de escala.
Caso D, Nasdaq: uma carga em lote de bolsa desacoplada da consulta (S3 como zona de aterrissagem)
Elemento | Detalhe |
|---|---|
Cliente | Nasdaq, bolsa de valores |
Desafio | Uma carga noturna de ordens, cotações e negócios que precisa terminar antes da abertura do mercado, ainda rodando em um warehouse on-premises legado depois da migração para a AWS em 2014 |
Serviços | Data lake no Amazon S3 (caminho de escrita) + Amazon Redshift com Redshift Spectrum (caminho de leitura) = um lake house, mais S3 Glacier e S3 Object Lock para arquivo e retenção |
Resultados | 70 bilhões de registros/dia processados (pico de 113 bilhões, fev. 2020), a partir de 30 bilhões; 90% da carga concluída 5 horas mais cedo; consultas 32% mais rápidas; um lake de 15 TB consultado no lugar |
Domínio do exame | Domínio 1 (cadência de carga e transformação em lote) com Domínio 2 (armazenamento e computação desacoplados) |
Fonte | aws.amazon.com/solutions/case-studies/nasdaq-case-study (acesso em outubro de 2026) |
"Conseguimos suportar facilmente o salto de 30 bilhões de registros para 70 bilhões de registros por dia por causa da flexibilidade e escalabilidade do Amazon S3 e do Amazon Redshift.": Robert Hunt, VP de Software Engineering, Nasdaq (estudo de caso da AWS, acesso em outubro de 2026)
O padrão examinável é a contenção removida: a carga grava no S3 enquanto a consulta lê Redshift/Spectrum sobre o mesmo armazenamento, de modo que o prazo noturno deixa de ser uma discussão de capacidade compartilhada. É o mesmo instinto arquitetônico do caminho Glue → S3 → Redshift da PayU, aterrar uma vez no lake, transformar com Glue, deixar cada consumidor ler barato, e a razão de saída particionada e catalogada (§9.2) importar mais que throughput bruto.
Caso | Padrão Glue/DataBrew que demonstra | Domínio |
|---|---|---|
BMW Group | Catálogo como contrato de schema entre contas de produtor e consumidor | D1 Transformação |
PayU | Glue ETL como caminho de carga para um warehouse consolidado e compartilhado | D1 → D3/D4 |
Integral Ad Science | Metadados do Glue Data Catalog governados por controle de acesso baseado em tags do Lake Formation | D1 → D4 |
Nasdaq | Zona de aterrissagem desacoplada no S3 alimentando transformação e consulta noturnas em lote | D1 → D2 |
- 📚 Você sabia? Nenhum dos dois estudos de caso menciona uma ferramenta sem código como caminho de carga: ambos colocaram o Glue no pipeline e mantiveram humanos fora do loop para o trabalho agendado. Essa é a forma da resposta do exame também: DataBrew para preparação e profiling, Glue para a execução agendada, governada e incremental (estudos de caso da AWS, acesso em outubro de 2026).
- 📚 Você sabia? As próprias palavras da Nasdaq descrevem um prazo de carga, não de consulta: 90% da carga diária terminou 5 horas mais cedo depois de migrar para S3 + Redshift, e o lake de 15 TB é consultado onde está em vez de copiado: com o S3 Object Lock segurando o lado da retenção da história de conformidade da bolsa (estudo de caso da AWS Nasdaq, acesso em outubro de 2026). Os números são publicados pela AWS/cliente e específicos do workload da Nasdaq; não os generalize em uma afirmação universal de "32% mais rápido".
Perguntas de Prática (Practice Questions)
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um DynamicFrame do Glue reporta uma coluna como choice<long,string> porque o crawler amostrou apenas um prefixo de 2 MB, enquanto arquivos posteriores contêm valores de string. Qual ação de resolveChoice mantém apenas os valores do tipo long e descarta os de string?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job de streaming do Glue lendo do Kinesis precisa evitar o reprocessamento de registros após uma reinicialização. Qual mecanismo está correto?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
O Job 1 foi iniciado manualmente pelo console, terminou com SUCCEEDED, mas o gatilho condicional que deveria iniciar o Job 2 nunca disparou. Por quê?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um crawler do Data Catalog roda de hora em hora, usa 2 DPU e conclui o trabalho real em 3 minutos. A $0,44 por DPU-hora com mínimo de 10 minutos por execução (em outubro de 2026), quanto custa em um mês de 30 dias?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Uma analista projeta uma receita do DataBrew com 140 transformações. O que acontece?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job do Glue em workers G.2X falha repetidamente com erros de falta de memória durante um join amplo. Dimensionar DPU não é o problema: a equipe precisa permanecer em 16 DPU. Qual é a mudança correta?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job noturno copia um arquivo pequeno em cerca de 90 segundos, roda com SLA folgado, não precisa de shuffle nem de Spark. Qual opção é a mais apropriada em custo?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job é criado sem especificar GlueVersion e com Timeout em branco. Em outubro de 2026, qual declaração está correta?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Em um job do Glue ETL com script, qual é a ordem correta de operações quando a fonte contém um tipo choice genuíno e você precisa de colunas renomeadas, convertidas e aninhadas antes de gravar?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Uma analista de negócios quer explorar, limpar e perfilar um novo dataset no S3 com passos point-and-click e estatísticas de coluna, e depois agendar a saída preparada para uma tabela do catálogo do Glue. Qual é a combinação de melhor encaixe?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job Spark do Glue 6.0 roda 6 DPU por 15 minutos. A $0,308 por DPU-hora (us-east-1, em outubro de 2026), qual é o custo por execução e como ele se compara ao mesmo job no Glue 5.1 a $0,44?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Qual declaração sobre o estado dos job bookmarks está correta?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um job do Glue ETL fixado em GlueVersion=6.0 falha na inicialização com NoClassDefFoundError para com.amazonaws.services.s3.AmazonS3Client, e o log também reporta que fs.s3.consistent.* não é uma configuração de sistema de arquivos reconhecida. Qual é a remediação correta?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Um data lake abrange contas de produtor e consumidor e o acesso precisa ser concedido por classificação de dados e papel no trabalho. Um estudo de caso publicado pela AWS reduziu centenas de regras de permissão por principal para exatamente dois. Qual padrão ele usou?
⚠️ Armadilhas de dia de prova nesta lição:
- DynamicFrame primeiro:
resolveChoice→apply_mapping→toDF(); uma coluna choice convertida cedo virastringsilenciosamente. castvsproject: cast converte valores não convertíveis emnull; project descarta os valores do outro tipo.- Bookmarks são lote: streaming precisa de
checkpointLocation+ watermarks; não há rebobinamento de bookmark, e o reset toca todas as transformações sem limpar nenhuma saída. transformation_ctxé a chave de estado: mude o caminho da fonte sem mudá-lo e arquivos se perdem; bookmarks não são seguros para concorrência (MaxConcurrentRunspadrão 1).- Gatilhos condicionais precisam de uma cadeia iniciada por gatilho a partir de um único raiz agendado/sob demanda: um job iniciado manualmente nunca dispara um; máx. 2 crawlers / 50 jobs por gatilho.
- Workers G mantêm 4 vCPU: 16 GB: apenas R. dobra a memória por DPU; G.4X não conserta um OOM.
MaxCapacityé legado: Glue ≥2.0 usaWorkerType+NumberOfWorkers, nunca ambos.- Crawlers cobram mínimo de 10 minutos; o DataBrew não cobra DPU-horas ($0,48/node-hour, $1,00/sessão de 30 min), e sua receita tem teto de 100 passos, agendamentos de intervalos de 5 minutos.
- Padrões de timeout dependem da versão: 2.880 min (≤4.0) vs 480 min (≥5.0), sempre < 10.080 min.
- DataBrew tem seis objetos e nenhum "data flow"; o Glue não tem "ErrorCDC": os nomes documentados são
ErrorsAsDynamicFrame,SpigoteEvaluateDataQuality. - Security configuration sobrepõe criptografia passada como parâmetro de job; bookmarks usam CSE-KMS, S3/CloudWatch usam SSE-KMS, e jobs Ray não têm security configuration.
- O corte de 30% do Glue 6.0 vale só no 6.0; 5.1 é o padrão, e crawlers/Python shell/Ray não mostram taxa separada do 6.0.
- No Glue 6.0, EMRFS e AWS SDK for Java v1 foram embora: qualquer configuração
fs.s3.consistent.*ou importcom.amazonaws.*está desatualizada (apenas S3A + SDK v2, boto3 não afetado), e o binário de Scala é 2.13, não 2.12. - Lakes governados autorizam pelo Lake Formation, não por políticas de bucket, o padrão IAS publicado pela AWS cortou centenas de regras de permissão para exatamente dois com controle de acesso baseado em tags no Glue Data Catalog.
Veredito Comparativo: como este tópico aparece no dia de prova
- Contra outra nuvem: este exame testa apenas serviços AWS: nada em DEA-C01 pede para comparar o Glue com Spark hospedado de concorrente. Responda com um serviço AWS ou um comportamento documentado pela AWS (DPU, cotas, regras de gatilho); uma opção que pivô para um benchmark de terceiro não verificado está fora do escopo por construção.
- Contra autogerenciado / on-premises (seu próprio EMR ou Hadoop): o Glue remove provisionamento de cluster, patch e capacidade ociosa, você paga por segundo enquanto o job roda ($0,44/DPU-h ≤5.1, $0,308/DPU-h no 6.0, em outubro de 2026) com mínimo de 1 minuto. O contracaso que o exame respeita: EMR autogerenciado continua defensível quando você precisa de controle fino do cluster ou de um runtime que o Glue não oferece, a resposta deve caber no requisito enunciado, não num slogan.
- Contra outro serviço AWS: Lambda vence para micro-transformações de eventos abaixo de 15 minutos (medição em GB-segundo, sem piso de DPU); Glue pythonshell para Python de processo único acima de 15 minutos a 0,0625 DPU; Glue Spark para joins distribuídos de GB: TB e gravações particionadas em lake; DataBrew para preparação, limpeza e profiling sem código; Amazon EMR quando você precisa de controle total de cluster Spark/Hive/Presto. Respostas erradas quase sempre dimensionam o motor por hábito em vez de por volume, latência e quem escreve a lógica.
- Contra um processo manual e humano: o DataBrew existe porque a preparação é frequentemente trabalho de analista, mas execuções de produção agendadas, incrementais e governadas pertencem ao Glue com bookmarks, gatilhos, tabelas de erro e job insights. Escolha a opção com menor esforço manual não gerenciado: CSVs editados à mão e scripts ad hoc são distratores, não pontos bônus.
Pontos Principais (Key Takeaways):
- O Glue é serverless e cobrado por segundo enquanto roda (incrementos de 1 segundo, mínimo de 1 minuto para jobs Spark); um job é comando + tipo/quantidade de worker + role IAM + connections + security configuration + gatilhos + timeout + novas tentativas +
MaxConcurrentRuns(padrão 1), e o histórico de execuções dura 90 dias. - Os tipos de job são
glueetl(Spark),gluestreaming,pythonshell(0,0625 ou 1 DPU) e RayZ.2X; a autoria acontece via PySpark/Scala, Python, Glue Studio ou notebooks (Pandas, SQL). - Registros de DynamicFrame são autodescritivos e podem carregar um tipo
choicereal; DataFrame exige um schema resolvido. A ordem éresolveChoice→apply_mapping→toDF()→ write, comcast(→ null),project(→ descartar),make_cols,make_structeMATCH_CATALOGcomo as quatro ações de resolução. - Job bookmarks = Enable / Disable (padrão) / Pause; o estado é indexado por
job_name+ versão comtransformation_ctxcomo chave por fonte;job.initlê,job.commitgrava; apenas fontes são rastreadas, sem rebobinamento, o reset limpa todas as transformações e nenhuma saída, e streaming usacheckpointLocation+ watermarks no lugar. - Gatilhos:
SCHEDULED(cron),CONDITIONAL(predicado AND/OR sobre jobs e crawlers monitorados),ON_DEMAND,EVENT(EventBridge); cadeias condicionais precisam ser iniciadas por gatilho a partir de um único raiz, com máx. 2 crawlers / 50 jobs por gatilho. - 1 DPU = 4 vCPU + 16 GB; Spark padrão 10 DPU, streaming 2 DPU, mínimo 2 DPU; workers G mantêm a razão 4:16 enquanto workers R dobram a memória (4 vCPU : 32 GB); G.4X/G.8X exigem ≥3.0, G.12X/G.16X ≥4.0, G.025X apenas streaming, Z.2X apenas Ray.
- Preços (us-east-1, em outubro de 2026): Spark $0,44/DPU-h (≤5.1) vs $0,308/DPU-h (6.0) · Flex $0,29 · workers R $0,52 · crawler $0,44 com mínimo de 10 minutos · jobs do DataBrew $0,48/node-hour (padrão de 5 nós) e sessões $1,00/30 min · Data Catalog grátis até 1M de objetos e 1M de requisições/mês.
- Aritmética resolvida para decorar: 6 DPU × 15 min = $0,66 (≤5.1) / $0,462 (6.0) · Flex 6 DPU × 1/3 h = $0,58 vs $0,88 · 16 DPU como 16×G.1X ou 2×G.8X = $7,04/h nos dois casos · crawler de 2 DPU de hora em hora = $105,60/mês no mínimo de 10 minutos vs $31,68 na duração real · DataBrew 5 nós × 10 min = $0,40.
- Glue Studio gera PySpark real a partir de um grafo de nós; o nó Data Preparation Recipe importa receitas do DataBrew no Glue ≥4.0, mas não
GROUP_BY/PIVOT/UNPIVOT/TRANSPOSE, e rejeita receitas comUNION/JOIN; sessões de pré-visualização são 2 DPU / 30 minutos, com parada automática. - Os seis objetos do DataBrew são project, dataset, recipe, job (de receita ou de perfil), data lineage e data profile: nenhum "data flow"; receitas têm teto de 100 passos / 100 versões publicadas, agendamentos não podem ser mais rápidos que 5 minutos, e as cotas de conta incluem 300 nós e 10 jobs simultâneos.
- Design de falha: roteie rejeições com
ErrorsAsDynamicFrame/errorsFromDF, amoestre comSpigot, imponha regras comEvaluateDataQuality, configureMaxRetries/NotifyDelayAfter, defina um timeout explícito (padrões 2.880 vs 480 minutos por versão, teto <10.080) e ligue os job run insights (--enable-job-insights=true) para a linha falhada, a última ação do Spark e a causa raiz. - Desempenho vem de gravações particionadas com
partitionKeys, agrupamento de entrada além de ~50.000 arquivos,coalesce/repartitionpara contagens de saída, auto scaling (--enable-auto-scaling=true,NumberOfWorkers= máximo, Glue ≥3.0) e escolher o medidor certo: mais o estado de 2026: Glue 6.0 GA 2026-08-21 a −30%, 5.1 como padrão, 0.9/1.0/2.0 com fim de vida em 2026-04-01, e guia de exame v1.1 (2025-12-12) com +8 habilidades e escopo +6/−3.