Chuyển đến nội dung chính

Giải thích Snowflake Dynamic Tables: Các pipeline dữ liệu hiện đại

Tìm hiểu cách Snowflake Dynamic Tables có thể đơn giản hóa các quy trình ETL phức tạp và nhạy thời gian của bạn bằng cách để Snowflake quản lý việc làm mới.
· 15 phút đọc

Khám phá cùng AI

Dynamic Tables của Snowflake là một công cụ mạnh mẽ trong bộ công cụ pipeline của kỹ sư dữ liệu. Về bản chất, chúng là các quy trình làm mới tự động sử dụng truy vấn chuyển đổi trên các bảng gốc để tạo bảng mới. 

Dynamic Tables đơn giản hóa các pipeline điều phối dữ liệu nơi độ mới của dữ liệu quan trọng và cần các chuyển đổi dựa trên SQL phức tạp. Chúng sử dụng thời gian trễ dựa trên lag để làm mới bảng dựa trên thay đổi ở các bảng gốc.

Những cải tiến gần đây đã tăng cường khả năng của chúng, cho phép lan truyền dữ liệu gần thời gian thực và tích hợp sâu hơn trong hệ sinh thái của Snowflake (ôn lại với khóa học nhập môn này). 

Hướng dẫn này khám phá cách Dynamic Tables hoạt động, cách triển khai hiệu quả, cũng như cách giám sát và tối ưu hiệu năng. Đến cuối bài, bạn sẽ có đủ công cụ để đánh giá và thử nghiệm các triển khai này xem chúng có phù hợp với nhu cầu dữ liệu của tổ chức bạn hay không.

Snowflake Dynamic Tables là gì?

Dynamic Tables là một lớp đối tượng cơ sở dữ liệu Snowflake được quản lý hoàn toàn, giúp hợp lý hóa và tự động hóa các pipeline dữ liệu. 

Thay vì dùng công cụ điều phối bên ngoài hoặc cố gắng căn thời gian làm mới thủ công theo cập nhật của bảng nguồn, Dynamic Tables tự động cập nhật dựa trên thay đổi dữ liệu nguồn và các mục tiêu độ mới đã định nghĩa. Điều này cho phép các chuyên gia dữ liệu xây dựng các chuyển đổi dữ liệu linh hoạt và tự cập nhật khi dữ liệu thay đổi.

Không giống như view, nơi người dùng phải tính toán bảng khi truy vấn, Dynamic Tables luôn duy trì kết quả tính sẵn, giúp cải thiện tốc độ truy vấn. Tương tự, mặc dù materialized view cũng cung cấp dữ liệu được lưu đệm, Dynamic Tables có thể sử dụng các phép nối (join), hợp (union) và view lồng nhau mà materialized view không hỗ trợ.

Ban đầu được giới thiệu để thu hẹp khoảng cách giữa các pipeline ELT truyền thống và kiến trúc hướng sự kiện, Dynamic Tables thể hiện nỗ lực phát triển liên tục của Snowflake cho xử lý dữ liệu khai báo và nhận thức phụ thuộc. 

Bạn chỉ cần viết truy vấn SQL SELECT để định nghĩa Dynamic Table cùng với TARGET_LAG xác định tần suất làm mới. 

Ví dụ, TARGET_LAG 5 phút có nghĩa Dynamic Table chậm hơn bảng gốc không quá 5 phút. Phần hay nhất là tất cả đều do công cụ làm mới nội bộ của Snowflake quản lý, giúp chúng ta không phải thiết kế các pipeline phức tạp!

Tìm hiểu Snowflake Dynamic Tables

Để triển khai hiệu quả dynamic table, chúng ta sẽ đi sâu vào một số triển khai kỹ thuật nền tảng từ Snowflake nhằm hiểu rõ điểm mạnh và hạn chế của chúng.

Kiến trúc nền tảng và cơ chế vận hành

Tương tự materialized view, Dynamic Tables cung cấp hành vi làm mới dữ liệu bền bỉ và tự động. Tuy nhiên, khác với materialized view, chúng cho phép các chuyển đổi phức tạp hơn như union và join. 

Điều này cho phép tạo nhiều Dynamic Table nhỏ hơn rồi cấp dữ liệu cho các dynamic table lớn hơn.

Một đổi mới then chốt là việc Snowflake sử dụng đồ thị phụ thuộc tự động. Bạn có thể tạo một bảng tổng hợp động cập nhật khi bảng gốc cập nhật, hoặc xây dựng các lớp Dynamic Tables bằng đồ thị có hướng phi chu trình (DAG). Cơ chế này hoạt động bằng cách cập nhật một bảng staging gốc, từ đó kích hoạt cập nhật của dynamic table ở hạ lưu. 

Khi các Dynamic Table trung gian được cập nhật, Dynamic Table tổng hợp cuối cùng cũng được cập nhật. Tất cả hoạt động này diễn ra với các refresh worker của Snowflake dò tìm cập nhật dữ liệu và đảm bảo các bảng nguồn được làm mới với dữ liệu mới nhất.

image describign two workflows, one which shows a aggregate dynamic table using only base tables and the other using intermediate dynamic tables to build one larger dynamic table

Trích từ tài liệu Snowflake về Tạo Dynamic Tables

Động học của cơ chế làm mới

Các cơ chế chính bạn có thể kiểm soát khi tạo Dynamic Tables gồm chế độ làm mới, độ trễ (lag) và tham số warehouse trong lúc tạo. Dynamic Tables hỗ trợ hai chế độ làm mới:

  • Chế độ incremental: Snowflake phân tích thay đổi kể từ lần làm mới trước và trộn các thay đổi vào bảng
  • Chế độ full: Tính toán lại toàn bộ bảng ở mỗi lần làm mới và thay thế hoàn toàn bảng

Bạn có thể tự xác định chế độ làm mới, hoặc sử dụng REFRESH_MODE = AUTO khi tạo dynamic table ban đầu. Lưu ý khi dùng AUTO rằng chế độ làm mới được đặt tại thời điểm tạo và không được cập nhật. Nếu Snowflake xác định làm mới incremental không hiệu quả, nó sẽ chọn làm mới full.

Thiết lập WAREHOUSE xác định warehouse sẽ được dùng cho tài nguyên tính toán. Đảm bảo chọn warehouse phù hợp với nhu cầu tính toán và lưu trữ dữ liệu của bạn.

Có lẽ khái niệm quan trọng nhất là lag. Cách phổ biến nhất để xác định lag là dùng TARGET_LAG, tham số này định nghĩa độ trễ chấp nhận được giữa dữ liệu nguồn và dynamic table. Nếu bạn đang làm việc với pipeline phức tạp hơn nơi các Dynamic Table phụ thuộc vào các dynamic table khác, bạn có thể đặt TARGET_LAG = DOWNSTREAM. 

Bằng cách đặt TARGET_LAG là DOWNSTREAM, nó sẽ nhìn vào các Dynamic Table hạ lưu phụ thuộc vào Dynamic Table hiện tại để căn thời gian.

Bảng tóm tắt khác biệt giữa Dynamic Tables và các bảng, view, materialized view truyền thống

Khái niệm nguồn

Tính năng được kế thừa trong Dynamic Tables

Dynamic Tables cải thiện như thế nào

Bảng truyền thống

Lưu trữ bền vững; có thể tái sử dụng ở hạ lưu

Được duy trì và làm mới tự động; không cần nạp dữ liệu hoặc trigger thủ công

View

Logic SQL khai báo; không cần mã thủ tục

Đầu ra được materialize để hiệu năng tốt hơn; độ mới được quản lý qua TARGET_LAG

Materialized View

Làm mới tự động; quản lý trạng thái

Hỗ trợ chuyển đổi phức tạp; theo dõi phụ thuộc tích hợp xuyên suốt các tầng

Quản lý phụ thuộc

Mỗi Dynamic Table đóng góp vào một DAG, cho phép Snowflake điều phối việc làm mới trên nhiều bảng. Điều này đảm bảo tính đúng đắn và hiệu quả, đặc biệt trong các pipeline nhiều tầng.

Snowsight cung cấp giao diện trực quan để khám phá DAG này, hiển thị các phụ thuộc, thời gian làm mới và số đo lag. Đây là lợi thế lớn cho việc gỡ lỗi và phân tích tác động. Hãy đọc bài viết về các pipeline dữ liệu Snowflake để biết thêm về cách kiến trúc Snowflake hoạt động.

Tính năng chính và lợi thế so sánh

Hãy cùng điểm qua các tính năng chính khác của Dynamic Tables và lợi thế của chúng. 

Lợi thế so với kiến trúc truyền thống

Dynamic Tables loại bỏ nhu cầu điều phối bên ngoài (ví dụ: Airflow hoặc dbt Cloud) bằng cách xử lý theo dõi phụ thuộc và logic làm mới ngay trong Snowflake.

Điều này mang lại nhiều lợi thế, bao gồm:

  • Điều phối đơn giản: Không cần cron job hay logic làm mới thủ công.
  • Hỗ trợ CDC tích hợp sẵn: Xử lý incremental được hỗ trợ nguyên bản.
  • Giám sát hợp nhất: Trạng thái làm mới, lag và phả hệ hiển thị trong Snowsight.
  • Hỗ trợ viết lại truy vấn: Snowflake có thể tối ưu truy vấn bằng phả hệ của Dynamic Table.

Tất cả điều này giúp Dynamic Tables vượt trội trong các tình huống cần dữ liệu cập nhật và gần thời gian thực. Hãy nghĩ đến các dashboard thời gian thực và quy trình CDC. Thêm nữa, bạn có thể xâu chuỗi nhiều Dynamic Table liên tiếp cho các chuyển đổi nhiều tầng.

Xử lý dữ liệu thời gian thực và change data capture (CDC)

Thay vì định nghĩa lịch làm mới thủ công bằng CRON, Dynamic Tables dùng TARGET_LAG để đối chiếu với bảng nguồn. Với các bảng dữ liệu streaming thời gian thực, điều này có nghĩa là ngay khi Dynamic Table lệch so với lag được chỉ định, nó sẽ tự động cập nhật.

Dù rất giống nhau, Dynamic Tables thường được dùng như một lựa chọn thay thế cho Streams và materialized view. Materialized view phù hợp nếu bạn cần dữ liệu luôn hiện thời và sử dụng logic đơn giản trên một bảng gốc duy nhất. 

Streams lý tưởng để triển khai CDC thủ công và hiểu cách dữ liệu thay đổi theo thời gian. Dynamic Tables hoàn hảo khi bạn muốn một cách đơn giản để triển khai cập nhật theo lịch cho các truy vấn chuyển đổi dữ liệu phức tạp.

Để cân nhắc thêm về cách cấu trúc dữ liệu trong Snowflake, khóa học về mô hình dữ liệu trong Snowflake là một nguồn tham khảo tuyệt vời.

Triển khai Snowflake Dynamic Tables

Hãy cùng đi qua cách thiết lập Dynamic Tables bằng các mẫu cú pháp và thực tiễn tốt. Khởi động khá dễ, nhưng hiểu thấu các tham số sẽ giúp bạn khai thác tối đa dynamic table của mình.

Khung triển khai và cú pháp

Dưới đây là một ví dụ mã về cách tạo Dynamic Table dùng bảng raw_sales làm gốc. Hãy xem qua và chúng ta sẽ phân tích ngay sau đó.

