Lời mở đầu
Trong những năm gần đây, dbt trở nên khá phổ biến trong domain data engineering. Trong quá trình làm việc mình cũng có chút kiến thức và trải nghiệm với dbt, nên sẽ viết 1 series về dbt cơ bản, hi vọng có thể giúp được những ai đang có nhu cầu tìm hiểu thêm về công nghệ này.
dbt là gì? Tại sao lại cần dbt?
Trước khi đi vào khái niệm, hãy cùng đưa ra context trước:
Ở 1 số nơi, data engineer (DE) sẽ dựng platform, kiêm cả ETL, kiêm luôn cả data quality check, ... nhiều không tả nổi. Vào 1 ngày trời không đẹp lắm, bạn đang bận vãi nhái để fix 1 major bug cho cụm Kafka thân yêu. Trong lúc bận, data analyst (DA) và dev vẫn cứ liên tục "Bạn ơi kéo hộ mình bảng X", "Bạn ơi sao dữ liệu bảng Y lệch thế", "Business logic cho bảng Z sai rồi bạn ơi", ... Vừa bận vừa bực vì bị giục, điều bạn nên làm là
- 👊 mấy đứa giục 1 phát cho bõ tức ❌️
- tìm cách để mấy con vợ tự đi mà làm, đỡ phải giục ✅️
Tuy nhiên thì để DA/dev code Pyspark có vẻ không giòn lắm, nguyên nhân có thể là vì không quen code, hoặc chưa code python bao giờ (hoặc lười học cái mới). → Đưa về SQL, vì SQL là ai cũng làm được
Từ đấy, dbt ra đời. dbt được phát triển tại RJMetrics vào năm 2016 để cho đội DA có thể tự thực hiện transform data mà không phụ thuộc quá vào DE -> giải quyết vấn đề tắc nghẽn workflow, đỡ phải đợi nhau.
Dựa trên dbt document, dbt được định nghĩa như sau:
dbt is a transformation workflow that helps you get more work done while producing higher quality results
Tuy nhiên, cho dễ hiểu, thì dbt là tool dạng CLI, giúp user transform data sử dụng SQL. dbt chỉ là tool hỗ trợ, không phải query engine như Spark, Trino, ... cũng không phải database.
Tổng quan dbt
dbt đưa data transformation về các model, được lưu dưới dạng các file SQL. Thêm nữa, dbt còn tích hợp Jinja template (jinja là gì thì phiền ae google nhé 😉) cho các model, giúp user code các câu SQL linh hoạt hơn.
dbt sẽ được kết nối với query engine, mỗi model sẽ định nghĩa data transformation bằng SELECT ... . dbt sẽ compile model để lấy ra SQL tương ứng, sau đó execute đoạn SQL đó để ra được output, lưu ở trong data warehouse. Điều này nghĩa là dbt không có liên quan gì tới data của bạn cả, nó chỉ là tool hỗ trợ, query vẫn được execute sử dụng query engine/data warehouse được kết nối (trino, postgres, bigquery, ...)
Ngoài ra, dbt hỗ trợ nhiều config khác nhau trong model để hỗ trợ cho nhiều nhu cầu sử dụng khác nhau, và một số feature khác mình tạm thời chưa đề cập tại bài viết này. Các model cũng là code, thế nên sử dụng Git cho version control cho dbt cũng hoàn toàn ổn. Kết hợp dbt với Airflow để schedule data transformation job thuận tiện hơn, và ngon nhất là cho DA/dev làm, mình đỡ phải làm 🤤
Kết luận
dbt là một công nghệ phổ biến, và khá đáng thử nếu như bạn/team bạn đang gặp vấn đề như trên. dbt sẽ giúp phân chia công việc cho DA/dev, giảm workload cho đội DE. Tuy nhiên, dbt cũng chỉ là một tool, không nên lạm dụng/ép buộc trong trường hợp không thực sự cần thiết. Hãy dùng vì nó thực sự cần chứ không phải vì thấy nó hay.
Trong các bài viết tiếp theo, mình sẽ viết về setup dbt cơ bản với Postgresql, data quality testing với dbt, và một số feature khác nữa. Cảm ơn mọi người đã đọc 😁