【Snowflake】Snowflake ~ Time Travel関連のSQL構文 ~

◾️はじめに

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