# Your Dynamic Table parameters
CREATE OR REPLACE Dynamic Table sales_agg
  TARGET_LAG = '5 minutes'
  WAREHOUSE = 'prod_wh'
  REFRESH_MODE = auto
  INITIALIZE = on_create
  AS

# Your SQL query for the table itself
SELECT
  store_id,
  SUM(amount) AS total_sales,
  COUNT(*) AS sale_count
FROM raw_sales
GROUP BY store_id;

Nửa sau khá trực quan; đó là câu lệnh SELECT, định nghĩa dữ liệu trong bảng. Nửa đầu trước câu lệnh SELECT là các tham số tạo: 

  • TARGET_LAG: Chỉ định yêu cầu về độ mới như đã giải thích ở trên. Bạn có thể đặt một khoảng thời gian tại đây hoặc viết "DOWNSTREAM" nếu có Dynamic Table khác đang sử dụng dữ liệu này.
  • WAREHOUSE: Xác định tài nguyên tính toán. Hãy chọn warehouse Snowflake phù hợp để có đủ tài nguyên tạo bảng một cách hiệu quả về chi phí
  • REFRESH_MODE: Có thể đặt rõ là INCREMENTAL hoặc FULL. Ở đây tôi chọn AUTO để Snowflake quyết định phương án tối ưu.
  • INITIALIZE: Xác định thời điểm khởi tạo bảng. ON_CREATE nghĩa là bảng được khởi tạo ngay. Đặt ON_SCHEDULE sẽ khởi tạo bảng khi đạt đến kỳ lag đầu tiên.

Lưu ý Snowflake sẽ yêu cầu bật change tracking để hỗ trợ làm mới incremental đúng cách, tức là chúng tự động được bật cho các dynamic table incremental! 

Nếu muốn kiểm tra thủ công, bạn có thể dùng lệnh ALTER TABLE. Việc bật change tracking cũng cho phép time travel trong trường hợp cần khôi phục phiên bản lịch sử của bảng.

CLONE và ICEBERG

Hai điểm cần lưu ý với Dynamic Tables là việc nhân bản (clone) và kết nối với các bảng Snowflake Iceberg, vốn được xây dựng trên các bảng Apache Iceberg bên ngoài. 

Với các bảng Iceberg, không có thay đổi gì trong lúc thiết lập. Lợi ích chính của Dynamic Tables xây trên các bảng Snowflake Iceberg là cho phép bạn tiếp tục xử lý dữ liệu bên ngoài mà không cần nạp liên tục hay nhân đôi dữ liệu.

Cloning khả thi nhờ time travel của Snowflake, và chúng ta có thể sao chép một phiên bản cũ của Dynamic Table bằng lệnh CLONE như sau:

CREATE Dynamic Table clone_sales_agg
CLONE sales_agg
AT (OFFSET => -24*60*60) –-24 hours ago
TARGET_LAG = DOWNSTREAM
WAREHOUSE = sales_wh

Lưu ý là các bảng clone có thể không chia sẻ đầy đủ metadata của bảng nguồn, và chúng chiếm thêm dung lượng lưu trữ. Hãy cân nhắc kỹ khi clone và đảm bảo thực sự cần thiết.

Thiết lập dữ liệu mẫu

Nên thực hành thiết lập Dynamic Tables để kiểm thử chức năng. Dưới đây là hướng dẫn tổng quát về cách kiểm thử dynamic table:

  • Tạo một bảng raw_sales đơn giản có timestamp.
  • Chèn các hàng mới theo định kỳ.
  • Dùng TARGET_LAG = '1 minute' để quan sát việc làm mới diễn ra.

Bạn có thể tạo một stream quan sát một S3 bucket nơi bạn có thể tải dữ liệu theo định kỳ. Khi dữ liệu này thay đổi, bạn có thể thấy Dynamic Table cập nhật ra sao. Bạn có thể theo hướng dẫn này để thiết lập đơn giản quy trình nạp dữ liệu vào Snowflake rồi xem bài hướng dẫn này để biết thêm về tạo bảng trong Snowflake.

