পাঠ ০৪ · ২৯-এর মধ্যে · মডিউল ১

ETL বনাম ELT

ETL vs ELT — the order matters
৬ মিনিট পড়া শুরু · Beginner Pipeline pattern

এই পাঠে যা শিখবেন

  • ETL ও ELT-র মৌলিক পার্থক্য, ক্রম-এর প্রভাব
  • কেন cloud warehouse-এর উত্থান ETL-কে ELT-তে rewrite করেছে
  • dbt-র ভূমিকা ও modern data stack-এর কাঠামো
  • ETL ও ELT কোনটি কখন appropriate — বাস্তব সিদ্ধান্ত

১ · তিনটি অক্ষর — কিন্তু ক্রমে বড় পার্থক্য

ETLETL — Extract, Transform, Loadএকটি classic pipeline pattern: source থেকে data extract, একটি staging server-এ transform (cleaning/joining), তারপর warehouse-এ load। ১৯৭০-৯০-এর warehouse-এর সীমিত compute-এর প্রতিক্রিয়ায় তৈরি। ও ELTELT — Extract, Load, Transformআধুনিক pattern: data raw অবস্থায় warehouse-এ load, তারপর warehouse-এর elastic compute দিয়ে SQL transform। Cloud-যুগের default। — নাম প্রায় একই, কিন্তু philosophy পুরোটা ভিন্ন। শুধু "T" ও "L" স্থান-বদল — কিন্তু এতে cost, speed, agility, debugging সব বদলে যায়।

একই ব্যবসা-প্রশ্ন — "BD-র প্রতিটি জেলায় গত মাসে Daraz-এর গড় order value":

  • ETL approach: production DB থেকে দরকারি column extract → একটি Spark/Airflow worker-এ Python/Scala-তে transform → warehouse-এ "ready" table load। Dashboard সরাসরি এই table পড়ে।
  • ELT approach: production DB থেকে raw orders + addresses copy → warehouse-এ raw.orders, raw.addresses table load → warehouse-এ একটি SQL view/model "marts.daily_district_aov" তৈরি (dbt দিয়ে)। Dashboard এই mart পড়ে।
এক বাক্যে

ETL: "Transform বাইরে, warehouse-এ ঢোকার আগে।" 1990-এর pattern।
ELT: "Transform ভিতরে, warehouse-এর elastic compute দিয়ে।" 2015-এর modern pattern।
শুধু order বদলেছে — কিন্তু cost ও agility পুরোটাই বদল।

২ · কেন আগে ETL ছিল — ১৯৯০-এর কারণ

Teradata, Oracle, IBM DB2 যুগে warehouse-এর সীমাবদ্ধতা:

  • Compute expensive: warehouse-এর CPU/RAM প্রতি ঘণ্টায় খুব দামি। সেখানে heavy transformation চালানো যেত না।
  • Storage expensive: raw data রাখা mean ১০x cost। তাই শুধু "ready" data ঢুকত।
  • Schema rigid: warehouse-এ schema বদলানো ব্যথাদায়ক, তাই pre-validate।
  • Concurrency low: heavy ETL run মানে BI dashboard slow।

সমাধান — একটি আলাদা staging serverStaging ServerETL pipeline-এ একটি intermediate server (যেমন Informatica, Talend, SSIS) যেখানে raw data নিয়ে transformation চালানো হয়, তারপর warehouse-এ load। Cloud যুগের আগে ETL-এর কেন্দ্রবিন্দু। (Informatica, Talend, IBM DataStage)। সেখানে Python/Java-তে transformation, তারপর শুধু polished data warehouse-এ।

এই pattern ৩০ বছর dominant ছিল। ২০১২-র আগে "ETL" ছিল data engineering-এর synonym।

৩ · কেন cloud আসার পর ELT এসেছে

