Data Engineering Focus

Building reliable data pipelines

My current focus is Data Engineering: ingesting raw data, transforming it with SQL and Python, and delivering clean datasets that products and teams can trust. Here's how I work — with real samples.

Ingest

Pull data from APIs, files, and databases into a warehouse — incrementally and reliably.

Transform

Turn raw, messy data into clean, modeled fact & dimension tables with SQL and Python.

Deliver

Serve analysis-ready datasets for dashboards, reporting, and product features.

Data Stack

Languages

SQLPython

Transformation

dbtPandasWindow Functions

Orchestration

AirflowCronCI/CD

Storage

PostgreSQLBigQueryParquet

Transforming with SQL

Deduplicating raw orders and aggregating daily revenue per customer using window functions.

daily_revenue.sql
-- Daily revenue per customer, deduplicated and cleaned
WITH ranked_orders AS (
  SELECT
    customer_id,
    order_id,
    order_date::date           AS order_day,
    amount,
    ROW_NUMBER() OVER (
      PARTITION BY order_id
      ORDER BY updated_at DESC
    ) AS rn                       -- keep the latest version of each order
  FROM raw.orders
  WHERE status = 'paid'
    AND amount > 0
)
SELECT
  customer_id,
  order_day,
  COUNT(*)            AS orders,
  SUM(amount)         AS revenue,
  ROUND(AVG(amount),2) AS avg_order_value
FROM ranked_orders
WHERE rn = 1            -- drop duplicate order rows
GROUP BY customer_id, order_day
ORDER BY order_day DESC, revenue DESC;

ETL with Python

A small, readable extract → transform → load job with cleaning, deduplication, and feature derivation.

transform_orders.py
import pandas as pd
from sqlalchemy import create_engine

def transform_orders(raw_path: str) -> pd.DataFrame:
    """Extract raw orders, clean them, return analysis-ready rows."""
    df = pd.read_csv(raw_path)

    # 1. Standardize & clean
    df.columns = [c.strip().lower() for c in df.columns]
    df["order_date"] = pd.to_datetime(df["order_date"], errors="coerce")
    df = df.dropna(subset=["order_id", "customer_id", "order_date"])

    # 2. Keep only valid, paid orders and drop duplicates
    df = df[(df["status"] == "paid") & (df["amount"] > 0)]
    df = df.sort_values("updated_at").drop_duplicates("order_id", keep="last")

    # 3. Derive features
    df["order_day"] = df["order_date"].dt.date
    df["revenue"] = df["amount"].round(2)
    return df[["customer_id", "order_day", "order_id", "revenue"]]

def load(df: pd.DataFrame, table: str, dsn: str) -> int:
    engine = create_engine(dsn)
    df.to_sql(table, engine, schema="marts", if_exists="replace", index=False)
    return len(df)

if __name__ == "__main__":
    clean = transform_orders("data/raw/orders.csv")
    rows = load(clean, "fct_orders", "postgresql://localhost/warehouse")
    print(f"Loaded {rows} clean rows into marts.fct_orders")

Pipeline Architecture

A typical ELT flow I build — from sources to analytics-ready marts, with data-quality checks along the way.

Transform in Action

Raw data is rarely clean. Here's a before/after of a typical transform step.

Raw — messy
customerdateamount
Andi 12/03/26"150.000"
andi2026-03-12150000
Budinull-5
Clean — modeled
customer_idorder_dayrevenue
andi2026-03-12150000
budiinvalid

Duplicates merged, dates normalized, invalid rows dropped.

Looking for a Data Engineer?

I love turning messy data into clean, reliable pipelines. Let's talk about your data challenges.