my opinion is my own

SnowflakeのTime Travel

SnowPro Core 認定試験ガイドの6.2向けの勉強メモ

Snowflake 認定資格 | Snowflake 【スノーフレイク】 https://www.snowflake.com/certifications/?lang=ja

6.2 Snowflakeによる継続的なデータ保護の概要を説明する。

Time Travelの概要

設定方法

設定値の確認

SHOW PARAMETERS like '%DATA_RETENTION_TIME_IN_DAYS%' in account;

アカウントレベルの設定(※危険)

ALTER ACCOUNT SET DATA_RETENTION_TIME_IN_DAYS=5;

テーブル単位の設定

CREATE TABLE my_table (c1 int) SET DATA_RETENTION_TIME_IN_DAYS=90
ALTER TABLE my_table SET DATA_RETENTION_TIME_IN_DAYS=30

Time Travelの実行方法

復元、クエリ、クローンの3種類がある

復元

-- データベースの復元
UNDROP DATABASE <name>;
-- スキーマの復元
UNDROP SCHEMA <name>;
-- テーブルの復元
UNDROP TABLE <name>;

クエリ

標準時からマイナス7時間とした上で、2015年5月1日16時20分時点のmy_tableのデータを取得する

SELECT * FROM my_table AT(timestamp => 'Fri, 01 May 2015 16:20:00 -0700'::timestamp_tz);

10分前の時点のmy_tableのデータを取得する。offsetには秒単位で入れるため、「60秒×10」で10分を表す

SELECT * FROM my_table AT((offset => -60*10);

指定したクエリIDのクエリが実行される前の状態の、my_tableのデータを取得する

SELECT * FROM my_table BEFORE(statement => '<クエリID>');

クローニング

指定されたタイムスタンプで表される日付と時刻のテーブルのクローンを作成

create table restored_table clone my_table
  at(timestamp => 'Sat, 09 May 2015 01:01:00 +0300'::timestamp_tz);

現在時刻の1時間前に存在していたスキーマとそのすべてのオブジェクトのクローンを作成

create schema restored_schema clone my_schema at(offset => -3600);

指定されたステートメントの完了前に存在していたデータベースとそのすべてのオブジェクトのクローンを作成

create database restored_db clone my_db
  before(statement => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726');

Time Travelの使用量について

TABLE_STORAGE_METRICS ビュー — Snowflake Documentation

上記ビューから確認が可能

select
    TABLE_CATALOG,
    TABLE_NAME,
    ((ACTIVE_BYTES / 1024) / 1024) / 1024 as storage_usage_gb,
    ((TIME_TRAVEL_BYTES / 1024) / 1024) / 1024 as timetravel_usage_gb
from
    "INFORMATION_SCHEMA".table_storage_metrics
where
    TABLE_NAME in('T1')
;

参考

---

関連しているかもしれない記事


#Snowflake