Giám sát và quản lý Dynamic Tables

Snowflake cung cấp nhiều công cụ giúp bạn giám sát và quản lý Dynamic Tables hiệu quả, như dùng Snowsight hoặc truy vấn. Hãy đảm bảo bạn có quyền giám sát trên tài khoản để xem thông tin này!

Phương pháp và công cụ giám sát

Dùng Snowsight để giám sát Dynamic Tables rất đơn giản:

  • Đi tới Data và chọn Dabatases
  • Chọn cơ sở dữ liệu và schema chứa Dynamic Table của bạn
  • Chọn thẻ Dynamic Tables
  • Tại đây hiển thị danh sách các bảng để bạn chọn và xem thêm thông tin.

Snowsight có thể cung cấp thông tin hữu ích như cách Dynamic Table được tạo, DAG, lịch sử và số liệu làm mới.

Để làm điều tương tự bằng SQL, chúng ta dùng lệnh SHOW DYNAMIC TABLES. 

Chẳng hạn, nếu tôi muốn xem tất cả dynamic table liên quan đến sales:

SHOW Dynamic Tables LIKE ‘sales_%' IN SCHEMA mydb.myschema;

Lệnh này cung cấp thông tin như thời điểm tạo bảng, kích thước, target lag và trạng thái mới nhất.

Quản lý và chỉnh sửa dynamic table

Sẽ có lúc bạn muốn chỉnh sửa hoặc tạm dừng dynamic table của mình. May mắn là Snowflake làm điều này khá đơn giản.

Để tạm dừng bảng, ta dùng ALTER DYNAMIC TABLE và SUSPEND:

ALTER Dynamic Table sales_agg SUSPEND;

Để tiếp tục sau đó, ta làm tương tự với RESUME:

ALTER Dynamic Table sales_agg RESUME;

Để thay đổi tham số, chúng ta cũng dùng dòng ALTER DYNAMIC TABLE và SET tham số cụ thể muốn đổi:

ALTER Dynamic Table sales_agg SET TARGET_LAG = '10 minutes';

Cách tốt nhất để quản lý phụ thuộc và giảm thiểu gián đoạn vận hành là đảm bảo bạn không tạm dừng các bảng quan trọng. Nếu bạn dự định thay đổi lượng lag, hãy hiểu rõ tác động đến thời gian của các bảng hạ lưu. 

Vượt qua các ràng buộc vận hành

Chúng ta đã thấy Dynamic Tables rất hữu ích, nhưng chúng vẫn có một vài giới hạn và điểm cần lưu ý.

Ràng buộc kiến trúc và hạn chế

Có một số giới hạn về tài khoản và loại nguồn. Các ràng buộc hiện tại bao gồm:

  • Giới hạn 50.000 Dynamic Table mỗi tài khoản (vào giữa năm 2025).
  • Không phải mọi kiểu đối tượng Snowflake đều được hỗ trợ làm nguồn (ví dụ: stream)
  • Các truy vấn của Dynamic Table không được theo dõi trong view kiểm toán ACCESS_HISTORY

Những điều khác cần cân nhắc là cloning, time travel và kiểm soát truy cập. Time travel có lẽ đơn giản nhất, vì yêu cầu giá trị tối thiểu là 1 ngày. Bạn không thể tắt time travel bằng cách đặt DATA_RETENTION_TIME_IN_DAYS về 0. 

Khi clone một dynamic table, lưu ý rằng không phải mọi metadata đều được lưu. Ngoài ra, bạn không thể clone các dynamic table Iceberg. Nếu bạn clone một Dynamic Table phụ thuộc vào một Iceberg dynamic table, Iceberg Dynamic Table đó sẽ không được chuyển tới vị trí mới.

