Chào mọi người, hôm nay chúng ta sẽ khám phá dbt (data build tool), một công cụ đặc biệt hữu ích cho những ai đang làm việc trong lĩnh vực dữ liệu. dbt là một quy trình biến đổi dữ liệu giúp tăng hiệu quả công việc và chất lượng kết quả thông qua việc sử dụng các phương pháp tốt nhất của kỹ thuật phần mềm, như kiểm soát phiên bản, modular hóa và CI/CD. Tuy nhiên hôm nay mình sẽ tập trung về dbt Core thui nha. Với dbt Core, bạn có thể tận dụng sức mạnh của SQL để xây dựng, kiểm tra, và tài liệu hóa các mô hình dữ liệu ngay trong kho dữ liệu của mình.
dbt Core và dbt Cloud
dbt cung cấp hai sản phẩm chính: dbt Core và dbt Cloud. dbt Core là phiên bản mã nguồn mở, cho phép người dùng cài đặt và quản lý trực tiếp trên máy cá nhân hoặc máy chủ. Nó phù hợp với những người dùng thích thiết lập và điều chỉnh mọi thứ theo ý muốn. Ngược lại, dbt Cloud cung cấp một dịch vụ được quản lý hoàn toàn, với giao diện người dùng trực tuyến để phát triển, kiểm thử, lập lịch và kiểm tra các mô hình dữ liệu.
Tính Năng Của dbt
dbt hỗ trợ biên dịch và chạy mã phân tích của bạn trên nền tảng dữ liệu, cho phép cộng tác trên một nguồn đơn lẻ cho các số liệu và thông tin doanh nghiệp. Từ việc định nghĩa các bài kiểm tra cho dữ liệu, dbt giúp giảm thiểu lỗi khi logic thay đổi và cảnh báo khi có vấn đề phát sinh. Công cụ này tương thích và làm việc cùng với các công cụ nhập dữ liệu, trực quan hóa và các công cụ dữ liệu khác, giúp bạn biến đổi dữ liệu trực tiếp trong nền tảng đám mây của mình.
dbt không chỉ giúp các nhà phân tích làm việc hiệu quả hơn mà còn thúc đẩy phong cách làm việc chuyên nghiệp hơn như các kỹ sư phần mềm, từ đó nâng cao chất lượng và sự tin cậy của dữ liệu phân tích. Hãy tham gia cộng đồng dbt để học hỏi và chia sẻ kinh nghiệm với các chuyên gia dữ liệu khác trên toàn thế giới!
Giới thiệu về dbt Core
Dbt Core là phiên bản mã nguồn mở của dbt, cho phép các đội ngũ sử dụng SQL để thực hiện các biến đổi dữ liệu một cách hiệu quả. Nó hỗ trợ tự động hóa và lập lịch các quy trình biến đổi, từ đó giúp các nhà phát triển dễ dàng quản lý và điều phối công việc.
Tích hợp GitHub và quản lý phiên bản Một trong những đặc điểm nổi bật của dbt Core là khả năng tích hợp với GitHub, điều này giúp quản lý phiên bản dễ dàng hơn và tăng cường khả năng hợp tác giữa các thành viên trong đội. Quản lý phiên bản thông qua GitHub không chỉ giúp theo dõi các thay đổi mà còn đảm bảo tính nhất quán của dữ liệu.
Jinja và phát triển macro
Dbt Core sử dụng Jinja, một ngôn ngữ tạo mẫu, để tạo ra mã SQL động. Việc này cho phép tái sử dụng mã và tối ưu hóa các truy vấn SQL. Các macro trong dbt giúp đơn giản hóa các nhiệm vụ lập trình phức tạp, từ đó giảm thiểu lỗi và nâng cao hiệu quả.
Biến đổi dữ liệu mô-đun
Dbt Core khuyến khích sự phát triển của các mô hình dữ liệu độc lập, giúp quá trình kiểm tra và tái sử dụng dễ dàng hơn. Mỗi mô hình có thể được phát triển, kiểm tra và triển khai một cách độc lập, giúp tăng tốc độ phát triển và giảm rủi ro trong các thay đổi lớn.
Trực quan hóa và hiểu biết dòng chảy dữ liệu
Một trong những tính năng nổi bật của dbt Core là khả năng tạo ra cái nhìn rõ ràng về dòng chảy dữ liệu, cho phép người dùng dễ dàng truy vấn nguồn gốc và phụ thuộc của dữ liệu. Điều này là rất quan trọng để hiểu rõ cách thức dữ liệu được biến đổi và chuẩn bị cho các báo cáo cuối cùng.
Kết luận, dbt Core là một công cụ không thể thiếu trong bộ công cụ của bất kỳ nhà phân tích hoặc nhà phát triển dữ liệu nào. Nó không chỉ giúp cải thiện hiệu suất làm việc mà còn đảm bảo dữ liệu được xử lý một cách minh bạch và hiệu quả.
Cài đặt và Sử dụng dbt Core
Fake Data
Đầu tiên mình sẽ tự code 1 file dữ liệu nha
import pandas as pd
import numpy as np
from datetime import datetime, timedelta # Set seed for reproducibility
np.random.seed(0) # Generate dates
start_date = datetime(2021, 1, 1)
end_date = datetime(2021, 12, 31)
date_range = pd.date_range(start_date, end_date, freq='D') # Generate random data
data = { 'sale_id': range(1, len(date_range) + 1), 'sales_channel': np.random.choice(['Online', 'Retail', 'Wholesale'], size=len(date_range)), 'revenue': np.random.uniform(100, 500, size=len(date_range)).round(2), 'sale_date': date_range
} # Create DataFrame
sales_data = pd.DataFrame(data) # Save to CSV
sales_data.to_csv('sales_data.csv', index=False) print("Sample data generated:")
print(sales_data.head())
Data kiểu này nè
Để cho bạn thấy rõ hơn cách dbt Core hoạt động, mình sẽ giới thiệu một ví dụ cụ thể về cách xây dựng một project dbt từ đầu. Giả sử bạn muốn phân tích doanh thu theo các kênh bán hàng khác nhau. Đầu tiên, bạn cần cài đặt dbt Core trên máy tính của bạn và tạo một project mới:
Install
Cài đặt dbt
pip install dbt-core
pip install --upgrade dbt-bigquery
Init model
Sau khi cài đặt, khởi tạo project dbt mới:
dbt init my_sales_project
sau khi chạy xong lệnh init thì cấu trúc file kiểu này nè
Tạo thêm 1 file profiles.yml nữa nha, ở đây mình test vs Bigquery nên là mình có thêm type bigquery nha mn
my_sales_project: target: dev outputs: dev: type: bigquery method: service-account project: [tên-dự-án-GCP-của-bạn] dataset: [tên-dataset-trong-BigQuery] threads: 1 keyfile: [đường-dẫn-tới-file-key-json] timeout_seconds: 300
Tạo mô hình dữ liệu
Trong thư mục models, bạn tạo một file SQL mới, ví dụ sales_analysis.sql, và viết mã SQL để biến đổi dữ liệu:
# models/sales_analysis.sql SELECT sales_channel, COUNT(*) as total_sales, SUM(revenue) as total_revenue, AVG(revenue) as average_revenue
FROM {{ ref('sales_data') }}
GROUP BY sales_channel
Đoạn code trên sẽ tạo ra một mô hình phân tích doanh số từ bảng sales_data, tính tổng số giao dịch, tổng doanh thu, và doanh thu trung bình theo từng kênh bán hàng.
Chạy dbt để tạo mô hình:
Sau khi tạo xong mô hình, bạn có thể chạy dbt để xây dựng mô hình trong cơ sở dữ liệu của bạn:
dbt run
Kiểm tra dữ liệu:
Để đảm bảo chất lượng dữ liệu, bạn có thể tạo các kiểm tra (test) trong dbt:
# models/schema.yml version: 2
models: - name: sales_analysis description: "Phân tích doanh thu theo kênh bán hàng" columns: - name: sales_channel description: "Kênh bán hàng" tests: - unique - not_null - name: total_revenue description: "Tổng doanh thu" tests: - not_null
Sinh tài liệu và kiểm tra:
Sau khi thiết lập các kiểm tra, bạn có thể sinh tài liệu và chạy các kiểm tra để đảm bảo dữ liệu phù hợp:
dbt test
dbt docs generate