◾️はじめに
https://dk521123.hatenablog.com/entry/2025/08/31/005438
の続き。 今回は、Time Travel関連のSQL構文である AT | BEFORE 句やUNDROP文などを扱う
目次
【1】AT | BEFORE 句 1)使用例 【2】UNDROP [オブジェクト] 1)構文 2)使用例 3)使用上の注意 【3】DATA_RETENTION_TIME_IN_DAYS 1)使用例 【4】Hello world
【1】AT | BEFORE 句
AT キーワード
* 指定されたパラメーターに等しいタイムスタンプを持つ ステートメントまたはトランザクションによる変更が リクエストに含まれることを指定
BEFORE キーワード
* リクエストが指定されたパラメーターの直前のポイントを 参照するように指定 => このポイントは、クエリー ID で識別されるステートメントが 完了する直前です。
https://docs.snowflake.com/ja/sql-reference/constructs/at-before
1)使用例
https://quickstarts.snowflake.com/guide/getting_started_with_time_travel/index.html
-- At select * from timeTravel_table at(timestamp => '2025-09-01 12:00:00'::timestamp); -- 5分前 select * from timeTravel_table at(offset => -60*5); -- Before select * from timeTravel_table before(statement => '<statement_id>'); -- Clone Table create table restoredTimeTravel_table clone timeTravel_table at(offset => -60*5);
【2】UNDROP [オブジェクト]
* 指定されたオブジェクトをシステムに復元
https://docs.snowflake.com/ja/sql-reference/sql/undrop
1)構文
UNDROP <object_type (e.g. TABLE)> <identifier>
2)使用例
UNDROP TABLE timeTravel_table;
UNDROP DATABASE mydb;
3)使用上の注意
https://docs.snowflake.com/ja/sql-reference/sql/undrop#general-usage-notes
より抜粋 ~~~~ * すべての DROP コマンドに、対応する UNDROP があるわけではありません。 * UNDROP は、Snowflake Time Travel の機能に依存しています。 オブジェクトが データ保持期間 内で削除された場合にのみ、 オブジェクトを復元できます。 デフォルト値は24時間です ~~~~
【3】DATA_RETENTION_TIME_IN_DAYS
* Time Travelアクション(SELECT、CLONE、UNDROP)を 実行するための履歴データを保持する日数
https://docs.snowflake.com/ja/sql-reference/parameters#data-retention-time-in-days
| Value | Explanations |
|---|---|
| 0 または 1 | Standard Edition の場合 |
| 0 ~ 90 | Enterprise Edition以上 の場合 |
1)使用例
-- Alter Table (期間を延ばす) alter table timeTravel_table set data_retention_time_in_days=55;
【4】Hello world
* 以下の公式ドキュメントを参考にしながら触ってみる
https://docs.snowflake.com/ja/sql-reference/constructs/at-before#using-the-at-timestamp-parameter
https://quickstarts.snowflake.com/guide/getting_started_with_time_travel/index.html
https://docs.snowflake.com/ja/sql-reference/sql/undrop
--============= -- 実験1 --============= -- TABLE作成 CREATE OR REPLACE TABLE sample1 (c1 INT, c2 INT); -- Alter Table (期間を3日間延ばす) ALTER TABLE sample1 set data_retention_time_in_days=3; -- データ追加 INSERT INTO sample1 VALUES(1,2); INSERT INTO sample1 VALUES(2,3); -- 作成時間確認 SHOW TERSE TABLES LIKE 'sample1'; -- 5分後に、もう1行挿入 INSERT INTO sample1 VALUES(3,4); -- 5分前 select * from sample1 at(offset => -60*5); +----+----+ | C1 | C2 | |----+----| | 1 | 2 | | 2 | 3 | +----+----+ -- 1秒前 select * from sample1 at(offset => -1); +----+----+ | C1 | C2 | |----+----| | 1 | 2 | | 2 | 3 | | 3 | 4 | +----+----+ --============= -- 実験2 --============= -- テーブル削除 DROP TABLE sample1; -- テーブル確認 SHOW TERSE TABLES LIKE 'sample1'; -- UNDROP UNDROP TABLE sample1; -- テーブル確認 SHOW TERSE TABLES LIKE 'sample1';
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / テーブル ~
https://dk521123.hatenablog.com/entry/2022/09/03/012113
Snowflake ~ Time Travel / Fail-safe ~
https://dk521123.hatenablog.com/entry/2025/08/31/005438
Snowflake ~ QUERY_HISTORY ビュー ~
https://dk521123.hatenablog.com/entry/2024/10/09/155708
Snowflake ~ エラー時の解析方法 ~
https://dk521123.hatenablog.com/entry/2022/04/20/192334