Đưa Ra Giải Pháp Tối Ưu Hóa Dữ Liệu với dbt
Kính chào quý độc giả! Sau gần 3 năm hành nghề trong lĩnh vực công nghệ thông tin, và đặc biệt là trong lập trình SQL, tôi đã nhận ra rằng mỗi dự án là một cơ hội giúp tôi thấu hiểu rõ hơn những sai sót trong quy trình làm việc của mình. Hôm nay, tôi xin được chia sẻ một công cụ mà nếu biết sớm hơn, công việc của tôi sẽ suôn sẻ hơn rất nhiều: dbt (Data Build Tool).
Một Chút Bối Cảnh Về DbT
Câu chuyện khởi đầu của tôi với dbt không hề đơn giản. Từ một người không mặn mà đến việc sử dụng dbt, tôi đã dần trở thành một tín đồ đam mê với công cụ này. Trong quá trình thực hiện một số dự án outsource tại công ty cũng như các dự án cá nhân tại nhà, tôi đã trải qua nhiều nhiệm vụ giống như một Data Engineer hoặc Data Analyst. Công việc chủ yếu xoay quanh việc tổ chức dữ liệu thành các data warehouse và data mart, cũng như thực hiện các bước biến đổi dữ liệu (transform) như tạo thêm cột, nhóm dữ liệu và thực hiện các phép toán cơ bản.
Khi tìm kiếm các công cụ hỗ trợ, tôi đã từng có suy nghĩ sai lầm rằng dbt chẳng khác gì bash scripting, vì thế tôi quyết định viết SQL tay mà không cần phải thiết lập gì phức tạp. Mặc dù thời gian đầu không gặp nhiều vấn đề, nhưng càng về sau, tôi càng nhận thấy rõ những hạn chế nghiêm trọng của việc viết SQL như vậy.
Những Vấn Đề Khi Viết SQL Thủ Công
- Câu Lệnh Dài Và Trùng Lặp: Tôi thường phải nhét hết logic vào một câu lệnh SQL dài tới gần 700 dòng, với vô số Common Table Expressions (CTEs). Điều này không chỉ khiến việc kiểm tra lỗi trở nên khó khăn mà còn làm tăng nguy cơ sai sót khi thực hiện sửa đổi.
- Lặp Lại CTE: Việc lặp lại CTE trong các câu lệnh SQL mà không được cache kết quả làm tăng thời gian thực thi, từ đó ảnh hưởng xấu đến hiệu suất và chi phí.
- Việc Làm Tài Liệu: Khi số lượng data models tăng lên, công việc làm tài liệu cho từng mô hình trở nên cực kỳ nặng nề, nhất là đối với những người như tôi, chỉ có thể gõ bằng ba ngón tay.
Hình ảnh minh họa mô hình dữ liệu phức tạp mà tôi gặp phải cho thấy rõ ràng sự cần thiết của việc tổ chức và làm tài liệu cho các data models khác nhau.
Giới Thiệu Về dbt
Dbt (Data Build Tool) là một công cụ hỗ trợ transform dữ liệu bằng SQL phổ biến nhất hiện nay. DbT cho phép người dùng thực hiện các phép biến đổi, làm tài liệu, và kiểm tra dữ liệu một cách dễ dàng mà không cần phải setup hệ thống phức tạp.
Điểm Nổi Bật Của dbt
- Tạo DAG Chỉ Với SQL: Dbt cho phép các analyst xây dựng các mẫu dữ liệu phức tạp mà không cần đến sự trợ giúp của Data Engineer.
- Tăng Cường Quá Trình Xây Dựng Data Model: Với dbt, người dùng có thể cấu hình cách các bảng dữ liệu được xây dựng và lưu trữ, tối ưu hóa thời gian và chi phí.
- Kiểm Tra Dữ Liệu: Hỗ trợ định nghĩa các data tests và unit tests dễ dàng thông qua file YAML.
- Định Nghĩa Business Metrics: Tích hợp dễ dàng để định nghĩa các chỉ số kinh doanh thông qua dbt Semantic Layer.
- Dbt Cloud: Cung cấp giải pháp cloud với IDE hiện đại, hỗ trợ version controlling qua Git và CI/CD.
Cấu Trúc Dự Án dbt
Một dự án dbt thường được tổ chức theo cách khoa học nhằm dễ dàng truy cập và bảo trì:
models
├── intermediate
│ └── finance
│ ├── _int_finance__models.yml
│ └── int_payments_pivoted_to_orders.sql
├── marts
│ ├── finance
│ │ ├── _finance__models.yml
│ │ ├── orders.sql
│ │ └── payments.sql
│ └── marketing
│ ├── _marketing__models.yml
│ └── customers.sql
├── staging
│ ├── jaffle_shop
│ │ ├── _jaffle_shop__docs.md
│ │ ├── _jaffle_shop__models.yml
│ │ ├── _jaffle_shop__sources.yml
│ │ ├── base
│ │ │ ├── base_jaffle_shop__customers.sql
│ │ │ └── base_jaffle_shop__deleted_customers.sql
│ │ ├── stg_jaffle_shop__customers.sql
│ │ └── stg_jaffle_shop__orders.sql
│ └── stripe
│ ├── _stripe__models.yml
│ ├── _stripe__sources.yml
│ └── stg_stripe__payments.sql
└── utilities
└── all_dates.sql
Kết Luận
Với khả năng mạnh mẽ và tính năng phong phú, dbt là một công cụ hữu ích cho bất kỳ ai đang làm việc với dữ liệu lớn và phức tạp. Nếu bạn đã từng gặp phải khó khăn trong việc quản lý và biến đổi dữ liệu, tôi khuyến nghị bạn thử ngay dbt. Cảm ơn bạn đã dành thời gian để đọc bài viết này!
source: viblo