dbt nima va u omborda ma’lumotlarni qanday o‘zgartiradi
Asoslar3 daqInnovialabs tahririyati
Qisqacha
dbt — ma’lumotlarni to‘g‘ridan-to‘g‘ri omborda o‘zgartiradigan vosita: siz modellarni oddiy SELECT so‘rovlari sifatida yozasiz, dbt esa ularni to‘g‘ri tartibda quradi, tekshiradi va hujjatlashtiradi.
Qisqa javob
dbt (data build tool) ELT sxemasidagi T harfi uchun javob beradi: Extract, Load, Transform. Avval xom ma’lumotlar omborga o‘z holicha yuklanadi (CRM, ilova bazasi, to‘lov tizimlaridan), so‘ng dbt ularni hisobotlar uchun toza jadvallarga aylantiradi.
dbt ma’lumotlarni manbalardan olib kelmaydi va o‘zida saqlamaydi. U:
- sizning SQL modellaringizni oladi — bitta
SELECTdan iborat fayllar; - ularni omborda jadval yoki view sifatida quradi (PostgreSQL, BigQuery, Snowflake, ClickHouse va adapterlar orqali boshqalar);
- modellar orasidagi bog‘liqliklardan qurish tartibini o‘zi aniqlaydi;
- ma’lumotlar sifati bo‘yicha testlarni ishga tushiradi;
- hujjatlar va ma’lumotlar kelib chiqishi grafini (lineage) yaratadi.
Aslida dbt analitik SQLga dasturlash amaliyotlarini olib kiradi: Git, code review, testlar, dev va prod muhitlari.
Modellar va ref()
Model — models/ papkasidagi .sql fayl. Fayl nomi jadval yoki view nomiga aylanadi. Jadval nomlarini qattiq yozish o‘rniga modellar bir-biriga ref() orqali murojaat qiladi:
-- models/marts/fct_orders.sql
select
o.order_id,
o.customer_id,
o.created_at::date as order_date,
sum(i.price * i.quantity) as order_total
from {{ ref('stg_orders') }} o
join {{ ref('stg_order_items') }} i on i.order_id = o.order_id
group by 1, 2, 3
ref() ikki vazifani bajaradi: joriy muhit uchun to‘g‘ri sxemani qo‘yadi va dbtga fct_orders ikkita staging modeliga bog‘liq ekanini bildiradi. Shu bog‘lanishlardan graf (DAG) tuziladi va dbt run modellarni kerakli tartibda bajaradi.
Tashqi vosita yuklagan xom jadvallar sources sifatida e’lon qilinadi va source('shop', 'orders') orqali chaqiriladi.
Qatlamlar: staging va marts
Odatiy loyiha tuzilmasi:
| Qatlam | Ichida nima bor | Misol |
|---|---|---|
| staging | Har bir xom jadvalga bitta model: ustunlarni qayta nomlash, turlarni keltirish, tozalash | stg_orders, stg_payments |
| intermediate (ixtiyoriy) | Oraliq birlashtirishlar va hisob-kitoblar | int_orders_with_payments |
| marts | Biznes uchun tayyor jadvallar: faktlar va o‘lchamlar | fct_orders, dim_customers |
Qoida oddiy: marts faqat staging yoki intermediate modellaridan o‘qiydi, xom jadvallardan to‘g‘ridan-to‘g‘ri emas. Shunda manba o‘zgarsa, o‘nlab hisobot emas, bitta staging modelini tuzatasiz.
Testlar va hujjatlar
Testlar modellar yonida YAML faylda yoziladi:
# models/staging/stg_orders.yml
version: 2
models:
- name: stg_orders
description: "Internet-do‘kon bazasidagi buyurtmalar, har buyurtmaga bitta qator"
columns:
- name: order_id
tests: [unique, not_null]
- name: status
tests:
- accepted_values:
values: ['new', 'paid', 'shipped', 'cancelled']
O‘rnatilgan testlar: unique, not_null, accepted_values, relationships. O‘zingiznikini ham yozish mumkin — nol qator qaytarishi kerak bo‘lgan SQL so‘rov. dbt build buyrug‘i modellarni quradi va darhol tekshiradi.
dbt docs generate tavsiflar, ustunlar va lineage grafini hujjatlar saytiga yig‘adi. Har bir metrika qaysi manbalardan yig‘ilishi va jadval o‘zgarsa nima buzilishi ko‘rinib turadi.
Minimal loyiha
my_project/
dbt_project.yml
models/
staging/
sources.yml
stg_orders.sql
stg_orders.yml
marts/
fct_orders.sql
Omborga ulanish profiles.yml faylida beriladi. Ish sikli: modelni o‘zgartirish, dbt build --select fct_orders+ ni ishga tushirish (model va unga bog‘liq hamma narsa), natijani tekshirish, commit qilish.
Modellarni turlicha materializatsiya qilish mumkin: view, table, incremental (faqat yangi qatorlarni qo‘shish) va ephemeral (boshqa modellarga CTE sifatida qo‘yiladi).
Kichik jamoaga dbt qachon kerak
Kerak, agar:
- sizda ombor bor va unga bir nechta manbadan muntazam ma’lumot yuklanadi;
- hisobotlar SQL mantig‘i kattalashib ketgan va turli dashboardlar bitta metrikani turlicha hisoblaydi;
- analitika ustida kamida ikki kishi ishlaydi va o‘zgarishlar tarixi kerak;
- manbadagi o‘zgarishdan keyin hisobot «jimgina» buzilgan holatlar bo‘lgan.
Hali erta, agar:
- ma’lumot bitta manbadan keladi, hisobotlar esa bir nechta;
- analitika CRM yoki BI vositasining o‘rnatilgan hisobotlarida yashaydi va hammaga yetarli;
- ombor yo‘q — avval ma’lumot yuklashni hal qilish kerak.
Ko‘p uchraydigan xatolar
- Staging qatlamini o‘tkazib yuborib, marts modellarini to‘g‘ridan-to‘g‘ri xom jadvallar ustiga qurish.
- Asosiy ustunlarda testlarsiz ishlash — aynan ular JOINdan keyingi dublikatlarni ushlaydi.
- Birinchi kundan barcha modellarni
tableqilish: hajm kichik ekan, view arzonroq. - Biznes mantiqni bir vaqtda ham dbtda, ham BI vositasida saqlash.