+5

DBT là gì vậy nhỉ? Có gì khác biệt không?

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())

image.png

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è

image.png

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

Kết Luận

Reference

https://docs.getdbt.com/docs/introduction

https://github.com/dbt-labs/jaffle-shop-classic


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí