1. Analitik stekda dbt nima uchun kerak
dbt (data build tool) — modern data stack dagi transformatsiyalarning de-fakto standarti. SQL-first yondashuvi: analitiklar SELECT yozadi, dbt DDL, bogʼliqliklar, testlar va hujjatlarni boshqaradi.
Muammo: dbt odatda Snowflake, BigQuery, Redshift bilan bogʼlanadi. Apache Doris bilan rasmiy open-source adapter orqali toʼliq ishlashini kam odam biladi.
dbt-doris — dbt Core 1.7+ uchun adapter, MySQL protocol orqali ulanish (9030 port). Bu nima beradi:
- SQL-transformatsiyalarni Git da versiyalash.
- Analitik modellar uchun CI/CD — har bir PR ni testlash.
- Data lineage: modellar orasidagi bogʼliqliklarning avtomatik grafi.
- Documentation-as-code: modellar va ustunlarning tavsifi SQL yonida.
- Har bir ishga tushirishda maʼlumotlar sifatining avtomatik testlari.
2. Arxitektura: dbt + Doris
dbt + Apache Doris tipik arxitekturasi toʼrt qatlamdan iborat:
| SQL Compilation | dbt Core / dbt Cloud SQL-modellarni kompilyatsiya qiladi: ref() va source() hal qiladi, target SQL generatsiya qiladi, DAG orqali bogʼliqliklarni boshqaradi. |
| Transport | MySQL protocol (9030 port). Standart MySQL connector, har qanday klient bilan mos. Maxsus SDK talab qilinmaydi. |
| Materializations | table, view, incremental, ephemeral. Incremental modellar UPSERT-semantikasi uchun Doris Unique Key jadvallarini ishlatadi. |
| Data Serving | Apache Doris SQL bajaradi, jadvallarni boshqaradi, tashqi manbalarga kirish uchun Multi-Catalog qoʼllaydi. |
Asosiy afzallik: dbt + Doris Spark, Hadoop yoki qoʼshimcha hisoblash dvigatellari talab qilmaydi. Butun pipeline — boshidan oxirigacha SQL.
3. Quick Start: oʼrnatish va sozlash
Adapter ni pip orqali oʼrnatish:
// DBT-DORIS OʼRNATISH
pip install dbt-doris profiles.yml dagi ulanish konfiguratsiyasi:
// PROFILES.YML — DORIS GA ULANISH my_doris_project:
target: dev
outputs:
dev:
type: doris
host: 127.0.0.1 port: 9030 username: root
password: ""
database: analytics
schema: dbt_models MySQL protocol orqali ulanish (9030 port). Doris Multi-Catalog orqali bir nechta baza qoʼllash. Ulanishni tekshirish:
// ULANISHNI TEKSHIRISH
dbt debug 4. Materializations va Doris maʼlumotlar modellari
dbt materializations Doris obyektlariga qanday moslanadi:
| dbt Materialization | Doris Implementation | Qachon ishlatish kerak |
|---|---|---|
| table | CREATE TABLE AS SELECT | Toʼliq qayta qurish, kichik jadvallar |
| view | CREATE VIEW | Mantiqiy qatlamlar, materializatsiyasiz |
| incremental | INSERT INTO (Unique Key + UPSERT) | Katta jadvallar, kunlik/soatlik inkrementlar |
| ephemeral | CTE (Common Table Expression) | Oraliq hisob-kitoblar |
Doris Unique Key jadvallari uchun incremental strategy:
// INCREMENTAL MODEL: DORIS UNIQUE KEY
{{ config(
materialized='incremental',
unique_key='order_id',
incremental_strategy='append'
) }}
SELECT
order_id,
customer_id,
order_total,
updated_at
FROM {{ source('raw', 'orders') }}
{% if is_incremental() %}
WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }})
{% endif %} 5. Testlar va maʼlumotlar sifati
dbt deklarativ testlar orqali maʼlumotlar sifatini taʼminlaydi:
- Schema tests: unique, not_null, accepted_values, relationships — oʼrnatilgan tekshiruvlar.
- Custom tests: biznes-mantiq uchun SQL-based assertions.
- dbt-expectations: kengaytirilgan testlar paketi (taqsimotlar, formatlar, anomaliyalar).
- Freshness checks: source-maʼlumotlarning dolzarbligini monitoring.
// SCHEMA TESTS: YAML models:
- name: dim_customers
columns:
- name: customer_id
tests:
- unique
- not_null
- name: email
tests:
- unique dbt test barcha testlarni ishga tushiradi va xatolar haqida xabar beradi. CI/CD bilan integratsiya: har bir PR ga testlar.
6. CI/CD va production workflow
dbt + Doris uchun production best practices:
- Git-based workflow: har bir model — repozitoriydagi SQL fayl. PR orqali review.
- dbt build: modellar + testlarni bogʼliqlik tartibida ishga tushirish (DAG).
- Slim CI: dbt build --select state:modified+ — faqat oʼzgartirilgan modellarni yigʼish.
- Manifest comparison: production-manifest bilan solishtirish, faqat delta build.
- Deployment: dbt Cloud scheduled jobs yoki Airflow + dbt (BashOperator).
- Lineage: dbt docs generate → barcha modellar va bogʼliqliklarning vizual DAG i.
- Documentation: YAML dagi model tavsiflari → hujjatlarning avto-generatsiyasi.
7. Loyiha misoli: buyurtmalar tahlili
Uch qatlamli arxitekturaning toʼliq misoli:
- Source: raw.orders, raw.customers — Flink CDC yoki Stream Load orqali yuklangan.
- Staging: stg_orders, stg_customers — tozalash, tipizatsiya, qayta nomlash.
- Mart: mart_customer_orders — agregatsiya, BI uchun tayyor.
// MART MODEL: BUYURTMALAR TAHLILI
-- models/marts/mart_customer_orders.sql
{{ config(materialized='table') }}
WITH orders AS (
SELECT * FROM {{ ref('stg_orders') }}
),
customers AS (
SELECT * FROM {{ ref('stg_customers') }}
)
SELECT
c.customer_id,
c.customer_name,
c.segment,
COUNT(o.order_id) AS total_orders,
SUM(o.order_total) AS lifetime_value,
MAX(o.order_date) AS last_order_date
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name, c.segment Bu model bogʼliqliklar grafini avtomatik quradi: avval stg-modellar, keyin mart bajariladi. dbt ref() orqali tartibni boshqaradi.