Bỏ qua để đến nội dung

Tài liệu & Lineage trong dbt: sinh tự động từ chính code

Tài liệu dữ liệu thường lỗi thời ngay khi viết xong — vì nó tách rời khỏi code. dbt giải bài toán này theo cách thông minh: tài liệu sinh ra TỪ chính code, nên luôn khớp thực tế. Bạn mô tả một lần trong YAML, dbt dựng cả trang tài liệu lẫn sơ đồ lineage.

Thêm description vào file .yml (cùng nơi khai báo test):

models:
- name: mart_doanh_thu
description: "Doanh thu theo khách hàng, đã loại đơn huỷ. Cập nhật hằng đêm."
columns:
- name: khach_hang_id
description: "Khoá khách hàng, tham chiếu stg_khach_hang."
- name: tong_doanh_thu
description: "Tổng giá trị đơn đã thanh toán (VND)."

Chạy dbt docs generate → dbt tạo một website tài liệu: danh sách model, mô tả, cột, test, và mã SQL của từng model. Cả công ty tra cứu một nơi.

Lineage — sơ đồ “số này từ đâu ra”

Phần tiêu đề “Lineage — sơ đồ “số này từ đâu ra””

Vì mọi phụ thuộc đều khai báo bằng ref()source(), dbt vẽ được đồ thị lineage đầu-cuối — từ bảng nguồn, qua các lớp model, tới tận báo cáo:

flowchart LR
  SRC["source: orders"] --> STG["stg_don_hang"]
  STG --> INT["int_doanh_thu"]
  INT --> MART["mart_doanh_thu"]
  MART --> EXP["📊 exposure:<br/>Dashboard Doanh thu"]

Exposure khai báo các “điểm tiêu thụ” cuối — dashboard, báo cáo, mô hình ML — phụ thuộc model nào. Nhờ đó lineage không dừng ở kho dữ liệu mà kéo dài tới tận sản phẩm người dùng thấy:

exposures:
- name: dashboard_doanh_thu
type: dashboard
url: https://bi.cong-ty.vn/doanh-thu
depends_on:
- ref('mart_doanh_thu')

Khi một model upstream lỗi, bạn biết ngay dashboard nào bị ảnh hưởng.

Lineage của dbt còn đẩy được sang công cụ catalog như OpenMetadata hay Ataccama để có bức tranh quản trị dữ liệu toàn cảnh — gộp lineage của dbt với nguồn, BI và quyền truy cập. dbt lo biến đổi, catalog lo quản trị — bổ trợ nhau.

Chia sẻ: