1. Аналитикалық стекте dbt не үшін керек
dbt (data build tool) — modern data stack-тегі трансформациялардың де-факто стандарты. SQL-first тәсілі: аналитиктер SELECT жазады, dbt DDL, тәуелділіктер, тесттер мен құжаттаманы басқарады.
Мәселе: dbt әдетте Snowflake, BigQuery, Redshift-пен байланыстырылады. Apache Doris-пен ресми open-source adapter арқылы толық жұмыс істейтінін аз адам біледі.
dbt-doris — dbt Core 1.7+ үшін adapter, MySQL protocol арқылы қосылу (9030 порт). Бұл не береді:
- SQL-трансформацияларды Git-те нұсқалау.
- Аналитикалық модельдер үшін CI/CD — әрбір PR-ды тестілеу.
- Data lineage: модельдер арасындағы тәуелділіктердің автоматты графы.
- Documentation-as-code: модельдер мен колонкалардың сипаттамалары SQL жанында.
- Әрбір іске қосуда деректер сапасының автоматты тесттері.
2. Архитектура: dbt + Doris
dbt + Apache Doris типтік архитектурасы төрт деңгейден тұрады:
| SQL Compilation | dbt Core / dbt Cloud SQL-модельдерді компиляциялайды: ref() және source() шешеді, target SQL генерациялайды, DAG арқылы тәуелділіктерді басқарады. |
| Transport | MySQL protocol (9030 порт). Стандартты MySQL connector, кез келген клиентпен үйлесімді. Арнайы SDK қажет емес. |
| Materializations | table, view, incremental, ephemeral. Incremental модельдер UPSERT-семантикасы үшін Doris Unique Key кестелерін пайдаланады. |
| Data Serving | Apache Doris SQL орындайды, кестелерді басқарады, сыртқы дереккөздерге қол жеткізу үшін Multi-Catalog қолдайды. |
Негізгі артықшылық: dbt + Doris Spark, Hadoop немесе қосымша есептеу қозғалтқыштарын талап етпейді. Бүкіл pipeline — басынан аяғына дейін SQL.
3. Quick Start: орнату және конфигурация
Adapter-ді pip арқылы орнату:
// DBT-DORIS ОРНАТУ
pip install dbt-doris profiles.yml-дегі қосылу конфигурациясы:
// PROFILES.YML — DORIS-КЕ ҚОСЫЛУ 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 арқылы қосылу (9030 порт). Doris Multi-Catalog арқылы бірнеше база қолдау. Қосылуды тексеру:
// ҚОСЫЛУДЫ ТЕКСЕРУ
dbt debug 4. Materializations және Doris деректер модельдері
dbt materializations Doris объектілеріне қалай маппталады:
| dbt Materialization | Doris Implementation | Қашан қолдану керек |
|---|---|---|
| table | CREATE TABLE AS SELECT | Толық қайта құру, кішкентай кестелер |
| view | CREATE VIEW | Логикалық деңгейлер, материализациясыз |
| incremental | INSERT INTO (Unique Key + UPSERT) | Үлкен кестелер, күнделікті/сағаттық инкременттер |
| ephemeral | CTE (Common Table Expression) | Аралық есептеулер |
Doris Unique Key кестелері үшін 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. Тесттер және деректер сапасы
dbt декларативті тесттер арқылы деректер сапасын қамтамасыз етеді:
- Schema tests: unique, not_null, accepted_values, relationships — кіріктірілген тексерулер.
- Custom tests: бизнес-логика үшін SQL-based assertions.
- dbt-expectations: кеңейтілген тесттер пакеті (таралулар, форматтар, аномалиялар).
- Freshness checks: source-деректердің өзектілігін мониторинг.
// SCHEMA TESTS: YAML models:
- name: dim_customers
columns:
- name: customer_id
tests:
- unique
- not_null
- name: email
tests:
- unique dbt test барлық тесттерді іске қосады және қателер туралы хабарлайды. CI/CD-мен интеграция: әрбір PR-ға тесттер.
6. CI/CD және production workflow
dbt + Doris үшін production best practices:
- Git-based workflow: әрбір модель — репозиторийдегі SQL файл. PR арқылы review.
- dbt build: модельдер + тесттерді тәуелділік ретімен іске қосу (DAG).
- Slim CI: dbt build --select state:modified+ — тек өзгертілген модельдерді жинау.
- Manifest comparison: production-манифестпен салыстыру, тек дельта билд.
- Deployment: dbt Cloud scheduled jobs немесе Airflow + dbt (BashOperator).
- Lineage: dbt docs generate → барлық модельдер мен тәуелділіктердің визуалды DAG-ы.
- Documentation: YAML-дағы модель сипаттамалары → құжаттаманың авто-генерациясы.
7. Жоба мысалы: тапсырыстар аналитикасы
Үш деңгейлі архитектураның толық мысалы:
- Source: raw.orders, raw.customers — Flink CDC немесе Stream Load арқылы жүктелген.
- Staging: stg_orders, stg_customers — тазалау, типизация, атауды өзгерту.
- Mart: mart_customer_orders — агрегация, BI үшін дайын.
// MART MODEL: ТАПСЫРЫСТАР АНАЛИТИКАСЫ
-- 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 Бұл модель тәуелділіктер графын автоматты құрады: алдымен stg-модельдер, содан кейін mart орындалады. dbt ref() арқылы ретті басқарады.