২০১২-এর পর Snowflake, BigQuery, Redshift এসে warehouse-এর constraint উল্টে দিল:

  • Compute সস্তা ও elastic: Snowflake "warehouse" auto-suspend, scale up/down সেকেন্ডে। যখন transformation চাই — চালান, তারপর shut।
  • Storage সস্তা: S3-backed। ১০x raw data রাখলেও cost negligible।
  • Compute & storage separated: Snowflake storage-এ আছে, যেকোনো warehouse compute চালাতে পারে।
  • SQL fast on huge data: column-store + vectorized engine।
  • Schema evolution easy: Snowflake-এ ALTER TABLE ADD COLUMN instant।

এই environment-এ — "transform বাইরে কেন? ভিতরেই ভাল!" — এই insight থেকে ELT।

১৯৯০ ETL = বাড়িতে রান্না করার জন্য সবজি বাজার থেকে কেটে-কুটে আনা; কারণ বাড়িতে stove ছোট, কাটার জায়গা নেই। ২০২০ ELT = বাড়িতে এখন full kitchen + induction; raw সবজি এনে যেভাবে চান কাটুন। কাটা সবজি কেনার মানে নেই — flexibility হারানো হয়।

৪ · Modern Data Stack — ELT-র বাস্তব রূপ

২০১৫-২০২৫-এ একটি stack pattern dominant — বলা হয় Modern Data StackModern Data StackCloud-native ELT-centric pipeline architecture: Fivetran/Airbyte (ingestion) + Snowflake/BigQuery (warehouse) + dbt (transformation) + Looker/Metabase (BI)। ২০১৫-এর পর প্রভাবশালী।।

  • Ingestion (E + L): Fivetran, Airbyte, Stitch, Hevo — ২০০+ source থেকে warehouse-এ raw load। কোনো transformation না।
  • Storage: Snowflake, BigQuery, Redshift, Databricks।
  • Transformation (T): dbtdbt — data build toolSQL-based transformation framework। warehouse-এ raw থেকে marts তৈরির জন্য version-controlled, tested, documented SQL model। Modern data stack-এর "T" layer-এর de-facto standard। (data build tool)। SQL দিয়ে raw → staging → marts।
  • Orchestration: Airflow, Dagster, Prefect — পুরো pipeline schedule।
  • BI: Looker, Metabase, Tableau, Power BI।
  • Reverse-ETL: Hightouch, Census — warehouse থেকে operational tool-এ data ফেরত (যেমন Salesforce-এ enriched user)।
ETL বনাম ELT — transform কোথায়? 📋 ETL (1990s) Extract production DB Transform staging server Informatica/Spark Load warehouse Pre-cleaned only Raw lost Schema rigid 🤖 ELT (2015+) Extract production DB Load (raw) warehouse.raw Transform in warehouse (SQL) dbt Marts analytics-ready BI & ML + Raw retained, replay possible + SQL agility, version-controlled + Warehouse compute elastic − PII inside warehouse (governance চাই)
ETL ও ELT-র সবচেয়ে বড় পার্থক্য — warehouse-এ raw data থাকছে কিনা। ELT-তে raw থাকে — ভবিষ্যতে নতুন প্রশ্ন এলে replay possible। ETL-তে সেই সুযোগ নেই।

৫ · ELT-র Practical সুবিধা

  • Replay-ability: Raw data warehouse-এ থাকে। ভবিষ্যতে নতুন business প্রশ্ন এলে — raw থেকে নতুন mart বানানো যায়। ETL-এ raw হারিয়ে যেত — নতুন প্রশ্ন মানে নতুন pipeline।
  • SQL ubiquity: Analyst, scientist, engineer — সবাই SQL জানে। Spark/Java specialist হিরে।
  • Version control: dbt model = git repo। PR review, test, CI/CD।
  • Lineage automatic: dbt graph — "এই table কোথা থেকে আসছে" instant।
  • Cost visibility: Warehouse-এ query cost transparent।
  • Speed of iteration: নতুন metric চাইলে — SQL লিখে deploy। ETL-এ Python deploy + Airflow rebuild + tester।

৬ · একটি dbt model — ELT-র মূল কোড

