dbt (data build tool) là một công cụ mạnh mẽ được các nhà phân tích và kỹ sư dữ liệu sử dụng để biến đổi, kiểm thử và ghi tài liệu dữ liệu trong bộ công cụ dữ liệu hiện đại.
Bên cạnh khả năng mô hình hóa nổi tiếng, một tính năng quan trọng khác là dbt snapshot, cho phép bạn ghi nhận các chiều thay đổi chậm (SCD) trong kho dữ liệu.
Hướng dẫn này sẽ giải thích chi tiết về dbt snapshots, các trường hợp sử dụng và cách triển khai. Tôi sẽ:
Một dbt snapshot là cơ chế theo dõi thay đổi của các bản ghi theo thời gian, đặc biệt với các bảng mà mặc định không lưu lịch sử thay đổi. Snapshots chủ yếu được dùng để triển khai Slowly Changing Dimensions (SCD) Loại 2. Chúng lưu các phiên bản của hàng khi các cột được theo dõi thay đổi.
Trường hợp sử dụng gồm:
Theo dõi thay đổi hồ sơ khách hàng theo thời gian.
Giám sát thay đổi trạng thái trong dữ liệu vận hành.
Ghi nhận sự phát triển của thuộc tính chiều để báo cáo lịch sử chính xác.
Vì sao dùng dbt Snapshots? Lợi ích và Trường hợp sử dụng
dbt snapshots hữu ích vì chúng hoạt động như một bản ghi các thay đổi dữ liệu theo thời gian, cho phép phân tích lịch sử và báo cáo tuân thủ.
Lợi ích
Dưới đây là một số lợi ích khi dùng Snapshots:
Phân tích xu hướng: Hiểu hành vi, thuộc tính hoặc trạng thái của khách hàng thay đổi như thế nào.
Kiểm toán & tuân thủ: Chứng minh trạng thái dữ liệu lịch sử cho kiểm toán viên hoặc cơ quan quản lý.
Gỡ lỗi pipeline dữ liệu: Xác định thời điểm một bản ghi thay đổi bất ngờ để truy vết sự cố.
Trường hợp sử dụng phổ biến
Snapshots hữu ích trong một số tình huống đặc thù như:
Theo dõi nâng hạng thành viên trong các chương trình khách hàng thân thiết.
Ghi lịch sử giá cho sản phẩm bán lẻ.
Ghi nhận thay đổi phòng ban của nhân viên trong hệ thống HR.
Nền tảng kiến trúc
Snapshots tích hợp mượt mà trong hệ sinh thái của dbt, tận dụng cấu hình và quản lý chạy để xây dựng bảng lịch sử hiệu quả.
Hãy xem các loại mô hình được dùng cho dữ liệu làm ví dụ.
Có hai loại mô hình dùng cho dữ liệu:
Mô hình tiêu chuẩn: Biến đổi dữ liệu để tạo các bảng trạng thái hiện tại.
Mô hình snapshot: Tạo bảng phiên bản để theo dõi thay đổi lịch sử.
Hai mô hình này khác nhau ở mục đích, phương thức lưu trữ và ứng dụng.
Tóm tắt khác biệt của chúng:
Tính năng
Mô hình tiêu chuẩn
Snapshots
Mục đích
Biến đổi trạng thái hiện tại
Theo dõi lịch sử
Lưu trữ
Bảng hoặc view với dữ liệu hiện tại
Bảng lịch sử chỉ thêm (append-only)
Phù hợp nhất cho
Mô hình fact/chiều
Chiều thay đổi chậm
dbt Snapshots hoạt động như thế nào
Snapshots thường tuân theo một quy trình có cấu trúc để đảm bảo mọi thay đổi được ghi nhận một cách hệ thống, gồm các bước sau:
Cấu hình: Xác định chiến lược snapshot, khóa duy nhất và các cột phát hiện thay đổi.
Thực thi: Chạy dbt snapshot để so sánh dữ liệu hiện tại với snapshot đã có.
Lưu trữ: dbt chèn bản ghi mới cho các thay đổi được phát hiện, cập nhật dấu thời gian hiệu lực.
Vậy dbt theo dõi thay đổi như thế nào?
Mọi thay đổi đều được ghi trong bảng Snapshot đầu ra.
Nếu phát hiện thay đổi, dbt cập nhật trường dbt_valid_to của phiên bản trước bằng thời gian hiện tại và chèn một hàng mới với trường dbt_valid_from là thời gian hiện tại.
Chiến lược Snapshot trong dbt
Snapshots dùng hai chiến lược chính để phát hiện thay đổi.
1. Chiến lược theo dấu thời gian (Timestamp)
Định nghĩa: Dùng một trường dấu thời gian để phát hiện thay đổi.
Khi nào dùng: Bảng nguồn có cột updated_at tin cậy.
2. Chiến lược kiểm tra (Check)
Định nghĩa: So sánh trực tiếp các cột chỉ định.
Khi nào dùng: Bảng nguồn không có dấu thời gian tin cậy nhưng cần theo dõi thay đổi thuộc tính.
Chiến lược
Phương pháp phát hiện
Phù hợp nhất cho
Timestamp
Cột dấu thời gian cập nhật
Bảng có dấu thời gian sửa đổi cuối cùng đáng tin cậy
Check
So sánh trực tiếp các cột
Bảng không có cột dấu thời gian
Xóa cứng (Hard Deletes)
Các thay đổi dữ liệu như xóa cũng có thể được theo dõi, nhưng không phải mặc định. Tuy nhiên, có cách để thay đổi điều đó nhằm giám sát các lần xóa cứng.
Vấn đề: Mặc định, snapshots không theo dõi các hàng bị xóa.
Giải pháp: Đặt invalidate_hard_deletes=True để đánh dấu các hàng bị xóa bằng giá trị dbt_valid_to, lưu lại trạng thái cuối cùng của chúng.
Ví dụ về triển khai chiến lược check, đồng thời tính đến xóa cứng:
Giờ chúng ta đã hiểu cách dbt Snapshots hoạt động, hãy xem cách triển khai chúng
1. Bộ dữ liệu mẫu cho hướng dẫn Snapshot
Để thực hành snapshots, chúng ta sẽ tạo một bảng khách hàng mẫu mô phỏng hệ thống thành viên thực tế. Điều này cung cấp dữ liệu cụ thể để thử các chiến lược snapshot phổ biến.
import csv
from datetime import datetime
# Define the data
customers_data =[["customer_id","name","tier","updated_at"],# header row[1,"Alice Tan","Silver","2025-07-01 10:00:00"],[2,"Bob Lee","Gold","2025-07-01 10:00:00"],[3,"Cheryl Lim","Silver","2025-07-01 10:00:00"]]# Write data to customers.csvwithopen("customers.csv", mode="w", newline="", encoding="utf-8")asfile:
writer = csv.writer(file)
writer.writerows(customers_data)Được hỗ trợ bởi
2. Thiết lập dự án dbt của bạn
Trước khi triển khai snapshots, điều quan trọng là thiết lập đúng dự án dbt của bạn. Điều này đảm bảo môi trường được cấu hình để quản lý mô hình, snapshot, kiểm thử và tài liệu theo cách có cấu trúc, có khả năng mở rộng.
Ví dụ: Theo dõi thay đổi dữ liệu với dbt Snapshots
Snapshots cho phép các nhóm ghi nhận đầy đủ dấu vết kiểm toán về thay đổi của bất kỳ thuộc tính nào trong một bảng theo thời gian, rất hữu ích cho tuân thủ, gỡ lỗi và phân tích.
Tạo bảng mẫu customers với các trường liên quan. Bao gồm ID khách hàng, tên, email và dấu thời gian updated_at để theo dõi thời điểm xảy ra thay đổi.
CREATETABLE customers (
customer_id INTEGERPRIMARYKEY,
name VARCHAR(100),
email VARCHAR(100),
updated_at TIMESTAMP);Được hỗ trợ bởi
Chèn dữ liệu ban đầu để mô phỏng trạng thái cơ sở.
Dùng đoạn mã sau để chèn dữ liệu vào bảng. Dữ liệu này dùng làm dữ liệu gốc trước khi thay đổi.
Để xem sự khác biệt và các thay đổi đã thực hiện, bạn cần truy vấn bảng snapshot. Bảng sẽ hiển thị cả hai phiên bản địa chỉ email với khoảng thời gian hiệu lực tương ứng:
SELECT customer_id, email, dbt_valid_from, dbt_valid_to
FROM snapshots.customers_email_snapshot
ORDERBY customer_id, dbt_valid_from;Được hỗ trợ bởi
Quy trình này đảm bảo bạn giữ lại toàn bộ lịch sử thay đổi cho cập nhật email, rất quan trọng cho kiểm toán GDPR, theo dõi lịch sử liên hệ hoặc phân tích hỗ trợ khách hàng.
Cấu hình và quản lý nâng cao
Quản lý cấu hình hiệu quả cho phép các nhóm mở rộng triển khai snapshot trên nhiều dự án và môi trường một cách liền mạch.
1. Cấu hình cấp dự án và cấp tài nguyên
Cấu hình cấp dự án: Dùng dbt_project.yml để đặt cấu hình snapshot mặc định, như schema đích hoặc materialization, áp dụng cho tất cả snapshots.
Cấu hình cấp tài nguyên: Ghi đè thiết lập trong từng tệp SQL snapshot cho các yêu cầu cụ thể, đảm bảo sự linh hoạt.
2. Tùy chỉnh các trường siêu dữ liệu
Theo mặc định, dbt tạo các trường dbt_valid_from và dbt_valid_to. Bạn có thể đổi tên chúng bằng tùy chọn cấu hình valid_from và valid_to nếu tiêu chuẩn nhóm yêu cầu quy ước đặt tên khác để rõ ràng trong công cụ BI hoặc quản trị dữ liệu.
3. Di chuyển cấu hình Snapshot cũ
Việc di chuyển có thể gây sai lệch nếu không xử lý đúng. Dưới đây là một số điểm cần lưu ý khi bạn di chuyển cấu hình snapshot:
Xác định các định nghĩa snapshot cũ sử dụng kiểu khối cấu hình đã ngừng hỗ trợ.
Tái cấu trúc sang cấu hình dựa trên YAML nếu dùng phiên bản dbt hiện đại để thống nhất.
Xác thực tính đúng đắn:
Chạy snapshots trên môi trường thử nghiệm.
So sánh đầu ra trước khi ngừng sử dụng snapshots cũ.
Ngừng sử dụng: Xóa các tệp snapshot cũ và điều chỉnh tài liệu tương ứng.
4. Tích hợp với các công cụ khác
Các thay đổi dữ liệu có thể được theo dõi đồng bộ với dbt snapshots.
Ví dụ:
Công cụ BI (ví dụ, Power BI, Tableau): Xây dựng hình ảnh hóa theo thời gian thể hiện thay đổi thuộc tính theo thời gian.
Nền tảng quan sát (ví dụ, Monte Carlo, Datafold): Giám sát độ mới và tính toàn vẹn lịch sử của dữ liệu.
Danh mục dữ liệu (ví dụ, Alation, Collibra): Bao gồm các bảng lịch sử snapshot như các hiện vật phả hệ được ghi tài liệu để phục vụ tuân thủ.
Thực tiễn tốt nhất khi triển khai sản xuất
Triển khai dbt snapshots trong môi trường sản xuất cần thiết kế cẩn thận để đảm bảo hiệu năng, khả năng bảo trì và giá trị kinh doanh.
Nên tuân theo những điều sau:
1. Trường hợp sử dụng tối ưu và chọn bảng
Ưu tiên các bảng chiều có thuộc tính thay đổi chậm như hồ sơ khách hàng, dữ liệu sản phẩm gốc và hợp đồng nhà cung cấp.
Tránh các bảng giao dịch (ví dụ, dòng đơn hàng) có tần suất chèn và cập nhật cao trừ khi cần thiết do lo ngại tăng trưởng lưu trữ nhanh.
2. Kỹ thuật tối ưu hiệu năng
Trong sản xuất, bạn sẽ muốn tối ưu để theo dõi thay đổi dữ liệu hiệu quả mà không ảnh hưởng đến sản phẩm.
Một số mẹo:
Đánh chỉ mục: Thêm index trên unique_key và các cột hiệu lực để truy vấn nhanh hơn.
Phân vùng: Phân vùng bảng snapshot theo ngày để tối ưu hiệu năng quét.
Clustering (phụ thuộc kho dữ liệu): Dùng khóa clustering (ví dụ trong BigQuery) trên các trường có độ phân biệt cao để cải thiện tốc độ lọc.
3. Thực hành bảo trì và giám sát
Lên lịch: Chạy snapshots vào giờ thấp điểm để giảm chi phí tính toán.
Giám sát: Thiết lập cảnh báo lỗi snapshot trong dbt Cloud hoặc công cụ điều phối của bạn.
Kiểm tra độ mới dữ liệu: Dùng kiểm thử dbt hoặc công cụ quan sát để xác thực độ mới của dữ liệu snapshot.
Phân tích lưu trữ: Định kỳ xem xét kích thước bảng snapshot và cắt tỉa dữ liệu lịch sử nếu phù hợp với yêu cầu kinh doanh.
4. Cạm bẫy thường gặp
Dùng unique_key không duy nhất dẫn đến phiên bản hóa hàng không chính xác. Luôn kiểm thử tính duy nhất trước khi triển khai.
Hiện tượng phình to snapshot cũng có thể xảy ra khilưu trữ những thay đổi lịch sử không cần thiết (ví dụ, các cột cập nhật dấu thời gian thường xuyên) có thể làm chi phí lưu trữ tăng nhanh.
Thách thức phổ biến và giải pháp
Việc dùng Snapshots trong dbt có thể đi kèm một số thách thức kỹ thuật cụ thể:
1. Va chạm khóa duy nhất
Vấn đề: Hàng trùng lặp trong snapshot do khóa duy nhất được định nghĩa kém.
Giải pháp:
Xác thực tính duy nhất bằng kiểm thử dbt trước khi triển khai snapshot.
Nối nhiều trường để đảm bảo tính duy nhất tổng hợp khi cần.
2. Hiệu năng truy vấn theo thời gian
Vấn đề: Truy vấn chậm khi phân tích dữ liệu lịch sử.
Giải pháp:
Sử dụng hiệu quả phân vùng và clustering của kho dữ liệu.
Luôn lọc truy vấn theo dbt_valid_from hoặc khoảng ngày để giảm lượng dữ liệu quét.
3. Khắc phục lỗi thực thi Snapshot
Các vấn đề thường gặp gồm:
Quyền truy cập schema hoặc cơ sở dữ liệu không đúng.
Thay đổi lược đồ bảng nguồn (ví dụ bỏ cột) làm hỏng câu lệnh SELECT của snapshot.
Lỗi cú pháp trong các khối cấu hình snapshot.
Giải pháp:
Dùng dbt debug để xác thực kết nối và cấu hình.
Triển khai kiểm thử CI trong dbt để phát hiện lỗi trước khi triển khai.
Xem nhật ký chạy dbt để có thông điệp lỗi chi tiết.
Kết luận
dbt snapshots giúp các nhóm phân tích xây dựng bộ dữ liệu lịch sử vững chắc với chi phí kỹ thuật tối thiểu, hỗ trợ phân tích tuân thủ. Nếu bạn muốn tìm hiểu thêm về dbt, hãy xem khóa học Giới thiệu về dbt. Để đọc thêm và xem nhiều hướng dẫn khác, hãy tham khảo Giới thiệu gói dbt-utils và Hướng dẫn dbt.
dbt Snapshot FAQs
Làm thế nào để cấu hình dbt snapshots cho các chiến lược dữ liệu khác nhau?⌄
Để cấu hình dbt snapshots cho các chiến lược dữ liệu khác nhau, bạn chọn giữa chiến lược timestamp và check trong cấu hình snapshot. Với chiến lược timestamp, chỉ định strategy='timestamp' và cung cấp cột updated_at cập nhật tin cậy khi có bất kỳ thay đổi nào. Với chiến lược check, dùng strategy='check' và định nghĩa check_cols với danh sách các cột cần theo dõi thay đổi.
Thực tiễn tốt nhất để lên lịch dbt snapshots là gì?⌄
Lên lịch snapshots vào giờ thấp điểm, điều chỉnh tần suất theo tốc độ thay đổi dữ liệu, dùng công cụ điều phối như Airflow hoặc dbt Cloud, chạy tách biệt với các phép biến đổi nặng và thường xuyên giám sát lỗi.
Làm sao tôi có thể tùy chỉnh các trường siêu dữ liệu trong dbt snapshots?⌄
Bạn có thể đổi tên các trường siêu dữ liệu mặc định như dbt_valid_from và dbt_valid_to trong cấu hình snapshot, và thêm siêu dữ liệu tùy chỉnh bằng cấu hình meta trong YAML để phù hợp với tiêu chuẩn dữ liệu của bạn.
Sự khác biệt giữa chiến lược timestamp và check trong dbt snapshots là gì?⌄
Timestamp dùng cột updated_at để phát hiện mọi thay đổi, trong khi check so sánh các cột cụ thể; timestamp đơn giản hơn, còn check linh hoạt hơn khi không có dấu thời gian tin cậy.
Xử lý các bản ghi bị xóa trong dbt snapshots như thế nào?⌄
Dùng invalidate_hard_deletes=True để dbt đánh dấu các bản ghi bị thiếu bằng ngày kết thúc trong khoảng hiệu lực của chúng, qua đó ghi nhận việc xóa trong lịch sử snapshot.
Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.
Xây dựng các đường ống dữ liệu đáng tin cậy và có khả năng mở rộng với dbt Fundamentals, một khóa học thực hành được thiết kế dành cho các nhà phân tích dữ liệu, kỹ sư dữ liệu và kỹ sư phân tích.
dbt (data build tool) là một công cụ mạnh mẽ được các nhà phân tích và kỹ sư dữ liệu sử dụng để biến đổi, kiểm thử và ghi tài liệu dữ liệu trong bộ công cụ dữ liệu hiện đại.
Bên cạnh khả năng mô hình hóa nổi tiếng, một tính năng quan trọng khác là dbt snapshot, cho phép bạn ghi nhận các chiều thay đổi chậm (SCD) trong kho dữ liệu.
Hướng dẫn này sẽ giải thích chi tiết về dbt snapshots, các trường hợp sử dụng và cách triển khai. Tôi sẽ:
Để tìm hiểu thêm về dbt, hãy xem hướng dẫn dbt là gì? Giới thiệu thực hành cho Kỹ sư Dữ liệu và khóa học Giới thiệu về dbt.
dbt Snapshots là gì?
Một dbt snapshot là cơ chế theo dõi thay đổi của các bản ghi theo thời gian, đặc biệt với các bảng mà mặc định không lưu lịch sử thay đổi. Snapshots chủ yếu được dùng để triển khai Slowly Changing Dimensions (SCD) Loại 2. Chúng lưu các phiên bản của hàng khi các cột được theo dõi thay đổi.
Trường hợp sử dụng gồm:
Vì sao dùng dbt Snapshots? Lợi ích và Trường hợp sử dụng
dbt snapshots hữu ích vì chúng hoạt động như một bản ghi các thay đổi dữ liệu theo thời gian, cho phép phân tích lịch sử và báo cáo tuân thủ.
Lợi ích
Dưới đây là một số lợi ích khi dùng Snapshots:
Trường hợp sử dụng phổ biến
Snapshots hữu ích trong một số tình huống đặc thù như:
Nền tảng kiến trúc
Snapshots tích hợp mượt mà trong hệ sinh thái của dbt, tận dụng cấu hình và quản lý chạy để xây dựng bảng lịch sử hiệu quả.
Hãy xem các loại mô hình được dùng cho dữ liệu làm ví dụ.
Có hai loại mô hình dùng cho dữ liệu:
Hai mô hình này khác nhau ở mục đích, phương thức lưu trữ và ứng dụng.
Tóm tắt khác biệt của chúng:
Tính năng
Mô hình tiêu chuẩn
Snapshots
Mục đích
Biến đổi trạng thái hiện tại
Theo dõi lịch sử
Lưu trữ
Bảng hoặc view với dữ liệu hiện tại
Bảng lịch sử chỉ thêm (append-only)
Phù hợp nhất cho
Mô hình fact/chiều
Chiều thay đổi chậm
dbt Snapshots hoạt động như thế nào
Snapshots thường tuân theo một quy trình có cấu trúc để đảm bảo mọi thay đổi được ghi nhận một cách hệ thống, gồm các bước sau:
dbt snapshotđể so sánh dữ liệu hiện tại với snapshot đã có.Vậy dbt theo dõi thay đổi như thế nào?
Mọi thay đổi đều được ghi trong bảng Snapshot đầu ra.
Nếu phát hiện thay đổi, dbt cập nhật trường
dbt_valid_tocủa phiên bản trước bằng thời gian hiện tại và chèn một hàng mới với trườngdbt_valid_fromlà thời gian hiện tại.Chiến lược Snapshot trong dbt
Snapshots dùng hai chiến lược chính để phát hiện thay đổi.
1. Chiến lược theo dấu thời gian (Timestamp)
updated_attin cậy.2. Chiến lược kiểm tra (Check)
Chiến lược
Phương pháp phát hiện
Phù hợp nhất cho
Timestamp
Cột dấu thời gian cập nhật
Bảng có dấu thời gian sửa đổi cuối cùng đáng tin cậy
Check
So sánh trực tiếp các cột
Bảng không có cột dấu thời gian
Xóa cứng (Hard Deletes)
Các thay đổi dữ liệu như xóa cũng có thể được theo dõi, nhưng không phải mặc định. Tuy nhiên, có cách để thay đổi điều đó nhằm giám sát các lần xóa cứng.
invalidate_hard_deletes=Trueđể đánh dấu các hàng bị xóa bằng giá trịdbt_valid_to, lưu lại trạng thái cuối cùng của chúng.Ví dụ về triển khai chiến lược check, đồng thời tính đến xóa cứng:
Hướng dẫn triển khai dbt Snapshots
Giờ chúng ta đã hiểu cách dbt Snapshots hoạt động, hãy xem cách triển khai chúng
1. Bộ dữ liệu mẫu cho hướng dẫn Snapshot
Để thực hành snapshots, chúng ta sẽ tạo một bảng khách hàng mẫu mô phỏng hệ thống thành viên thực tế. Điều này cung cấp dữ liệu cụ thể để thử các chiến lược snapshot phổ biến.
2. Thiết lập dự án dbt của bạn
Trước khi triển khai snapshots, điều quan trọng là thiết lập đúng dự án dbt của bạn. Điều này đảm bảo môi trường được cấu hình để quản lý mô hình, snapshot, kiểm thử và tài liệu theo cách có cấu trúc, có khả năng mở rộng.
Điều kiện tiên quyết
Thay dbt-postgres bằng adapter kho dữ liệu của bạn, ví dụ dbt-snowflake hoặc dbt-bigquery, tùy môi trường.
Hướng dẫn thiết lập từng bước
1. Điều hướng tới thư mục dự án mong muốn.
Đây là nơi bạn sẽ lưu trữ các dự án phân tích hoặc ELT. Trong ví dụ này, chúng ta sẽ lưu mọi tệp liên quan trong thư mục dự án dbt này.
2. Khởi tạo một dự án dbt mới.
Tạo tệp cấu hình tên là dbt_project.yml:
Dán nội dung sau vào tệp dự án của bạn:
3. Kiểm tra kết nối của bạn.
Kết quả lệnh sẽ như sau:
4. Nạp seeds vào cơ sở dữ liệu cục bộ.
Chạy lệnh sau:
Kết quả lệnh sẽ như sau:
5. Cấu hình thiết lập kết nối cơ sở dữ liệu của bạn
Trong tệp profiles.yml, thường nằm tại ~/.dbt/profiles.yml.
Nội dung trong tệp profiles của tôi như sau:
Nếu bạn dùng cơ sở dữ liệu SQLite như tôi, bạn cũng sẽ cần cài tiện ích mở rộng SQLean.
6. Nạp dữ liệu vào các mô hình staging của dbt:
Tạo một thư mục mới tên models. Trong thư mục đó, tạo tệp
stg_customers.sql.Dán đoạn mã sau vào tệp:
7. Xây dựng mô hình staging bằng lệnh sau trong dbt.
Kết quả lệnh sẽ như sau:
3. Cấu hình dbt Snapshot
Trong ví dụ này, bạn có thể dùng đoạn mã sau để thực hiện snapshot theo chiến lược timestamp.
4. Chạy dbt Snapshot
Thực thi:
Với lệnh này, dbt tạo bảng snapshot nếu chưa tồn tại. Nó cũng chèn các hàng mới cho những thay đổi được phát hiện.
Kết quả lệnh sẽ như sau:
5. Kiểm tra các bảng Snapshot
Sau khi thực hiện snapshot, bạn sẽ có tệp
snapshot.dbmới được tạo trong thư mục dự án.Tôi đã mở tệp này trong VSCode để xem nó trông như thế nào:
Như bạn thấy, nó chứa các cột bổ sung như
dbt_updated_at… Đây là các cột quan trọng để xác định có thay đổi dữ liệu hay không và khi nào thay đổi.Để có thêm hướng dẫn thực hành về dbt, hãy xem hướng dẫn Lớp ngữ nghĩa với dbt.
Ví dụ: Theo dõi thay đổi dữ liệu với dbt Snapshots
Snapshots cho phép các nhóm ghi nhận đầy đủ dấu vết kiểm toán về thay đổi của bất kỳ thuộc tính nào trong một bảng theo thời gian, rất hữu ích cho tuân thủ, gỡ lỗi và phân tích.
customersvới các trường liên quan. Bao gồm ID khách hàng, tên, email và dấu thời gian updated_at để theo dõi thời điểm xảy ra thay đổi.Dùng đoạn mã sau để chèn dữ liệu vào bảng. Dữ liệu này dùng làm dữ liệu gốc trước khi thay đổi.
dbt snapshotđể ghi nhận trạng thái ban đầu.Tiếp theo, chúng ta sẽ cập nhật bảng gốc bằng cách sửa thông tin một khách hàng để mô phỏng thay đổi dữ liệu.
dbt snapshotlần nữa để ghi nhận thay đổi.Để xem sự khác biệt và các thay đổi đã thực hiện, bạn cần truy vấn bảng snapshot. Bảng sẽ hiển thị cả hai phiên bản địa chỉ email với khoảng thời gian hiệu lực tương ứng:
Quy trình này đảm bảo bạn giữ lại toàn bộ lịch sử thay đổi cho cập nhật email, rất quan trọng cho kiểm toán GDPR, theo dõi lịch sử liên hệ hoặc phân tích hỗ trợ khách hàng.
Cấu hình và quản lý nâng cao
Quản lý cấu hình hiệu quả cho phép các nhóm mở rộng triển khai snapshot trên nhiều dự án và môi trường một cách liền mạch.
1. Cấu hình cấp dự án và cấp tài nguyên
dbt_project.ymlđể đặt cấu hình snapshot mặc định, như schema đích hoặc materialization, áp dụng cho tất cả snapshots.2. Tùy chỉnh các trường siêu dữ liệu
Theo mặc định, dbt tạo các trường
dbt_valid_fromvàdbt_valid_to. Bạn có thể đổi tên chúng bằng tùy chọn cấu hìnhvalid_fromvàvalid_tonếu tiêu chuẩn nhóm yêu cầu quy ước đặt tên khác để rõ ràng trong công cụ BI hoặc quản trị dữ liệu.3. Di chuyển cấu hình Snapshot cũ
Việc di chuyển có thể gây sai lệch nếu không xử lý đúng. Dưới đây là một số điểm cần lưu ý khi bạn di chuyển cấu hình snapshot:
4. Tích hợp với các công cụ khác
Các thay đổi dữ liệu có thể được theo dõi đồng bộ với dbt snapshots.
Ví dụ:
Thực tiễn tốt nhất khi triển khai sản xuất
Triển khai dbt snapshots trong môi trường sản xuất cần thiết kế cẩn thận để đảm bảo hiệu năng, khả năng bảo trì và giá trị kinh doanh.
Nên tuân theo những điều sau:
1. Trường hợp sử dụng tối ưu và chọn bảng
2. Kỹ thuật tối ưu hiệu năng
Trong sản xuất, bạn sẽ muốn tối ưu để theo dõi thay đổi dữ liệu hiệu quả mà không ảnh hưởng đến sản phẩm.
Một số mẹo:
unique_keyvà các cột hiệu lực để truy vấn nhanh hơn.3. Thực hành bảo trì và giám sát
4. Cạm bẫy thường gặp
Dùng
unique_keykhông duy nhất dẫn đến phiên bản hóa hàng không chính xác. Luôn kiểm thử tính duy nhất trước khi triển khai.Hiện tượng phình to snapshot cũng có thể xảy ra khi lưu trữ những thay đổi lịch sử không cần thiết (ví dụ, các cột cập nhật dấu thời gian thường xuyên) có thể làm chi phí lưu trữ tăng nhanh.
Thách thức phổ biến và giải pháp
Việc dùng Snapshots trong dbt có thể đi kèm một số thách thức kỹ thuật cụ thể:
1. Va chạm khóa duy nhất
Vấn đề: Hàng trùng lặp trong snapshot do khóa duy nhất được định nghĩa kém.
Giải pháp:
2. Hiệu năng truy vấn theo thời gian
Vấn đề: Truy vấn chậm khi phân tích dữ liệu lịch sử.
Giải pháp:
dbt_valid_fromhoặc khoảng ngày để giảm lượng dữ liệu quét.3. Khắc phục lỗi thực thi Snapshot
Các vấn đề thường gặp gồm:
SELECTcủa snapshot.Giải pháp:
dbt debugđể xác thực kết nối và cấu hình.Kết luận
dbt snapshots giúp các nhóm phân tích xây dựng bộ dữ liệu lịch sử vững chắc với chi phí kỹ thuật tối thiểu, hỗ trợ phân tích tuân thủ. Nếu bạn muốn tìm hiểu thêm về dbt, hãy xem khóa học Giới thiệu về dbt. Để đọc thêm và xem nhiều hướng dẫn khác, hãy tham khảo Giới thiệu gói dbt-utils và Hướng dẫn dbt.