Snowflake タイムトラベル(Time Travel)機能の活用方法とは?(vol.21)

  • 公開日:2024年05月13日(月)

Snowflakeには、タイムトラベル(Time Travel)という機能があります。
本ブログ記事では、Snowflake のタイムトラベル機能がどのようなものなのか、利用にあたって知っておくべき特徴/注意点/メリット/活用方法/設定方法/操作方法を解説します。

Snowflake タイムトラベル(Time Travel)機能とは?

Snowflakeのタイムトラベル(Time Travel)機能とは、過去のある時点におけるデータにアクセスして復元できる機能です。

Snowflakeの公式ドキュメントには、タイムトラベル機能の説明として、次の記載があります。
———————————————————————————–
Snowflake Time Travelでは、定義された期間内の任意の時点で履歴データ(つまり、変更または削除されたデータ)にアクセスできます。
Time Travelは、次のタスクを実行するための強力なツールとして機能します。

  • 誤ってまたは意図的に削除された可能性のあるデータ関連オブジェクト(テーブル、スキーマ、および データベース)の復元。
  • 過去の重要なポイントからのデータの複製とバックアップ。
  • 指定された期間のデータ使用量/操作の分析。
    ———————————————————————————–
    *参照元:Time Travelの理解と使用 | Snowflake Documentation

タイムトラベル機能は、最大90日までの期間内のデータを取得することや、現在のテーブルとある時点のテーブルとの差分比較、ある時点でのテーブルデータをもとに復元することが可能です。
例えば、ETL処理で差分更新処理を実施途中にエラーが発生した場合、テーブルデータには差分更新が途中の状態で登録されていますが、ETL処理を行う前時点のデータに戻すことが可能です。
タイムトラベル機能を使用することで、バックアップデータを定期的に取得する必要がなくなり、データの復元も簡単に行えるメリットがあります。

Snowflakeタイムトラベル(Time Travel)機能の特徴/注意点とは?

本章では、タイムトラベル機能の利用にあたり知っておくべき特徴/注意点を解説します。
タイムトラベル機能の特徴/注意点は次の8つとなります。

  • データの削除 または データを含むオブジェクトの削除 など、テーブル内のデータが変更されると、Snowflakeは更新前のデータの状態を保持します。
  • デフォルトのデータ保存期間は1日(24時間)であり、すべてのアカウントで自動的に有効化されます。
  • Enterprise Edition以上では、0~90日までデータ保持期間を設定可能です。
    ※データ保持期間はACCOUNTADMINロール or オーナー権限を持つユーザが変更可能です。
  • データ保持期間を0にすることにより、タイムトラベル機能を無効化できます。
  • データ保持期間を過ぎると、履歴データはFail-Safeに移動します。
    履歴データがFail-Safeに移動した場合、データ保持期間が過ぎてから7日以内であれば、Snowflakeのサポートへお問い合わせすることで、履歴データの復元が可能です。
    *Fail-safeによるデータ復旧は、完了するまでに数時間~数日かかる場合がございます。
  • データ保持期間の設定は、アカウント/データベース/スキーマ/テーブルの各単位で設定可能です。下位レベルで設定したデータ保持期間が優先されます。
    例えば、Aデータベースの保持期間を10日、Bスキーマの保持期間を15日に設定した場合、下位レベルで設定したデータ保持期間である、Bスキーマのデータ保持期間は15日となります。
  • 仮テーブル(TEMPORARY TABLE) / 一時テーブル(TRANSIENT TABLE) のデータ保持期間は、0日または1日で設定可能です。
    *Fail-Safeは使用不可となります。
  • データ保持期間内で対象オブジェクトに変更が行われると、変更分のデータを保持するため、ストレージコストが増加します。

Snowflake タイムトラベル(Time Travel)機能のメリット/活用方法とは?

本章では、タイムトラベル機能のメリット/活用方法を解説します。

タイムトラベル機能を活用することで、過去のデータを取得可能になったり、連携元ファイルをデータレイクに保存する必要がなくなったりするといったのメリットがあります。