Tạo và sử dụng Dynamic Tables yêu cầu các quyền CREATE DYNAMIC TABLE, SELECT và USAGE trên cơ sở dữ liệu và schema cha. 

Nếu ghi nhớ các ràng buộc này, bạn sẽ gặp ít rắc rối hơn với dynamic table!

Kỹ thuật tối ưu hiệu năng

Nhờ cách triển khai đơn giản, bạn có thể dễ làm hệ thống quá tải. Lỗi thường gặp là coi Dynamic Tables như pipeline dữ liệu thời gian thực. Chúng không nhằm thay thế nguồn dữ liệu thời gian thực; thay vào đó, chúng ta nên cân nhắc thời điểm và yêu cầu độ mới dữ liệu. Ví dụ, có thể theo các thực tiễn tốt sau:

  • Dùng REFRESH_MODE = incremental khi có thể để không tái tạo toàn bộ Dynamic Table mỗi lần nạp
  • Tinh chỉnh TARGET_LAG để cân bằng chi phí và nhu cầu độ mới dữ liệu của bên liên quan.
  • Chọn WAREHOUSE có kích thước phù hợp để tối ưu tài nguyên tính toán được dùng
  • Chia nhỏ các chuyển đổi lớn thành các bảng theo tầng nhỏ hơn.
  • Viết SQL thông minh và hiệu quả, không phụ thuộc vào các phép join khổng lồ và SELECT lồng nhau nhiều tầng.

Làm theo các mẹo đơn giản này sẽ giúp Dynamic Tables của bạn vận hành trơn tru. Dùng đúng cách có thể thực sự đơn giản hóa các pipeline dữ liệu quan trọng với chi phí tối thiểu, nhưng dùng thiếu thận trọng có thể gây thêm vấn đề về sau!

Giá và cân nhắc chi phí

Như đã đề cập, có chi phí lưu trữ và tính toán khi dùng dynamic table. Chúng ta sẽ trình bày một số chiến lược để hiểu các chi phí này và cách quản lý chúng trong Snowflake.

Thành phần chi phí

Có hai phần lớn trong chi phí dùng dynamic table: lưu trữ và tính toán. Mỗi phần lại gồm vài yếu tố, hãy đi sâu vào từng phần.

Chi phí lưu trữ với Dynamic Tables

Về chi phí lưu trữ, bạn sẽ bị tính phí cho việc lưu trữ kết quả đã materialize của mỗi dynamic table. Cũng có thêm chi phí cho Time Travel, lưu trữ fail-safe và cloning. 

Ngoại lệ là dynamic iceberg tables, nơi bạn không bị tính phí lưu trữ Snowflake vì chúng được lưu trữ bên ngoài. Bạn có thể giới hạn chi phí bằng cách làm Dynamic Table gọn nhẹ nhất có thể hoặc giảm thiểu việc clone và time travel.

Chi phí tính toán với Dynamic Tables

Chi phí tính toán gồm hai phần chính: virtual warehouse và tính toán Cloud Services. Virtual warehouse là tài nguyên bạn dùng để khởi tạo và làm mới bảng; hãy nghĩ đến chi phí chạy truy vấn. 

Cloud Services compute liên quan nhiều hơn đến tự động hóa mà Snowflake cung cấp. Bao gồm việc nhận diện thay đổi ở các đối tượng gốc và duy trì các DAG. Hãy nghĩ đến mọi tác vụ nền mà Snowflake thực hiện để giữ Dynamic Tables hoạt động. 

Điều này phụ thuộc vào độ trễ bảng bạn định nghĩa, và chi phí gắn trực tiếp với tần suất đó.

Để có bức tranh đầy đủ về cách các chi phí này kết hợp với nhau, hãy tham khảo tài liệu chi phí của Snowflake, tài liệu này phân tách từng thành phần.

Giám sát và tiết kiệm chi phí