SQL · dbt model
-- models/marts/marts_daily_district_revenue.sql
-- বর্ণনা: প্রতিদিন প্রতি জেলায় Daraz-এর revenue
-- Layer: marts (final analytics-ready)

{{ config(
    materialized = 'incremental',
    unique_key   = ['order_date', 'district']
) }}

WITH orders AS (
    SELECT * FROM {{ ref('stg_orders') }}
    {% if is_incremental() %}
      WHERE created_at > (SELECT MAX(created_at) FROM {{ this }})
    {% endif %}
),
addresses AS (
    SELECT * FROM {{ ref('stg_addresses') }}
)

SELECT
    DATE(o.created_at AT TIME ZONE 'Asia/Dhaka') AS order_date,
    a.district,
    COUNT(*)                                     AS orders,
    COUNT(DISTINCT o.user_id)                    AS unique_buyers,
    SUM(o.amount_bdt)                            AS gross_revenue,
    AVG(o.amount_bdt)                            AS avg_ticket
FROM orders o
JOIN addresses a USING (user_id)
WHERE o.status = 'completed'
GROUP BY 1, 2

    
এই dbt model-এর তিনটি বৈশিষ্ট্য পুরোটা দৃশ্যমান — (১) ref() দিয়ে dependency declare (lineage auto), (২) {{ config }} দিয়ে incremental run (শুধু new rows process), (৩) Jinja template-এ environment-aware logic। dbt run command দিলেই warehouse-এ এই table তৈরি/refresh।

৭ · Python ETL উদাহরণ — legacy pattern

Python · pandas ETL
import pandas as pd

# (E)xtract — production DB থেকে raw
orders   = pd.DataFrame({
    "order_id":   [1, 2, 3, 4, 5],
    "user_id":    [101, 102, 103, 102, 104],
    "amount_usd": [5, 12, 8, 15, 3],
    "status":     ["completed", "completed", "pending", "completed", "completed"],
})
addresses = pd.DataFrame({
    "user_id":  [101, 102, 103, 104],
    "district": ["Dhaka", "Chattogram", "Sylhet", "Khulna"],
})

# (T)ransform — staging-এ heavy lifting
USD_TO_BDT = 117.5
clean = (orders
    .query("status == 'completed'")
    .assign(amount_bdt=lambda d: d.amount_usd * USD_TO_BDT)
    .merge(addresses, on="user_id")
)

mart = (clean
    .groupby("district", as_index=False)
    .agg(orders=("order_id", "count"),
         revenue_bdt=("amount_bdt", "sum"))
)

# (L)oad — only the polished mart goes in
print(mart)
# warehouse-এ load: mart.to_sql("marts.district_revenue", engine, ...)

    
এই pattern এখনো বাস্তব — বিশেষ করে যেখানে Python data scientist কাজ করে। কিন্তু ELT-র কাছে দু'টি বড় হার: (১) raw warehouse-এ নেই — নতুন প্রশ্নে rerun, (২) version-control / test / lineage manually maintain।

৮ · কখন ETL এখনও appropriate

ELT default হলেও — চারটি scenario-তে ETL ভাল:

  • Sensitive PII: NID, ফোন, NID-এর photo — এগুলো warehouse-এ load করার আগেই hash/mask করা compliance-required। ELT-তে raw PII warehouse-এ থাকে — data engineer-এর সবার access।
  • Real-time / streaming: Pathao-র surge pricing — ৫ সেকেন্ডের মধ্যে decision। Warehouse SQL-এ এটা সম্ভব না; in-stream Flink/Spark transform।
  • Compute-constrained warehouse: Old on-prem Teradata-তে ELT চালালে cluster crash। Pre-transform ছাড়া উপায় নেই।
  • Heavy non-SQL transformation: Image resize, video encoding, ML feature extraction — SQL-এ inelegant। Spark/Beam-এ ETL-style ভাল।
Hybrid pattern প্রায়ই dominate — EtLT: Extract, light Transform (PII mask), Load, heavy Transform (in warehouse)। এটি ২০২৪-এ সবচেয়ে practical।

