DBT (Data Build Tool) là gì

DBT (Data Build Tool) là gì
DBT

Dạo gần đây mình để ý có một khái niệm cứ bị google suggest không đúng khi data engineer, hoặc data analyst search trên google. Khi bạn search DBT sẽ ra kết quả về Dialectical Behavior Therapy. Bạn vào tìm hiểu và chả thấy tool nào cả! Mình quyết định viết bài viết này để giúp đỡ những người đang search về nó mà bị lạc đường trên google

DBT là gì có ăn được không?

DBT là viết tắt cho Data Build Tool ( Không phải là Dialectical Behavior Therapy google suggest ). DBT là công cụ được công ty RJMetrics tại Philadelphia, Mĩ phát triển và open-source vào năm 2016. Mục đích ban đầu chủ yếu là để bổ trợ thêm cho việc transform data nội bộ.

Sau nhiều năm được sử dụng bởi các công ty. DBT hiện nay là công cụ hỗ trợ việc transform data bằng SQL phổ biến nhất hiện nay.

DBT có gì đặc biệt

Điều đặc biệt của DBT chính là việc DBT có thể giúp một analyst bình thường có thể thực hiện được công việc của một data engineer . Thậm chí có thể giúp các analyst này phát triển các model phức tạp và sát với nhu cầu business mà không cần phải sử dụng nguồn lực ( thường là luôn bị quá tải ) của các data engineer.

DBT giúp việc transform, document, test data trở nên dễ dàng hơn và có thể nhân rộng được. Thực hiện các điều trên cũng trở nên đơn giản hơn thông qua việc sử dụng các công cụ của DBT chứ bạn không cần phải set up hệ thống test và viết document tách biệt.

Điểm khác biệt cốt lõi của DBT

Thực ra có nhiều tool khác nhau cũng có thể làm điều tương tự như DBT, vậy điểm khác biệt cốt lõi ở đâu ?

Điểm khác biệt cốt lõi nhất của DBT đó chính là khả năng xóa bớt boilerplate ( tạm dịch là code mang tính hình thức ) khỏi SQL.

Xóa boilerplate là như thế nào

Như bạn đã biết SQL là ngôn ngữ của database nên đôi lúc sẽ có rất nhiều tính năng “không chuẩn” so với Standard SQL. Để hiểu rõ thêm điều này hãy đọc bài viết tạo sao có lắm SQL của mình.

Câu lệnh được sử dụng nhiều nhất trong SQL chính là SELECT thần thánh. Đối với một data analyst mọi chuyện sẽ bắt đầu sau chữ SELECT (vì mục đích là query dữ liệu ra mà ). Tuy nhiên ngoài select ra thì ở các loại SQL khác nhau lại có các loại code khác nhau để define table, có datatype khác nhau, có SQL thì gọi là string có bên thì gọi là varchar, các db có gốc java thì hỗ trợ double các db khác thì không v.v…..

Do đó, không mấy ai thích việc phải viết và define từng table, hay insert data vào database bằng SQL ( Thậm chí developer còn tránh làm điều này mà dùng ORM để thay thế ).

Giả sử bạn phải tạo một table Persons và load data từ một bảng Customers chẳng hạn. Chúng ta hãy so sách 2 cách làm của DBT và thủ công.

Thủ công

Đầu tiên chúng ta tạo table Persons để chứa dữ liệu

CREATE TABLE Persons (
    PersonID int,
    LastName varchar,
    FirstName varchar,
    Address varchar,
    City varchar
);

Sau khi đã có table chúng ta sẽ từ từ insert data vào bằng insert

INSERT INTO Persons ( columns,..... ) VALUES ( values,.... )

Hoặc nếu DB có hỗ trợ CTA function chúng ta có thể viết

CREATE TABLE Persons
  AS (SELECT *
      FROM COMAPNY.CUSTOMERS);

DBT

Các bạn chỉ cần viết

SELECT * FROM COMPANY.CUSTOMERS