Snowflake giúp việc giám sát các chi phí này dễ dàng thông qua Snowsight. Bạn có thể vào Monitoring, sau đó Dynamic Tables như thường lệ, và trong trang của dynamic table có thẻ Refresh History hiển thị số credit warehouse đã dùng.

Nếu bạn muốn xem mức sử dụng tổng thể của tài khoản, bạn cũng có thể dùng truy vấn sau:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY;

Lệnh này sẽ xuất các chi phí phát sinh bởi những dịch vụ khác nhau trên tài khoản và có thể liên kết với dynamic table của bạn. 

Ngoài ra, tôi khuyến nghị thử nghiệm trên một warehouse riêng để bạn có thể hiểu đầy đủ chi phí warehouse liên quan đến dynamic table. Khi đã nắm được chi phí, bạn có thể chuyển chúng sang các warehouse dùng chung.

Nếu muốn tiết kiệm chi phí, hãy cân nhắc dùng các tính năng như tự động tạm dừng (auto-suspension). Dynamic Table bị tạm dừng chỉ bị tính phí lưu trữ mà không tốn tài nguyên làm mới. 

Bạn cũng có thể dùng Dynamic Table dạng transient không có chi phí lưu trữ fail-safe. Thêm nữa, nếu tối ưu TARGET_LAG ở tần suất phù hợp và dùng làm mới incremental khi có thể, bạn có thể tiết kiệm rất nhiều chi phí tính toán. 

Như thường lệ, viết SQL tốt và tối ưu hóa chuyển đổi cũng là cách tuyệt vời để giảm sử dụng tài nguyên tính toán.

Các trường hợp sử dụng Snowflake Dynamic Table

Dynamic Tables có thể được dùng ở bất kỳ nơi nào bạn muốn thay thế một pipeline ETL nạp lại theo thời gian phức tạp, khó bảo trì bằng một pipeline dựa trên lag đơn giản và tự quản lý.

Mẫu triển khai ở cấp doanh nghiệp

Dưới đây là một số trường hợp triển khai có thể hữu ích cho lĩnh vực của bạn.

Với các tổ chức tài chính, có thể hữu ích khi làm mới định kỳ dữ liệu giao dịch, như phát hiện gian lận hoặc hoàn trả bút toán. 

Vì không cần dữ liệu cập nhật từng giây, chúng ta có thể muốn TARGET_LAG 10 phút cho các dashboard sức khỏe hệ thống tổng quan. Có thể bạn có một mô hình khoa học dữ liệu lưu tất cả cảnh báo gian lận vào một bảng và một hệ thống giám sát chargeback của bên thứ ba lưu vào bảng khác. 

Bạn có thể kết hợp hai nguồn này vào một bảng tổng hợp một cách đơn giản mà không cần các DAG Airflow phức tạp. Điều này sẽ đơn giản hóa và cải thiện hiệu năng truy vấn.

Có thể với phân tích bán lẻ, chúng ta quan tâm đến hiệu suất theo vùng. Mỗi vùng có thể có cơ sở dữ liệu trung tâm riêng và đẩy dữ liệu theo định kỳ nhưng hơi lệch nhịp. Thay vì xây dựng các pipeline ETL phải điều chỉnh thời gian cho từng cơ sở dữ liệu, ta có thể xây dựng một Dynamic Table tổng hợp tất cả khi cần dựa trên lag của từng bảng. Cách này giảm độ phức tạp pipeline và giảm nhu cầu bảo trì liên tục.

Một số kịch bản khác có thể gồm:

  • Phân tích hành vi thời gian thực: tổng hợp thông tin hành vi khách hàng theo thời gian thực để tóm lược xu hướng mới nổi
  • Quy trình CDC: duy trì dữ liệu gần thời gian thực cho thay đổi vận hành để theo dõi vấn đề kinh doanh
  • Mô hình hóa data vault: bổ sung dữ liệu mới một cách incremental khi đến và đóng vai trò nguồn duy nhất về cách dữ liệu được nạp vào

