AWS Data Engineer Associate (DEA-C01) · 34% practice allocation

AWS DEA-C01: Data Ingestion and Transformation Practice Questions

5 free sample questions from the Data Ingestion and Transformation domain, with answers and explanations. The full DEA-C01 bank has 250 questions across 4 domains. Questions are scenario-based and written from the official AWS exam guide.

1.

An e-commerce company runs a nightly AWS Glue ETL job that reads from Amazon S3, joins three large datasets, and writes results to Amazon Redshift. The job consistently takes 3–4 hours and the team wants to reduce runtime. A data engineer profiles the job and finds that one of the datasets — a 2 GB product dimension table — is being shuffled repeatedly across executors during every join. The other two datasets are 800 GB and 400 GB respectively. Which Spark optimization should the data engineer apply to reduce shuffle overhead for the dimension table joins?

  • A. Use a broadcast join (broadcast hint) on the 2 GB product dimension table to eliminate shuffle✓ Correct
  • B. Enable Glue job bookmarks so that previously processed partitions are skipped during the join
  • C. Repartition all three datasets to the same number of partitions before joining to align shuffle boundaries
  • D. Increase the number of Glue DPUs to add more executor memory and reduce spill to disk
Explanation

A broadcast join (also called a map-side join) sends a copy of the smaller dataset to every executor, completely eliminating the shuffle for that join. At 2 GB, the product dimension table may be large for default Spark broadcast thresholds (10 MB), but in Glue/EMR you can explicitly set spark.sql.autoBroadcastJoinThreshold or use a broadcast hint (broadcast()) to force it. This is the correct optimization for repeated shuffles of a known-small dimension table. Adding more DPUs increases parallelism and memory but does not eliminate the shuffle — it just makes it faster, which doesn't address the root cause. Repartitioning all datasets to aligned partition counts can reduce some skew but does not eliminate shuffles during joins; it may even add an extra shuffle step. Glue job bookmarks track processed data to avoid reprocessing but have no impact on join execution plans or shuffle behavior within a single job run.

2.

A manufacturing company streams sensor telemetry from factory floor equipment to Amazon Kinesis Data Firehose, which delivers records to Amazon S3. A data engineer notices that the delivered S3 objects contain records from multiple sensor types mixed together, making downstream Athena queries expensive. The engineer wants to route records to different S3 prefixes based on a 'sensorType' field in each JSON record WITHOUT introducing additional AWS services. Which Firehose feature should the engineer use?

  • A. Configure a Firehose data transformation Lambda function to write records directly to the correct S3 prefix
  • B. Use Firehose record format conversion to split records into separate Parquet files per sensor type
  • C. Create multiple Firehose delivery streams, one per sensor type, and route at the producer
  • D. Enable Firehose dynamic partitioning using the 'sensorType' field as a partition key✓ Correct
Explanation

Kinesis Data Firehose supports dynamic partitioning, which allows you to extract values from record fields (using inline parsing or Lambda) and use them to construct custom S3 prefix paths. By enabling dynamic partitioning with a JQ expression or inline parsing on the 'sensorType' field, Firehose automatically routes each record to a prefix like s3://bucket/sensorType=temperature/. This requires no additional services. A transformation Lambda can preprocess records but cannot redirect them to different S3 prefixes — the output destination is controlled by the delivery stream's configuration, not the Lambda function's return value. Creating multiple delivery streams would work functionally but requires routing logic at the producer level and managing multiple streams, which adds operational overhead and constitutes introducing additional resources/complexity. Record format conversion (e.g., to Parquet) changes the file format but does not split records to different prefixes based on field values.

3.

