タスク
特定のタイミングで事前に定義したクエリを定期的に実行可能
https://dev.classmethod.jp/articles/snowflake-copy-task/
先行タスク
先行したタスクが完了次第、次のタスクをトリガーできる。
現状タスクはCRONで時間指定をして実行している。親子関係があるタスクは子を一日遅らせたり、1時間遅らすことで対応している。この機能を使えば、親子関係が綺麗に整理できるかも。親がエラー発生した時の子の挙動は要調査。実装を検討しているタスクに対する整合性チェック機能はとりあえず親だけでも入れると安定するかも。
参考 : https://zenn.dev/daisuke_harato/articles/014d7e9b7be7b4
https://dev.classmethod.jp/articles/snowflake-execute-task-command/
クラスタリング・マイクロパーティショニング
snowflakeではデータを小さい塊(マイクロパーティション)に分割し、保持している。そのメタ情報(最大・最小の日付とかイベント名)を中央管理し辞書的に使用することで、クエリ実行時に探索する範囲を絞っている(プルーニング)。それをさらにクラスタリングキーでデータを根本から再編成することで探索する範囲を絞ることができる(データをキーで整理整頓するイメージ)。
参考 : https://zenn.dev/ryotas_data/articles/a709dadb4717d4
タイムトラベル
間違えてデータを削除してしまった場合や、UPDATEした場合にやり直せる。
過去のテーブルの状態を指定し、それを現在のテーブルにINSERTすることでやり直せる。
時間指定の方法とクエリIDを指定する方法がある。
insert overwrite into ${database_name}.${schema_name}.{table_name}
select * from ${database_name}.${schema_name}.{table_name}
before (statement => '${QUERY_ID}');
参考 : https://zenn.dev/mnagaa/articles/2b1f3c5e07befa
https://blog.truestar.co.jp/snowflake/20221128/52105/