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.
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.
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.
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 parametersCREATEORREPLACE Dynamic Table sales_agg
TARGET_LAG ='5 minutes'
WAREHOUSE ='prod_wh'
REFRESH_MODE = auto
INITIALIZE = on_create
AS# Your SQL query for the table itselfSELECT
store_id,SUM(amount)AS total_sales,COUNT(*)AS sale_count
FROM raw_sales
GROUPBY store_id;Được hỗ trợ bởi
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Được hỗ trợ bởi
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 TablesLIKE ‘sales_%' INSCHEMA mydb.myschema;Được hỗ trợ bởi
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:
Để 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 hỗ trợ bởi
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;Được hỗ trợ bởi
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:
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.
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.
Hãy trải nghiệm Snowflake! Học cách truy vấn, mô hình hóa và quản lý dữ liệu trong khóa học giới thiệu tương tác này dành cho các kỹ sư dữ liệu, nhà phân tích và chuyên gia BI.
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ớiTARGET_LAGxác định tần suất làm mới.Ví dụ,
TARGET_LAG5 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.
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:
Bạn có thể tự xác định chế độ làm mới, hoặc sử dụng
REFRESH_MODE = AUTOkhi tạo dynamic table ban đầu. Lưu ý khi dùngAUTOrằ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
WAREHOUSExá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ể đặtTARGET_LAG = DOWNSTREAM.Bằng cách đặt
TARGET_LAGlà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:
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_saleslàm gốc. Hãy xem qua và chúng ta sẽ phân tích ngay sau đó.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ệnhSELECTlà 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àINCREMENTALhoặcFULL. Ở đây tôi chọnAUTOđể 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_CREATEnghĩa là bảng được khởi tạo ngay. ĐặtON_SCHEDULEsẽ 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
CLONEnhư sau: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:
raw_salesđơn giản có timestamp.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:
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:
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 TABLEvàSUSPEND:Để tiếp tục sau đó, ta làm tương tự với
RESUME:Để thay đổi tham số, chúng ta cũng dùng dòng
ALTER DYNAMIC TABLEvàSETtham số cụ thể muốn đổi: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:
ACCESS_HISTORYNhữ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_DAYSvề 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,SELECTvàUSAGEtrê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:
REFRESH_MODE = incrementalkhi có thể để không tái tạo toàn bộ Dynamic Table mỗi lần nạpTARGET_LAGđể cân bằng chi phí và nhu cầu độ mới dữ liệu của bên liên quan.WAREHOUSEcó kích thước phù hợp để tối ưu tài nguyên tính toán được dùngSELECTlồ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 Historyhiể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:
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_LAG10 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:
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: