Skip to the content.

What is a Data Lake?

A data lake is a centralized repository where you can store all your structured, semi-structured, and unstructured data at any scale in raw format.

✅ Store anything (CSV, JSON, images, videos, logs, parquet etc.) ✅ Schema-on-read (you define schema when you query — not when storing)


Example

You dump raw data into Amazon S3 (popular cloud data lake storage)

S3 bucket: /my-data-lake

→ /orders/2024/01/orders.csv  
→ /logs/2024/01/server-logs.json  
→ /images/2024/01/picture.jpg  
→ /users/2024/01/users.parquet

No need to define schema while storing. You query/transform later as needed.


Quickly — What are AWS Glue, Athena, Redshift?

Service What it is Example use
AWS Glue Data integration + ETL service Clean, transform raw data and catalog schema
Amazon Athena Query engine for data lake (S3) using SQL Run SQL directly on S3 files (CSV, JSON, Parquet etc.)
Amazon Redshift Cloud data warehouse Store cleaned, transformed, structured data optimized for fast SQL analytics

Think of it as a pipeline

RAW DATA (S3 — data lake)
    ↓
AWS Glue (ETL — clean + transform + catalog)
    ↓
→ Athena (SQL query raw/cleaned data in S3)  
→ OR  
→ Redshift (load into warehouse for fast BI queries)

How to partition raw data for best performance?

Partitioning = Organize data into folders based on query pattern to speed up reads

| Without partitioning | /orders/orders.csv → 1 huge file → Slow query (scans everything)

| With partitioning
/orders/year=2024/month=01/orders.csv  
/orders/year=2024/month=02/orders.csv  
/orders/year=2025/month=01/orders.csv

Then in Athena/Glue you can write:

SELECT * FROM orders WHERE year = '2024' AND month = '01'

→ It only scans 1 folder → Fast!


Best practices for partitioning

When to partition by If your queries often filter by
Date (year, month, day) Time-based filters (logs, orders)
Region, Country Geo-based filters
Customer ID, Product ID Entity-based filters (less common — careful of too many partitions)

In short (interview ready)