৯ · বাংলাদেশী stack-এর উদাহরণ

  • একটি SaaS startup (১০ জন): Airbyte (E+L) + Snowflake + dbt + Metabase। মাসে $200।
  • Daraz-সদৃশ e-commerce: Fivetran + Snowflake + dbt + Looker। ML-এর জন্য parallel Spark on Databricks।
  • bKash fintech: ETL pre-processing (PII mask) + ELT in warehouse + streaming Kafka+Flink (real-time fraud)। Hybrid stack।
  • Sonali Bank: Legacy on-prem ETL (Informatica) মূল — কারণ regulatory ও legacy constraint। Newer projects-এ ELT।
  • Pathao surge pricing: Pure streaming — "ETL" বললে মূলত Flink stream operators।
"ELT মানেই raw data সবার সাথে শেয়ার" — এটা ভুল implementation। Warehouse-এ row-level security, masking policy, তিন-স্তরের privilege (raw → curated → marts) অপরিহার্য। ELT compliance-friendly হতে পারে — কিন্তু work করতে হয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একটি old enterprise এ ১৫ বছর-পুরোনো Informatica ETL pipeline চলছে। CEO চান modern data stack-এ migrate করবেন। কী step-গুলো নেবেন? কোন risks ও কীভাবে phased migration করবেন?

Legacy migration data engineer-এর কঠিনতম প্রজেক্ট। "Big bang" migration প্রায়ই fail; phased ও parallel approach success-এর key।

Phase 0 — Discovery (২-৪ সপ্তাহ):

  • Pipeline inventory: কতটি Informatica job? কোন source-destination?
  • Critical path: কোনগুলো nightly regulatory report-এ feed?
  • SLA mapping: কোনটি 9 AM-এ finished must, কোনটি best-effort।
  • Stakeholder interview: প্রতিটি downstream consumer কে।
  • Cost baseline: Informatica license + server cost কত।

Phase 1 — Foundation (১-২ মাস):

  • Cloud warehouse setup (Snowflake/BigQuery)।
  • VPN/network connectivity legacy DB-এর সাথে।
  • CDC tool (Fivetran, Airbyte, AWS DMS) setup।
  • dbt project skeleton।
  • Orchestrator (Airflow) setup।
  • Identity, access, audit log।

Phase 2 — Parallel run (৩-৬ মাস):

  • Pilot pick: একটি non-critical mart (e.g., marketing dashboard) দিয়ে শুরু।
  • Informatica job continue চলছে; new dbt model parallel।
  • প্রতিদিন output compare — row count, sum, sample row।
  • Discrepancy investigate, gap বোঝা।
  • Stakeholder confidence build।

Phase 3 — Cutover (per pipeline ১-২ সপ্তাহ):

  • Confidence high হলে — downstream consumer-কে নতুন source-এ point।
  • Old pipeline ১-২ সপ্তাহ disabled-but-deployable।
  • Issues নাই — old pipeline decommission।
  • প্রতি সপ্তাহে ২-৩টি cutover।

Phase 4 — Cleanup (১-২ মাস):

  • Informatica server decommission।
  • License terminate।
  • Documentation update।
  • Postmortem।

Risks ও mitigation:

  • Hidden dependency: "এই Informatica job-এর output আবার যে csv তৈরি করে — finance team excel-এ open করে।" → Discovery phase-এ detail interview।
  • Subtle data difference: NULL handling, time zone, rounding। → Comparison test daily।
  • Skill gap: Informatica engineer dbt জানে না। → Training + parallel hire।
  • Vendor lock-in fear: CFO Snowflake bill নিয়ে চিন্তিত। → Cost monitoring dashboard।
  • Compliance: Audit trail break হলে BB-এর কাছে সমস্যা। → Comprehensive logging।

BD context:

  • BB regulation 7-year retention — old data lake parallel preserve।
  • Vendor (Informatica reseller in Dhaka) থেকে decommission contract carefully।
  • Skilled hire scarcer in Dhaka — budget-এ training।