An AWS Glue crawler is scheduled to run nightly against an Amazon S3 data lake. After a recent pipeline change, new Parquet files are being written to a new partition path (s3://bucket/data/year=2024/month=07/), but the AWS Glue Data Catalog table is not reflecting the new partition after the crawler runs. The existing partitions are updating correctly. What is the MOST likely cause?

  • A. The S3 bucket versioning is enabled, causing the crawler to skip new prefixes
  • B. The crawler's configuration is set to update existing partitions only and not add new ones✓ Correct
  • C. The IAM role attached to the crawler lacks s3:GetObject permission on the new partition prefix
  • D. The Glue crawler does not support Parquet format for partition discovery
Explanation

The most likely cause is that the crawler's 'Schema updates in existing tables' and 'Object deletion handling' configuration is set in a way that prevents adding new partitions — specifically, the crawler behavior for 'Add new columns only' or similar restrictive update behavior can prevent new partition discovery if the crawler is configured to not create new partitions in existing tables. In Glue crawler settings, you can configure what happens when the crawler finds new partitions: if set to update existing only, new partition paths are ignored. Option D is incorrect because Glue crawlers fully support Parquet. Option C (IAM permissions) would cause the crawler to fail entirely or log access-denied errors on all paths, not selectively skip new ones. Option A (S3 versioning) has no bearing on Glue crawler partition discovery behavior.

4.

A streaming pipeline uses Amazon Kinesis Data Firehose to deliver JSON records to Amazon S3. The team wants to convert each JSON record to Parquet format and partition the output by event_date before writing to S3, without managing any servers. Which combination of Firehose features BEST achieves this? (Select TWO)

  • A. Attach an AWS Lambda transformation function to Firehose that converts JSON to Parquet using the PyArrow library
  • B. Enable the Firehose record format conversion feature and select Apache Parquet as the output format, referencing a table schema in the AWS Glue Data Catalog✓ Correct
  • C. Use Firehose's built-in S3 prefix with !{timestamp:yyyy/MM/dd} to automatically partition by ingestion date
  • D. Configure a dynamic partitioning expression in Firehose using a JQ expression to extract event_date from the JSON payload for S3 prefix routing✓ Correct
  • E. Enable Firehose server-side encryption with a custom KMS key to ensure Parquet files are partitioned by encryption domain
Explanation

Firehose natively supports JSON-to-Parquet (and ORC) conversion using a schema defined in the AWS Glue Data Catalog — no Lambda required for format conversion. Dynamic partitioning allows using JQ expressions to extract fields from the payload (e.g., .event_date) to build custom S3 prefix paths. Together these features achieve serverless, schema-aware Parquet conversion with payload-based partitioning. Option A works but requires managing Lambda code and is not necessary when native conversion is available. Option C uses the Firehose ingestion timestamp (not the event's own event_date field), which does not meet the requirement of partitioning by the event's date. Option E is entirely incorrect — KMS encryption has no relationship to S3 partitioning.

5.

A startup is building a real-time leaderboard for a mobile game. Player score events are published to Amazon Kinesis Data Streams. A downstream AWS Lambda function reads from the stream and updates rankings in Amazon DynamoDB. During weekend tournaments, score submission rates jump from 500 to 15,000 events per second. The current stream has 5 shards and the Lambda function begins showing 'Iterator Age' metrics rising continuously, indicating the consumer cannot keep up. Which THREE actions would MOST effectively address the consumer lag? (Select THREE)

  • A. Enable Kinesis Data Streams server-side encryption to reduce per-record processing overhead on the Lambda function.
  • B. Increase the number of Kinesis Data Stream shards by splitting existing shards to handle the higher ingestion rate and distribute processing load.✓ Correct
  • C. Increase the Lambda function's batch size and parallelization factor for the Kinesis trigger to process more records per invocation.✓ Correct
  • D. Add a Kinesis Data Firehose delivery stream as an intermediary to buffer records between Kinesis Data Streams and Lambda.
  • E. Enable Kinesis Enhanced Fan-Out for the Lambda consumer to give it a dedicated 2 MB/s read throughput per shard via an HTTP/2 push model.✓ Correct
  • F. Switch from Kinesis Data Streams to Amazon SQS FIFO queues to guarantee strict per-player ordering without shard management.
Explanation

Option B (resharding): With only 5 shards, each shard handles up to 1 MB/s ingest and 2 MB/s read. At 15,000 events/sec, more shards both increase ingest capacity and add more independent processing lanes for Lambda.

Option E (Enhanced Fan-Out): Standard consumers share the 2 MB/s shard read limit across all readers. Enhanced Fan-Out gives each registered consumer its own dedicated 2 MB/s per shard via a push subscription, directly reducing iterator age caused by read throttling.

Option C (batch size + parallelization factor): Increasing the batch size means each Lambda invocation processes more records, reducing invocation overhead. The parallelization factor (up to 10) allows multiple Lambda invocations per shard concurrently, multiplying throughput.

Option A (SSE) is a security feature; encryption/decryption is handled transparently by KMS and adds negligible latency. It does not affect consumer throughput or iterator age.

Option F (SQS FIFO) would require rearchitecting the pipeline. SQS FIFO has a 300 TPS limit per message group (per player), which would be even more constraining. This is not an effective solution for the throughput problem.

Option D (Firehose as intermediary) is architecturally incorrect. Firehose is a delivery service to destinations like S3/Redshift; inserting it between Kinesis and Lambda does not reduce Lambda consumer lag and adds unnecessary complexity.

Test yourself across every DEA-C01 domain

The free DEA-C01 practice test mixes about 20 questions weighted like the exam. The full 250-question bank adds instant grading, flashcards and a timed mock exam.

Study this domain

Data Ingestion and Transformation study guide (DEA-C01) →

Other DEA-C01 domains

← All AWS Data Engineer Associate study resources