๐ฆ Banking Data Engineering Pipeline
March 6, 2026 ยท View on GitHub
End-to-end data engineering project built on a banking dataset. Raw transactional data is ingested with Airbyte, stored and transformed in Snowflake using dbt, and visualized through Power BI and Qlik Sense dashboards.
๐ Architecture

| Layer | Tool |
|---|---|
| Ingestion | Airbyte |
| Data Warehouse | Snowflake |
| Transformation | dbt (Data Build Tool) |
| Visualization | Power BI, Qlik Sense |
๐ Project Structure
banking-data-engineering/
โโโ dbt/
โ โโโ models/
โ โ โโโ sources.yaml # Raw source definitions
โ โ โโโ stg_account.sql # Staging: Account
โ โ โโโ stg_customer.sql # Staging: Customer
โ โ โโโ stg_transaction.sql # Staging: Transaction
โ โ โโโ stg_card.sql # Staging: Card
โ โ โโโ stg_dispositions.sql # Staging: Disposition
โ โ โโโ marts/
โ โ โโโ dim_account.sql # Dimension: Account
โ โ โโโ dim_customer.sql # Dimension: Customer
โ โ โโโ dim_card.sql # Dimension: Card
โ โ โโโ dim_date.sql # Dimension: Date
โ โ โโโ dim_disposition.sql # Dimension: Disposition
โ โ โโโ fct_transactions.sql # Fact: Transactions (Incremental)
โ โโโ macros/
โ โ โโโ categorize_amount.sql # Macro: Transaction amount categorization
โ โโโ snapshots/
โ โโโ snp_customer.sql # SCD Type 2: Customer snapshot
โโโ dashboards/
โ โโโ Banking_App.pbix # Power BI dashboard
โ โโโ Banking_App.qvf # Qlik Sense dashboard
โโโ images/
๐ Data Flow
1. Ingestion โ Airbyte
Raw banking data is ingested from the source system into Snowflake's RAW_DATA schema using Airbyte connectors.

2. Transformation โ dbt
The dbt project follows a two-layer transformation approach:
Staging Layer (stg_*)
Cleans and standardizes column names from raw source tables:
stg_accountโ Account frequency and creation datestg_customerโ Customer demographics (name, gender, birth date, salary, location)stg_transactionโ Transaction type, amount, balance, and datestg_cardโ Card informationstg_dispositionsโ Account-customer relationship
Marts Layer (dim_* / fct_*)
Business-ready dimensional models following a star schema:
| Model | Type | Description |
|---|---|---|
dim_customer | Dimension | Customer details |
dim_account | Dimension | Account details |
dim_card | Dimension | Card details |
dim_date | Dimension | Date dimension |
dim_disposition | Dimension | Account-customer mapping |
fct_transactions | Fact | Incremental transaction fact table |
3. Key dbt Features Used
Incremental Model
fct_transactions is materialized as an incremental model. On each run, only new transactions (based on transaction_date) are loaded, improving performance on large datasets.
{{ config(materialized='incremental', unique_key='transaction_id') }}
Custom Macro
categorize_amount macro categorizes transaction amounts into business-friendly buckets:
| Category | Range |
|---|---|
| Low Value | < 1,000 |
| Medium Value | 1,000 โ 10,000 |
| High Value | > 10,000 |
Snapshot (SCD Type 2)
snp_customer tracks historical changes in customer city, salary, and job_title using dbt's built-in snapshot strategy.
๐ Dashboards
Power BI

Qlik Sense

๐ ๏ธ Setup & Usage
Prerequisites
- Snowflake account
- Airbyte (Cloud or self-hosted)
- dbt Core or dbt Cloud
- Power BI Desktop / Qlik Sense
Running dbt Models
# Install dependencies
pip install dbt-snowflake
# Configure your Snowflake profile in ~/.dbt/profiles.yml
# Run all models
dbt run
# Run staging models only
dbt run --select stg_*
# Run mart models only
dbt run --select marts.*
# Run snapshots
dbt snapshot
# Run tests
dbt test
๐๏ธ Snowflake Configuration
| Parameter | Value |
|---|---|
| Database | AMERICANRETAILBANK |
| Raw Schema | RAW_DATA |
| Target Schema | dbt_aalkan |
๐งฐ Tech Stack