クラウドのエラスティックデータウェアハウスであるSnowflakeには、Virtual Warehouse、Time Travel、Zero Copy cloning、Secure View、Undropなど、いくつかのエキサイティングな機能があります。この提供を通じて、Snowflakeはデータウェアハウスができることを再定義し、再発明しました。この記事では、Integrate.ioの中から、これらのうちの2つ、Time Travel とZero Copy Cloningを探っていきます。
Snowflakeのアーキテクチャの詳細については、こちらを参考にしてください。
ネイティブインテグレーションについて、ここではIntegrate.ioからSnowflakeに接続する方法をご紹介します。
Time Travel
Time Travelは、定義された期間内の任意の時点で履歴データにアクセスすることができます。デフォルトでは、『Time Travelの理解と使用』のSnowflakeドキュメントに記載されているように、最大保持期間は1日(つまり1つの24時間)です。Snowflake Enterprise Edition(およびそれ以上)では、このデフォルト値は90日までの任意の値に設定することができます。
簡単なデモンストレーションとして、Google AnalyticsコネクションからSnowflakeに1週間分のデータをインクリメンタルロードする、デイリーの定期的なデータパイプラインのサンプルを以下に示します。
The table GA_USERS in Snowflake shows the current data (T2 from the image below):
SnowflakeのGA_USERSというテーブルには、現在のデータ(下の画像のT2)が表示されています。
T2 (現在の日)でT0 (昨日)のテーブルにタイムトラベルする必要があるとしましょう。これは、単一のクエリで簡単に行うことができます。
Integrate.ioから、Snowflakeテーブル(SnowflakeへはDBソースコンポーネントを介してアクセス可能です)からのデータを、クエリを使って別のパイプラインでソースにすることができます。
select * from GA_USERS at(timestamp => '2020-09-21 18:18:59.769 -0700'::timestamp)
これは、20200921までの日付のレコードが返されます。
Offset
Time-Travel機能を使用する際のもう一つのオプションは「オフセット」です。
T2からT1にタイムトラベルするには(例えばT2の60分前にタイムトラベルする)、現在から時間をオフセットしてデータを取得します。上記のパイプラインと同様に、Snowflake(DBソースコンポーネントからアクセス可能)からデータを取得し、クエリを実行してみましょう。
select * from GA_USERS at(offset => -60*60);
これは60分前のテーブル(3つのレコードが削除されていた)からデータを取得し、表示します。
Data_retention_time_in_days
上記のように、標準の保持期間は1日で、すべてのSnowflakeアカウントで自動的に有効になります。DATA_RETENTION_TIME_IN_DAYS は、Snowflakeアカウントのデフォルトの保持期間を設定または制御するために、ACCOUNTADMINロールを持つユーザーが使用できるオブジェクトパラメータです。これについての詳細は、こちらを参照してください。
タイムトラベル機能は、以下のような強力なツールです。
- テーブル上の希望の状態からピックアップして処理する。
- 過去のデータを処理して、データ上の偶発的な包含や削除を補う。
Zero Copy Cloning
最も強力なSnowflake機能の1つとして知られているZero Copy Cloningは、データを物理的にコピーすることなく、データベースを簡単にクローンしてテストする方法を提供します。詳細については、Snowflakeドキュメントを参照してください。
以前のデータ処理をさらに進めたIntegrate.ioから、Prodデータベースのクローンを作成することができます。
Pre-action SQLコマンドとしてCREATE DATABASE DEV CLONE PROD;を使用すると、GA_USERSテーブルを持つデータベースのクローンであるDEVが作成されます。
(注意: データベースを作成するにはSYSADMIN権限が必要です)
あるいは、CREATE OR REPLACE TABLE GA_USERS_clone CLONE GA_USERS;でテーブルをクローンすることもできます。
これは、Trunctateを行う前にスナップショットを取得し、これを使用してインクリメンタルロードを比較するのに最適な方法でしょう。
プロセスをさらに一歩進めて、Integrate.io Snowflakeデスティネーション上でTime-Travel + Cloneを組み合わせて、テストDB上のテーブルの履歴スナップショットを取得し(ポストアクションSQL)、一方でDev上でクローンを作成します(Pre-action SQL)。
これにより、データ自体を複製することなくテーブルの複数のコピーが作成されます。また、実際にデータを複製するために追加のコストと時間をかけずに、複数のユーザーグループで使用できるようにデータを素早く作成する機能も提供しています。
まとめ
Zero copy cloningと Time Travel は、データウェアハウスをシンプルにしつつ機敏さを保つ、真に注目すべき機能です。これらの機能やその他の機能は、Integrate.ioの中から活用することができます。SnowflakeのIntegrate.ioとのネイティブ統合の詳細について確認したい方は、オンラインデモを予約してください。