Kết luận

Snowflake Dynamic Tables là công cụ tuyệt vời giúp bạn đơn giản hóa các pipeline ETL dựa trên thời gian phức tạp. Chúng mang lại sự cân bằng tinh tế giữa tự động hóa, linh hoạt và hiệu năng. Hãy ghi nhớ một số thực tiễn tốt như thử nghiệm với các pipeline không trọng yếu để hiểu hành vi làm mới dữ liệu, giám sát chỉ số lag và chi phí, và đánh giá các DAG trực quan để hiểu phụ thuộc.

Dynamic Tables không phải là sự thay thế hoàn toàn cho Streams và Tasks trong mọi kịch bản, nhưng chúng cung cấp một lựa chọn mới mạnh mẽ, giảm thiểu mã và tối đa hóa hiệu quả. Dùng một cách khôn ngoan, bạn sẽ thấy công việc nhẹ nhàng hơn rất nhiều. Để biết thêm thông tin về Snowflake và ôn tập SQL, hãy xem các nguồn sau:

Câu hỏi thường gặp về Snowflake Dynamic Tables

Snowflake Dynamic Table là gì và khác gì so với view hoặc materialized view?

Dynamic Table là một đối tượng Snowflake được quản lý hoàn toàn, materialize kết quả của một truy vấn SQL và tự động giữ cho dữ liệu luôn mới. Khác với view, vốn tính kết quả theo yêu cầu, và materialized view, vốn bị hạn chế về hỗ trợ chuyển đổi, Dynamic Tables hỗ trợ logic phức tạp, làm mới incremental và các phụ thuộc được điều phối.

Snowflake xác định khi nào cần làm mới Dynamic Table như thế nào?

Việc làm mới được xác định bởi tham số TARGET_LAG, tham số này chỉ rõ độ trễ tối đa cho phép giữa thay đổi ở dữ liệu nguồn và cập nhật trong Dynamic Table. Snowflake tự động kích hoạt làm mới để đáp ứng yêu cầu lag này bằng virtual warehouse được gán.

Tôi có thể dùng Dynamic Tables để thay thế Streams và Tasks trong pipeline của mình không?

Trong nhiều trường hợp là có. Dynamic Tables cung cấp cấu hình đơn giản và lập lịch làm mới tích hợp sẵn, rất phù hợp cho hầu hết các pipeline CDC và chuyển đổi. Tuy nhiên, với logic tùy biến cao, hướng sự kiện hoặc thủ tục, Streams và Tasks có thể vẫn phù hợp hơn.

Điều gì xảy ra nếu dữ liệu nền tảng của Dynamic Table thay đổi thường xuyên?

Snowflake sẽ cố gắng đáp ứng TARGET_LAG bằng cách lên lịch làm mới thường xuyên. Nếu dữ liệu thay đổi thường xuyên hơn khả năng làm mới theo kịp, bạn có thể thấy chi phí tính toán tăng hoặc độ trễ vượt quá mục tiêu.

Một số trường hợp sử dụng thực tế mà Dynamic Tables hoạt động tốt nhất là gì?

Dynamic Tables vượt trội trong các trường hợp:

  • Dashboard thời gian thực với SLA về độ mới nghiêm ngặt.
  • Đơn giản hóa pipeline CDC thay thế Streams & Tasks.
  • Pipeline ELT nhiều tầng trong các trường hợp sử dụng bán lẻ, tài chính và IoT.
  • Mô hình Data Vault 2.0 và các lớp chuyển đổi trung gian.
Tim Lu

Tác giả

Tim Lu

Tôi là một nhà khoa học dữ liệu có kinh nghiệm về phân tích không gian, học máy và đường ống dữ liệu. Tôi đã làm việc với GCP, Hadoop, Hive, Snowflake, Airflow và các quy trình khoa học/kỹ thuật dữ liệu khác.

Chủ đề

Liên quan