Quay lại blog
snowflake9 phút đọc

Mô hình hóa dữ liệu Snowflake: Star Schema, Clustering và Tối ưu Chi phí

Best practices thiết kế data warehouse Snowflake — star schema, clustering keys, materialized views, warehouse sizing và tối ưu credit.

V
Bởi Ventra Rocket
·Đăng ngày 5 tháng 2, 2026
#Snowflake#Data Warehouse#SQL#Star Schema#Data Modeling

Snowflake tách biệt compute và storage, thay đổi cách suy nghĩ về data modeling so với database truyền thống.

1. Star Schema — Nền tảng

Star schema giảm độ phức tạp join và tối ưu result caching.

CREATE TABLE fact_orders (
  order_id        NUMBER PRIMARY KEY,
  order_date_id   NUMBER REFERENCES dim_date(date_id),
  customer_id     NUMBER REFERENCES dim_customer(customer_id),
  product_id      NUMBER REFERENCES dim_product(product_id),
  quantity        NUMBER,
  total_amount    FLOAT
)
CLUSTER BY (order_date_id);

CREATE TABLE dim_customer (
  customer_id  NUMBER PRIMARY KEY,
  full_name    VARCHAR(200),
  email        VARCHAR(200),
  country      VARCHAR(100),
  segment      VARCHAR(50),
  is_current   BOOLEAN DEFAULT TRUE
);

2. Clustering Keys

-- Time-series: cluster theo ngày
ALTER TABLE fact_orders CLUSTER BY (order_date_id);

-- Multi-dimension: cột filter nhiều nhất đứng đầu
ALTER TABLE fact_events CLUSTER BY (event_date, event_type);

-- Kiểm tra clustering depth (tối ưu: 1-4)
SELECT SYSTEM$CLUSTERING_DEPTH('fact_orders', '(order_date_id)');

3. Materialized Views

CREATE MATERIALIZED VIEW mv_daily_revenue AS
SELECT
  d.year, d.month, c.country,
  COUNT(DISTINCT o.customer_id) AS unique_customers,
  SUM(o.total_amount) AS revenue
FROM fact_orders o
JOIN dim_date d ON o.order_date_id = d.date_id
JOIN dim_customer c ON o.customer_id = c.customer_id
GROUP BY 1, 2, 3;

4. Sizing Virtual Warehouse

| Kích thước | Credits/Giờ | Dùng cho | |-----------|------------|---------| | XS | 1 | Dev, query nhỏ | | S | 2 | Production nhẹ | | M | 4 | Analytics chuẩn | | L | 8 | Join phức tạp | | XL | 16 | ETL, load data |

CREATE WAREHOUSE analytics_wh
  WAREHOUSE_SIZE = MEDIUM
  AUTO_SUSPEND = 300
  AUTO_RESUME = TRUE
  MAX_CLUSTER_COUNT = 3;

5. Tối ưu Chi phí

-- Zero-copy cloning — không tốn storage cho data không đổi
CREATE TABLE orders_test CLONE fact_orders;

-- Time travel để debug
SELECT * FROM fact_orders AT (OFFSET => -7200);  -- 2 giờ trước

-- Kiểm tra cache hit (zero credit)
SELECT query_text FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE partitions_scanned = 0 ORDER BY start_time DESC LIMIT 20;

Kết luận

Sử dụng Snowflake hiệu quả: star schema, clustering keys theo filter columns, materialized views cho aggregation lặp lại. Ventra Rocket thường đạt 60-80% giảm credit sau khi áp dụng các kỹ thuật này.

Bài viết liên quan

Mô hình hóa dữ liệu Snowflake: Star Schema, Clustering và Tối ưu Chi phí | Ventra Rocket