02

Kỹ sư dữ liệu · Bước 2/8 · 9 phút

SQL và mô hình hoá dữ liệu

Viết được loại SQL kỹ sư dữ liệu dùng hằng ngày và phác thảo một star schema đơn giản.

SQL là ngôn ngữ chung

Gần như mọi công cụ dữ liệu đều dùng SQL: cơ sở dữ liệu, kho dữ liệu (data warehouse), lakehouse và nhiều hệ thống streaming. Nếu chỉ học thật kỹ một thứ trong lộ trình này, hãy chọn SQL.

Bắt đầu với SELECT, WHERE, GROUP BY và ORDER BY. Sau đó học JOIN cho thật vững, vì phần lớn lỗi trong công việc dữ liệu đến từ một phép join âm thầm nhân đôi hoặc làm mất dòng. Tiếp theo là window function như ROW_NUMBER và SUM OVER, và CTE (biểu thức bảng chung) với WITH.

Mỗi bảng có một grain

Grain (độ chi tiết) của một bảng là ý nghĩa của một dòng: một đơn hàng, một dòng sản phẩm trong đơn, một khách hàng mỗi ngày. Hãy ghi rõ grain cho mọi bảng bạn xây. Phần lớn số liệu khó hiểu đến từ việc trộn grain, như join dòng sản phẩm với đơn hàng rồi cộng tổng tiền đơn.

Mỗi bảng cũng cần một khoá xác định từng dòng. Hãy kiểm tra: đếm số dòng, rồi đếm số khoá khác nhau. Nếu hai số lệch nhau, bạn đang có dữ liệu trùng.

Bảng fact và bảng dimension

Một cách phổ biến để mô hình hoá dữ liệu cho phân tích là star schema (lược đồ hình sao). Bảng fact chứa các sự kiện bạn đo được, như lượt bán, với các con số như số lượng và giá. Bảng dimension chứa ngữ cảnh: khách hàng, sản phẩm, ngày, cửa hàng.

Bảng fact dài và hẹp. Bảng dimension ngắn hơn và rộng. Chuyên viên phân tích join fact với dimension để cắt lát số liệu. Cách thiết kế này có từ công trình của Ralph Kimball những năm 1990 và vẫn được dùng rộng rãi vì dễ truy vấn.

Chuẩn hoá và phân tích

Cơ sở dữ liệu của chính ứng dụng thường được chuẩn hoá: dữ liệu chia ra nhiều bảng để mỗi thông tin chỉ lưu một lần và cập nhật an toàn. Cách đó đúng cho việc vận hành ứng dụng nhưng bất tiện cho phân tích.

Một phần việc của bạn là chuyển dữ liệu từ dạng thứ nhất sang dạng thứ hai. Hiểu vì sao cả hai đều tồn tại sẽ giúp bạn khỏi tranh cãi với lập trình viên ứng dụng.

Thử ngay

Mô hình hoá một quán nhỏ trong DuckDB

  1. 1.Mở shell.duckdb.org trên trình duyệt. Công cụ miễn phí và chạy ngay trong trang.
  2. 2.Hỏi chatbot bằng câu lệnh bên dưới và dán đoạn SQL nó trả về vào shell.
  3. 3.Chạy một truy vấn join bảng fact với hai bảng dimension và nhóm theo tháng.
  4. 4.Kiểm tra grain: so sánh COUNT(*) với COUNT(DISTINCT khoá của bạn).
Viết SQL cho DuckDB tạo một star schema nhỏ cho quán cà phê: một bảng fact về lượt bán (mỗi dòng là một món đã bán) và các bảng dimension cho sản phẩm, cửa hàng và ngày. Chèn khoảng 30 dòng dữ liệu mẫu thực tế. Ghi grain của từng bảng trong phần chú thích.
Bạn join dòng sản phẩm với đơn hàng rồi cộng tổng tiền đơn. Doanh thu cao bất thường. Nguyên nhân có khả năng nhất là gì?

Tự kiểm tra

Bạn join dòng sản phẩm với đơn hàng rồi cộng tổng tiền đơn. Doanh thu cao bất thường. Nguyên nhân có khả năng nhất là gì?

Đọc thêm