মূল উপলব্ধি: Migration একটি ১২-১৮ মাসের project, ৩-৬ মাসের না। CEO-কে timeline upfront communicate করা key। যিনি phased plan ধৈর্য নিয়ে execute করেন — তিনি successful architect।

প্র ০২ "ELT-তে raw data warehouse-এ — PII security risk। Senior data engineer তো সব দেখতে পারবেন।" এই compliance challenge কীভাবে handle হয়?

এটি ELT-র সবচেয়ে বড় valid concern। সমাধানের একটি pattern set আছে — কোনো single fix নেই।

Layer 1 — Source-side masking (best for highly sensitive):

  • Production DB থেকে copy করার সময়ই PII hash/encrypt।
  • Fivetran-এ "column block list", Airbyte-এ "hashing transformer"।
  • NID, full ফোন warehouse-এ পৌঁছায় না — পৌঁছায় nid_hash, phone_last_4।
  • Trade-off: Customer-specific lookup কঠিন।

Layer 2 — Tokenization vault:

  • Production থেকে raw copy — কিন্তু একটি আলাদা vault এ। Vault-এ access strictly limited।
  • Warehouse-এ শুধু token (e.g., cust_a8f2k3)।
  • Specific lookup চাইলে — vault-এ explicit request, audit।
  • Stripe, banks-এ এই pattern।

Layer 3 — Warehouse access control:

  • Schema-level: raw.* only senior engineer; analytics.* all analyst।
  • Column-level masking: Snowflake/BigQuery dynamic masking. Analyst query-তে SELECT phone FROM ... — auto-return ***-***-1234।
  • Row-level security: Sales team শুধু own region।
  • Tag-based policy: column-এ PII tag — auto-apply mask।

Layer 4 — Audit ও governance:

  • প্রতিটি query log।
  • "Who queried PII column when" দেখা যায়।
  • Anomaly detection — unusual access pattern alert।
  • Periodic access review।

Layer 5 — Encryption:

  • At rest (warehouse default)।
  • In transit (TLS)।
  • Customer-managed key (CMK) for highly regulated।

Layer 6 — Operational:

  • Production engineer-এর "raw" access read-only, time-limited (24 hr token)।
  • Sensitive column query-এ ticket required।
  • Quarterly compliance audit।

BD-specific:

  • Data Protection Act ২০২৩: consent ও lawful basis লাগে। NID specially sensitive।
  • BB: ব্যাংকিং tx data domestic-এ থাকা required (data residency)। Snowflake AWS Singapore violation possible — Mumbai/Singapore acceptability vary।
  • BTRC: CDR (call detail) sensitive, telco-specific rule।

Practical bKash-সদৃশ design:

  • Tokenization vault on-prem (BD)।
  • Warehouse Singapore — only tokens।
  • Analyst sees masked column (+88017****1234)।
  • Specific user investigation: vault access, full audit।
  • Sub-hour SLA for fraud team via streaming.

মূল উপলব্ধি: "ELT মানে compliance compromise" myth। Properly architected ELT compliance-friendlier — কারণ central audit এক জায়গায়। কিন্তু architecting ৬-১২ মাসের কাজ; shortcut নেই।

প্র ০৩ dbt কেন একটি SQL-only tool হয়েও এত প্রভাবশালী? কোন ৫টি innovation Snowflake-এর "stored procedure" থেকে আলাদা?

dbt (২০১৬ Fishtown Analytics, পরে dbt Labs) ২০২০-এর পর থেকে data engineering-এ revolutionary। SQL-ই — কিন্তু engineering practice আনল।

(১) Software-engineering practice SQL-এ:

  • প্রতিটি model = file in git repo।
  • PR review — code change peer review।
  • CI/CD — PR-এ auto-run dbt build & test।
  • Branching — analyst dev branch-এ experiment।
  • Stored procedure-এ এই কিছু নেই; যা নেই তা scale-এ chaos।