Thế là … xong, bạn đã load dữ liệu của customers vào persons, đủ cột đủ dòng đủ datatype, không tin bạn hoàn toàn có thể vào database kiểu tra sau khi chạy DBT ( Nhớ đặt tên file là Persons.sql ).

Ở một ví dụ nhỏ như thế này chúng ta có thể thấy sự khác biệt không nhiều, nhưng trên thực tế rất có ích với quy mô hàng trăm tables cùng 1 lúc và phụ thuộc vào nhau.

Một số tính năng của DBT

Ngoài vì dụ trên mình xin liệt kê một số tính năng của DBT để các bạn có thể nắm sơ lược.

1. Transform data without boilerplate

Như đã ví dụ phía trên.

2. Models ( hoặc tạm hiểu là table cũng được ) abstraction and dependency.

Models dependency

Các table có một abstract dependency ( Tạm gọi là sự lệ thuộc ảo ) với nhau. Khi chạy SQL thông qua dbt, thì các câu SQL sẽ được chạy theo tuần tự như dependency đã được khởi tạo trong dbt-models.

Example:

Khi chạy project dbt phía trên hình chúng ta có thể thấy được model_monitor có nguồn dữ liệu phục thuộc vào model_monitor_staging và tiếp tục phụ thuộc vào actual và bqjhu.actual.

Như vậy tuần tự chạy của các query sẽ là bqjhu.actual >> acutal >> model_monitor_staging >> model_monitor.

3. Data Lineage

Như hình phía trên, dbt còn cung cấp công cụ document, khi bạn tạo ra dependency, dbt sẽ tự động tạo ra các tài liệu để biểu thị sự phụ thuộc giữa các model. Bạn sẽ không cần phải tự ghi tài liệu mà vẫn có tài liệu để nắm rõ nguồn gốc và mối liên hệ của data.

4. Jinja Support

Jinja là một templating engine rất nổi tiếng với các bạn code frontend. Nói khái quát jinja là các để bạn có thể viết một câu SQL cực kì dài nhưng lại “cực kì ngắn” trong model của dbt.

Để giữ độ dài của bài viết hợp lí mình xin mời các bạn đọc về điều này ở link sau

https://docs.getdbt.com/guides/getting-started/learning-more/using-jinja

5. Data Documentation support

Ngoài việc có đồ thị cho data lineage, dbt còn hỗ trợ tự động tạo tài liệu cho data. Bạn có thể ghi lại ý nghĩa của từng column, table do bạn tạo ra, tránh trường hợp sau này quên mất chúng là gì.

6. Automated Testing

DBT có rất nhiều loại test tự động khác nhau được soạn sẵn, hoặc bạn có thể tự viết bằng dbt macros. Như vậy bạn có thể chuẩn hóa quy trình bằng cách yêu cầu tất cả models pass các test được đề ra mà không cần phải check thủ công từng table.

tests từng column

Tải DBT ở đâu

Hiện tại DBT được maintain chính bởi dbt labs và có 2 phiên bản là dbt cloud và dbt cli

Để tìm hiểu về dbt các bạn có thể truy cập vào đây cho dbt cloud.

https://www.getdbt.com/

Khi các bạn dùng dbt cloud sẽ có giao diện rất đẹp và có nhiều tính năng riêng dành cho dbt cloud, tuy nhiên nền tảng này tính phí.

Các bạn có thể sử dụng dbt cli, là phần mềm hoàn toàn miễn phí và open source. Để tìm hiểu thêm về dbt cli các bạn có thể truy cập vào các đường link sau.

https://github.com/dbt-labs/dbt-core

https://docs.getdbt.com/dbt-cli/install/overview

Kết

Không có một công cụ nào là hoàn hảo. Chúng ta phải kết hợp nhiều công cụ cần thiết các nhau để đạt được hiệu quả công việc tối ưu. Mong rằng bài viết của mình đã có thể giúp bạn hình dung sơ bộ được dbt là gì.

Support Tuan | Analytic

Trả lời