Data Engineering Bootcamp is a hands-on course in building an end-to-end data pipeline, from batch and Kafka streaming ingestion through an Apache Iceberg lakehouse processed with PySpark to transformation with dbt, orchestration with Airflow and data quality gates. It suits developers moving into data engineering and analysts who run their own pipelines, and you leave with a working reference data platform and dashboard.
Most organisations have data spread across many systems: operational databases, daily export files and real-time event data. Meanwhile, business and AI teams need data that is clean, trustworthy and ready to use quickly. The usual problems are pipelines built ad hoc, no data quality testing, no clear ordering of jobs, and pipelines that are hard to extend as data volumes grow.
This course has learners build an end-to-end data platform for a sample retailer, MetroMart, with widely used open-source tools: PostgreSQL, Python with Polars and DuckDB, Apache Kafka, Apache Spark (PySpark), Apache Iceberg on S3-compatible object storage, dbt Core and Apache Airflow 3, all running with Docker Compose on the learner's laptop. By the end, learners have a pipeline that takes in both batch and streaming data, stores it as a lakehouse, transforms it into a star schema, applies automatic data quality gates and feeds a BI tool. (5 days, 6 hours per day, 30 hours in total, Intermediate level.)
What you’ll gain
Understand the data engineer's role and modern data platform architectures: warehouse, data lake and lakehouse
Design a star schema with slowly changing dimensions and write efficient analytical SQL
Build incremental, idempotent batch ingestion with Python, Polars and DuckDB
Understand event streaming and change data capture, and move real-time data with Apache Kafka
Store data as a lakehouse with Apache Iceberg and process it with PySpark
Use dbt Core to transform and test data and generate lineage documentation
Order and schedule jobs with Apache Airflow 3, with retries, alerting and backfills
Set up data quality gates and data contracts, and serve data to BI and AI teams
Who this course is for
Software developers who want to move into data engineering
Data analysts and BI developers who want to build and run their own pipelines
IT teams responsible for connecting data between systems in the organisation
Teams laying the data foundations for analytics and AI projects
Prerequisites
Basic Python, such as functions, lists, dictionaries and installing packages
Basic SQL such as SELECT, JOIN and GROUP BY
Basic command line and Git, and a basic understanding of containers
No prior experience with Kafka, Spark, Airflow or dbt is needed; the instructor introduces each tool before the labs
Curriculum
Course Details
This course builds on Modern Data Engineering and Lakehouse Architecture (3 days), which focuses on lakehouse concepts and architecture, and extends it into a 5-day bootcamp that builds the whole path hands-on. It adds streaming and change data capture with Apache Kafka, large-scale processing with Apache Spark (PySpark), transformation with dbt Core, orchestration with Apache Airflow 3 and data quality gates, all the way to a dashboard. It runs for 5 days, 6 hours per day (30 hours in total, 09:00-16:00),
as a continuous workshop on a sample retailer, MetroMart, using generated data only. Every service runs with Docker Compose on the learner's laptop, so no cloud account is needed. All tools are open source, and because the MinIO community edition is no longer maintained, the labs use a maintained open-source S3-compatible object store instead. Learners take home the Docker Compose files for the data stack and the source code of the pipelines, the dbt project and the Airflow DAGs to adapt to their own work.
Day 1Data Engineering Foundations and Dimensional Modelling
Section 1: The Data Engineer's Role and Data Platform Architecture
How data engineers, data analysts and data scientists differ
Data warehouse, data lake and lakehouse compared
ETL and ELT, and the medallion architecture (bronze, silver, gold)
When to choose batch and when to choose streaming
Section 2: Lab: Setting Up the Data Stack with Docker Compose
The structure of a docker-compose.yml for a multi-service data stack
Volumes, networks and environment variables
Checking service status and reading logs when something goes wrong
Allocating RAM and CPU to suit the learner's laptop
Lab: start the MetroMart data stack and check that every service is ready
Section 3: Lab: SQL for Analytics
A review of JOIN, GROUP BY and subqueries
Common table expressions (CTEs) and window functions such as ROW_NUMBER, LAG and SUM OVER
Reading execution plans and basic indexing
Lab: analyse running sales totals and product rankings for MetroMart
Section 4: Dimensional Modelling (Star Schema)
Fact and dimension tables and defining the grain
Surrogate keys and natural keys
Slowly changing dimensions (SCD Type 1 and Type 2)
Designing a date dimension
Section 5: Workshop Day 1: The MetroMart Star Schema
Load the generated MetroMart data into PostgreSQL
Design fact_sales, dim_product, dim_customer, dim_store and dim_date
Define the grain and keys of each table, with the reasoning
Workshop: write SQL that analyses sales by store, product category and period
Day 2Data Ingestion: Batch and Streaming
Section 6: Batch Ingestion with Python
CSV, JSON and Parquet file formats, with their strengths and limits
Full and incremental loads, and using watermarks
Designing idempotent pipelines that give the same result when re-run
Lab: pull product and customer data from PostgreSQL incrementally
Section 7: Lab: Polars and DuckDB
Polars DataFrames, the lazy API and expressions
DuckDB querying Parquet and CSV files directly with SQL
Comparing with pandas and choosing a tool for the size of the data
Lab: convert branch CSV files to Parquet with Polars and check them with DuckDB
Section 8: Event Streaming with Apache Kafka
Topics, partitions, offsets, producers, consumers and consumer groups
Kafka 4 runs on KRaft without ZooKeeper
Delivery semantics: at-most-once, at-least-once and exactly-once
Lab: create a topic and inspect partitions and offsets with the command-line tools
Section 9: Change Data Capture (CDC)
How CDC reads a database's transaction log
Kafka Connect and Debezium with PostgreSQL (demonstration)
Managing event schemas and schema evolution
When to use CDC instead of batch extraction
Section 10: Workshop Day 2: MetroMart Ingestion
A batch pipeline that pulls data from PostgreSQL and branch CSV files into Parquet
A Python producer that simulates order events into a Kafka topic
A consumer that writes the events to the raw data area
Workshop: re-run the pipeline and stop the consumer mid-way, then check that no data is duplicated or lost
Day 3Lakehouse and Distributed Processing
Section 11: Object Storage and the Lakehouse
S3-compatible object storage, buckets and permissions
The problems of a file-only data lake, and why a table format is needed
Apache Iceberg, Delta Lake and Apache Hudi compared
Lab: create buckets and permissions for bronze, silver and gold
Section 12: Lab: Apache Iceberg in Depth
The structure of metadata, manifests and snapshots
The REST catalog and connecting from several engines
Schema evolution, partition evolution and hidden partitioning
Time travel and rolling back data
Lab: add a column and look back at the data before the change with time travel
Section 13: Lab: Apache Spark and PySpark
Spark architecture: driver, executors, jobs, stages and tasks
The DataFrame API and Spark SQL
Transformations, actions and lazy evaluation
Reading and writing Iceberg tables with Spark 4
Lab: read the Spark UI to see the stages and shuffles of a real job
Section 14: Designing the Bronze and Silver Layers
Cleaning data and handling nulls and duplicates
Merging and upserting data with MERGE INTO
Handling small files (compaction) and table maintenance
Lab: compact an Iceberg table and expire old snapshots
Section 15: Workshop Day 3: The MetroMart Lakehouse
Store the raw data from Day 2 as Iceberg tables in the bronze layer
Write PySpark jobs that clean the data and remove duplicates
Upsert into the silver layer with MERGE INTO
Workshop: try schema evolution and time travel on the order data
Day 4Transformation with dbt and Orchestration with Airflow
Section 16: dbt Core Fundamentals
The structure of a dbt project, profiles and adapters
Models, sources, ref and the dependency graph
Materialisations: view, table, incremental and ephemeral
Lab: build staging models from the silver layer
Section 17: Lab: dbt for Enterprise Work
Layering models into staging, intermediate and mart
Jinja, macros and packages
Snapshots for SCD Type 2
dbt Docs and the lineage graph
Lab: build fact_sales and the dimensions, with a customer snapshot
Section 18: Apache Airflow 3 Fundamentals
Airflow 3 architecture: scheduler, API server, DAG processor, triggerer and workers
Writing DAGs and tasks with the TaskFlow API
Assets and data-aware scheduling
Following runs in the Airflow 3 UI
Section 19: Orchestration for Real Workloads
Retries, timeouts, callbacks and Deadline Alerts for late-running work
Passing values between tasks and handling connections and variables securely
Running Spark and dbt jobs from Airflow
Backfills and re-running past intervals
Section 20: Workshop Day 4: An Automated Pipeline
Write a DAG that runs ingestion, PySpark jobs and dbt in dependency order
Set retries and alerts for failed tasks
Use assets so the gold layer runs when the silver layer is updated
Workshop: make a task fail on purpose, fix it and re-run only the part that failed
Day 5Data Quality, Serving and Master Workshop
Section 21: Lab: Data Quality and Data Contracts
Dimensions of data quality: completeness, accuracy, freshness and uniqueness
Generic and singular dbt tests, and source freshness
Data contracts between data producers and consumers
Lab: add a quality gate that stops the pipeline when data looks wrong
Section 22: Observability and Running Pipelines
Tracking logs, metrics and run durations
Designing alerts so the team learns of problems quickly without alert fatigue
Incident response for data pipelines
Runbooks for common incidents such as late data or schema changes
Section 23: Lab: The Serving Layer for BI and AI
Designing marts that suit dashboards
Connecting Metabase or Apache Superset, and how to connect Power BI
Preparing data for AI teams, such as feature tables
Lab: a daily sales dashboard by store and product category
Section 24: Taking It into the Organisation
Basic data governance, data ownership and access rights
Moving the stack to the cloud or Kubernetes
Advanced stream processing with Apache Flink and Kafka Streams (overview)
Planning the growth of a data engineering team
Section 25: Master Workshop: The MetroMart Data Platform
Combine batch and streaming ingestion, the Iceberg lakehouse, PySpark, dbt and Airflow into one pipeline
Add data quality gates and alerting
Test scenarios with malformed data and late-arriving data
Show the results on the dashboard and present the team's architecture
Schedule & training options
For individuals — public rounds
No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770
How does this course differ from Modern Data Engineering and Lakehouse Architecture?
Modern Data Engineering and Lakehouse Architecture is a 3-day course focused on lakehouse concepts and architecture. This is a 5-day bootcamp that builds the whole path hands-on in one project, adding streaming and CDC with Apache Kafka, processing with PySpark, transformation with dbt Core, orchestration with Airflow 3 and data quality gates, all the way to a dashboard. It suits learners who want to see and build a complete data platform themselves.
Do I need a cloud account?
No. Every service, including PostgreSQL, Kafka, object storage, Spark, the Iceberg catalog, Airflow and the BI tool, runs with Docker Compose on your laptop, and all of it is open source. Moving the stack to the cloud or Kubernetes, and the data platform services of each cloud provider, are covered as concepts and migration guidance.
What laptop specification do I need?
At least 16 GB of RAM (32 GB recommended) and 40 GB of free disk, because many services run at once. Install Docker Desktop (with WSL2 on Windows) or Docker Engine and check that containers run, plus Python 3.12 or later, Git and VS Code, before the training day. Download the Docker images in advance from the list the instructor sends, so class time is not spent downloading.
Why not use MinIO for object storage?
The MinIO community edition stopped publishing official Docker images, and its repository was made read-only in 2026, so it is not a sound base for labs that learners will keep using. The course uses a maintained open-source S3-compatible object store, chosen on the training day. The concepts and code that work through the S3 API apply equally to other S3-compatible storage, including cloud services.
Does the course cover Apache Flink or Kafka Streams?
Not as labs. Advanced stream processing with Apache Flink and Kafka Streams, and large Kafka and Spark cluster deployments, are covered as concepts on the last day, because they need more time and resources than 5 days allow. Debezium CDC is shown as a demonstration. The main streaming labs use Python producers and consumers on Kafka.
Which tool versions does the course use?
The course follows the latest stable releases on the training day. As of October 2026 that means Apache Kafka 4 on KRaft, Apache Spark 4, Apache Airflow 3, current releases of dbt Core, DuckDB and Polars, and PostgreSQL 18. Data tools move quickly, so the exact Docker images and versions are sent to learners before the training day.
Many organisations still keep a data warehouse for reporting apart from a data lake for raw files, and pull data from their core systems with nightly batch ETL. The result is data stored twice, numbers that do not match, slow answers to questions that need…
When an organisation's key systems run on PostgreSQL, getting it installed is not enough. The team needs to know why the database slows down, whether data can be restored to the moment before an incident, and how service carries on when the primary server…
Many people can write basic Python but stay stuck with short scripts. When they need programs that run several tasks at once, talk over a network, send email, store data in a database or share code with a team, they are no longer sure how to write them.…