Cấu trúc dữ liệu (ClickHouse · lớp marts)
Sau khi Airbyte/dlt đưa dữ liệu thô từ Odoo vào ClickHouse và dbt làm sạch + mô hình hoá, ta có một kho phân tích gồm các bảng fact và dimension trong database marts. Trang này mô tả kiến trúc tổng thể; mỗi bảng có một trang chi tiết riêng.
Ba lớp dữ liệu
Phần tiêu đề “Ba lớp dữ liệu”Dữ liệu chảy một chiều qua ba lớp (mô hình medallion):
raw— ảnh chụp y hệt Odoo (bảngraw___*), do Airbyte/dlt nạp.- staging (
stg_*) — làm sạch 1-1 với nguồn: ép kiểu, tách JSON, đổi tên. Materialize = view. - marts (
fct_*/dim_*) — mô hình sao sẵn cho BI/AI. Materialize = table (MergeTree).
Sơ đồ sao
Phần tiêu đề “Sơ đồ sao”graph LR
subgraph Dimensions
P[dim_product<br/>Ngành → Nhóm → SP]
G[dim_vn_geo<br/>Tỉnh → Miền]
S[dim_salesman<br/>NV bán]
C[dim_customer<br/>Nhóm KH]
end
F[(fct_sales<br/><b>FACT bán hàng</b>)]
P --> F
G --> F
S --> F
C --> F
F --> CUBE{{Cube · sales}}
fct_sales là fact trung tâm; các fact khác (mua/tồn/nợ/kế hoạch) đứng song song trên cùng bộ chiều.
Danh sách bảng
Phần tiêu đề “Danh sách bảng”Bảng Fact
Phần tiêu đề “Bảng Fact”| Bảng | Grain (một dòng =) | Số dòng | Cube |
|---|---|---|---|
fct_sales | một dòng đơn bán | ~12.600 | sales |
fct_purchase | một dòng đơn mua (PO) | ~1.400 | purchases |
fct_inventory | tồn của một sản phẩm | ~70 | inventory |
fct_receivable | một hoá đơn khách | ~920 | receivables |
fct_plan | kế hoạch một tổ hợp × tháng | ~12.000 | (qua fct_plan_actual) |
fct_plan_actual | kế hoạch và thực tế một tổ hợp × tháng | ~12.000 | planning |
Bảng Dimension
Phần tiêu đề “Bảng Dimension”| Bảng | Grain | Số dòng | Vai trò |
|---|---|---|---|
dim_product | một sản phẩm | 37 | Ngành → Nhóm → SP |
dim_vn_geo | một tỉnh | 36 | Tỉnh → Miền |
dim_salesman | một nhân viên bán | 10 | NV bán → Team |
dim_customer | một khách hàng | ~1.790 | Khách → Nhóm KH |
Quy ước
Phần tiêu đề “Quy ước”- Tiền tệ: kiểu
Float64(VND). Số lượng:Decimal(38,9)hoặcFloat64. - Khoá sắp xếp (
ORDER BYcủa MergeTree) không được chứa cộtNullable→ các cột khoá đều ép non-null ở staging (coalesce,assumeNotNull). - Đặt tên:
fct_= bảng sự kiện (fact),dim_= bảng chiều,stg_= staging. - Doanh thu mặc định là thuần (chưa thuế,
price_subtotal); có cột riêng cho gồm thuế và thuế.