(২) Lineage automatically:

  • dbt-এ {{ ref('orders_clean') }} পড়লেই — dependency graph তৈরি।
  • dbt docs generate — visual graph: কোন model কোথা থেকে আসে, কোথায় যায়।
  • Production-এ "এই column-এ ভুল কোথায়?" trace করা সহজ।
  • Stored procedure-এ "find usages" manual; lineage chase-করা painful।

(৩) Built-in testing:

  • schema.yml-এ declarative test — "user_id should be unique, not null"।
  • dbt test command warehouse-এ assertion query চালায়।
  • Failed test = pipeline halt, alert।
  • Stored procedure-এ test লেখা manual; rarely done।

(৪) Materializations:

  • একই SQL → different physical strategies: view, table, incremental, ephemeral।
  • Configuration change-এ — SQL untouched।
  • Stored procedure-এ এক pattern hard-coded।

(৫) Macros & Jinja templating:

  • Reusable SQL function ({{ get_division(district) }})।
  • Environment-aware ({% if target.name == 'prod' %}...)।
  • Loops, conditionals — pure SQL-এ impossible।
  • Code DRY।

আরও কারণ:

  • Documentation auto: column description-এ markdown। Site auto-generated।
  • Snapshots (SCD type 2): historical tracking declaratively।
  • Seeds: small reference data git-এ।
  • Packages: dbt_utils, dbt_artifacts — reusable modules।
  • Adapter ecosystem: Snowflake, BigQuery, Postgres, Databricks — same dbt code-base।

cultural impact:

  • "Analytics engineer" নতুন role — SQL + git + business।
  • Data team workflow আরো structured।
  • Documentation-as-code।

BD adoption:

  • Daraz, Pathao, bKash internal team-এ widely used।
  • Open-source core ফ্রি, dbt Cloud paid (small team-এ ফ্রি tier)।
  • Skill in Dhaka rising — ২০২২ থেকে job listing 5x।

মূল উপলব্ধি: dbt SQL changed করেনি — SQL-এর চারপাশ এ engineering practice এনেছে। সবচেয়ে পরিবর্তনশীল innovation প্রায়ই "নতুন কিছু" না — বিদ্যমানের চারপাশ-এ rigor।

প্র ০৪ Pathao surge pricing-এ পাঁচ সেকেন্ডে decision লাগে। ELT batch-এ সম্ভব না — কিন্তু "streaming ETL" ও আছে। এই use case-এ pipeline architecture কেমন হবে?

Real-time decisioning batch ELT-র সম্পূর্ণ ভিন্ন world। Architecture হার্ডওয়্যার, latency, ও business decision-এর intersection।

সমস্যা:

  • Rider/customer location প্রতি ৫ সেকেন্ডে।
  • "Demand spike হচ্ছে" detect ১০ সেকেন্ডে।
  • "Surge price activate" ১৫ সেকেন্ডে।
  • Batch warehouse-এ এই pace impossible।

Architecture — Lambda/Kappa pattern:

Hot path (real-time):

  • Mobile app → API → Kafka topic: rider_location, customer_request।
  • Kafka → Flink: sliding window 30 seconds:
    • Per geohash demand count।
    • Per geohash supply count।
    • Demand/supply ratio।
  • Flink → Redis: per-geohash surge multiplier (1.0, 1.2, 1.5, 2.0)।
  • Booking API → Redis lookup: price = base × multiplier।
  • Total latency: rider GPS → surge active < ১৫ সেকেন্ড।

Cold path (analytics ELT):

  • Kafka → S3 sink: Avro/Parquet, partitioned by hour।
  • S3 → Iceberg lakehouse: raw history।
  • dbt models: daily demand patterns, regional trends।
  • Use: ML demand forecasting, postmortem, regulatory report।

Feature store bridge:

  • Cold path features (rider rating, historical earning) → online feature store।
  • Hot path joins online features with real-time demand।
  • ML model serve in 50ms।