例えば、下図のように、連携元データベースから日次でデータファイルをデータレイクに出力し、Snowflakeへデータを取り込み、その後 集計用テーブルへ差分更新する処理を例に、タイムトラベル機能の活用方法を解説します。

下図のようなデータ加工処理において、Rawデータ用テーブルから集計用テーブルの更新処理でエラーが発生した場合を考えてみましょう。
リカバリ方法として、集計用テーブルをバックアップ環境から復元して、エラー原因の対応をしたRawデータから再度データ加工処理を対象日数分実施するという方法が挙げられます。

上図のように、Rawデータ用テーブルから集計用テーブルの更新処理でエラーが発生した場合、集計用テーブル / Rawデータ用テーブル のそれぞれでタイムトラベル機能を用いることで、エラー発生前の集計用テーブルの復元 及び Rawデータからの差分更新 を行うことが可能です。

①集計用テーブルをエラー前の日時から復元します。その後、②Rawデータ用テーブルをデータ取り込み対象日の作成後から復元し、③集計用テーブルに差分更新を行います。
②と③を更新対象分繰り返します。

タイムトラベル機能を使用することで、データレイクにあるファイルからデータを取り出すことなく復元することが可能です。
データレイクに連携元ファイルをアーカイブすることが既存のデータ分析基盤では少なくないですが、バックアップファイルを定期的に出力の必要がなくなり、バックアップやデータ復元を目的としたデータレイクへのアーカイブは不要となります。
アーカイブ処理を開発/実行するためのコストやストレージコストの削減が可能になるのも、タイムトラベル機能のメリットとして挙げられます。

Snowflakeタイムトラベル(Time Travel)機能の設定/操作方法とは?

本章では、タイムトラベル機能の設定方法とタイムトラベル機能を使用したデータの取得方法を解説します。

オブジェクト作成時のタイムトラベル機能の設定方法

データベースやスキーマ、テーブル作成時にタイムトラベル機能を設定する場合はCREATE文に「DATA_RETENTION_TIME_IN_DAYS = 期間日数」を設定します。

データベースのタイムトラベル期間を確認する場合は、下記のSQLを実行します。

SELECT DATABASE_NAME,RETENTION_TIME FROM INFORMATION_SCHEMA.DATABASES WHERE DATABASE_NAME = データベース名

データベースのタイムトラベル期間を変更する場合は、下記のSQLを実行します。

ALTER DATABASE データベース名 SET DATA_RETENTION_TIME_IN_DAYS = 期間日数;

タイムトラベル期間が変更されているのが確認できます。


タイムトラベルを使用する場合は、
AT(TIMESTAMP =>取得したい日時::timestamp_tz);
をSQLに追加して実行します。
下記はタイムスタンプを使用したデータの取得のSQLです。

SELECT * FROM RATE AT(TIMESTAMP => '2024-04-08 02:14'::timestamp_tz);

テーブルにデータを削除した状態
*テーブルのレコード件数が0件なので、SELECT結果が0件です。


タイムスタンプを使用して削除前のデータを取得します。
*削除前のデータが表示されます。

上記のようにタイムスタンプを使用することにより、データの取得 や 削除したデータの復元 などが可能になります。

まとめ

ここまで、Snowflakeのタイムトラベル機能がどのようなものなのか、利用にあたって知っておくべき特徴/注意点/メリット/活用方法/設定方法/操作方法を解説して参りました。

弊社では、お客様の用途やデータ連携元の環境構成、今後の活用方法を踏まえて、データ分析基盤の構築やご利用中のデータ分析基盤の改修などを実施しております。
Snowflakeを用いたデータ活用でお悩みの際は、是非、弊社までお声掛けください。

本記事は、2024年4月8日時点の情報をもとに作成しています。製品・サービスに関しての詳細は、弊社Webサイトからお問い合わせください。
https://itsol.dentsusoken.com/snowflake/inquiry/