Streaming ETL transformations:

  • Filter: invalid GPS (outside BD borders) drop।
  • Enrich: geohash from lat/long।
  • Aggregate: tumbling/sliding windows।
  • Join: rider_location + customer_request → matching candidates।
  • Pattern: CEP (complex event processing) — "5 cancellations in 2 minutes from same area" → suspicious।

Reliability concerns:

  • Out-of-order events: Watermark mechanism। 30-second tolerance।
  • Backpressure: Kafka partition count, Flink parallelism tuning।
  • State management: Flink checkpoints to S3 every 30 seconds।
  • Failover: active-passive Flink cluster across regions।

Cost reality:

  • Streaming infrastructure 5-10x batch।
  • ৩-৪ engineer 24x7 oncall।
  • Bug-এর consequence — surge ভুল activate, customer rage।
  • Test environment realistic চাই।

BD-specific:

  • Bandwidth: rider 4G — intermittent। App-এ buffering।
  • Geohash strategy: Dhaka densely-packed; rural sparse। Adaptive grid size।
  • Eid/festival surge: peak load 10x। Auto-scaling pre-warmed।
  • Currency: BDT integer, no fraction issues।

Anti-pattern (avoid):

  • "PostgreSQL + cron every 30 sec" — works at small scale, breaks at 10k events/sec।
  • "Snowflake streaming" — Snowpipe latency 30-60 sec, too slow।
  • "In-app calculation" — demand awareness দরকার, single device-এ impossible।

মূল উপলব্ধি: Real-time ETL batch ELT থেকে fundamentally different mindset। Latency, state, ordering — এই tri-valent challenge। যিনি দু'টি world-ই navigate করতে পারেন — তিনি sought-after senior engineer।

অনুশীলন

  1. চিনুন: নিচের প্রতিটি scenario — ETL না ELT না Streaming?
    • (ক) Daraz nightly sales dashboard refresh
    • (খ) bKash anti-fraud real-time blocking (5-sec)
    • (গ) Sonali Bank monthly BB regulatory report (PII restricted)
    • (ঘ) Pathao food — restaurant menu daily price update
    • (ক) ELT: nightly batch + dbt + Snowflake/BigQuery।
    • (খ) Streaming: Kafka + Flink + Redis।
    • (গ) ETL: PII pre-mask, regulatory pipeline strict।
    • (ঘ) ELT: daily batch, simple dbt model।
  2. SQL লিখুন: dbt-style একটি staging model লিখুন — raw.bkash_tx থেকে শুধু completed tx নিয়ে, BDT amount add (amount_paisa / 100), tx_dhaka_time column যোগ করুন।
    -- models/staging/stg_bkash_tx.sql
    {{ config(materialized='view') }}
    
    SELECT
        tx_id,
        sender_id,
        receiver_id,
        amount_paisa / 100.0                                AS amount_bdt,
        status,
        created_at,
        created_at AT TIME ZONE 'Asia/Dhaka'                AS tx_dhaka_time
    FROM {{ source('bkash', 'tx') }}
    WHERE status = 'completed'
      AND created_at > '2024-01-01'
  3. ভাবুন: আপনি একটি BD ride-share কোম্পানির data engineer। ETL, ELT, ও streaming — তিনটি pipeline pattern একসাথে চালাতে হবে। প্রতিটি কোন business question handle করবে?
    • Streaming (Kafka + Flink): surge pricing, fraud-block, real-time rider matching।
    • ELT (dbt + Snowflake): daily revenue dashboard, weekly cohort analysis, monthly regulatory report।
    • ETL (Airflow + Spark): ML model nightly retrain, image processing for verification, third-party API enrichment with PII masking।

    প্রতিটি pattern নির্দিষ্ট latency-cost-complexity trade-off সামলায়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? ব্রাউজারে কাজ না করলে Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ, শুধু Gmail অ্যাকাউন্ট লাগে।
পূর্ববর্তী পাঠ
পাঠ ০৩ · Lake, Warehouse, Lakehouse