Snowflakeさわってみた。Dynamic Table試してみた。
分析屋の下滝です。
Snowflakeをさわってみよう、の12回目です。
今回は、6月にプレビューになったダイナミックテーブル(Dynamic Table)を試してみます。
ダイナミックテーブルとは
詳しくは、以下の公式ドキュメントを参考にしてください。
以下、ダイナミックテーブルの概要を公式から引用します。
本記事では、細かい背景は気にせず、とりあえずどういう機能なのか使ってみます。
以下のようなProductテーブル(ベーステーブル)があるとします。
このテーブルに対するダイナミックテーブルを定義してみます。CREATE DYNAMIC TABLEを使います。
CREATE OR REPLACE DYNAMIC TABLE product_dynamic
TARGET_LAG = '1 minutes'
WAREHOUSE = "テストウェアハウス"
AS
SELECT id, name FROM product where price >= 2000;
TARGET_LAGは「ダイナミックテーブルの内容がベーステーブルの更新に遅れる最大時間を指定する。」を意味します。例では最小時間の1分を指定しています。
WAREHOUSEは、ダイナミックテーブルがリフレッシュされる際に使われるウェアハウスを指定します。
ASでは、ダイナミックテーブルの結果となるクエリを指定します。ここでは、productテーブルからpriceが2000以上のものを抽出しています。
ダイナミックテーブルに対するクエリを試します。
select * from product_dynamic;
結果は以下となり、意図した結果となっています。
では、次に、productに以下の行を追加したときに、product_dynamicの結果も更新されているのか確認します。
insert into product VALUES(3, 'ccc', 3000);
Productテーブルの中身は以下になります。
product_dynamicの結果は以下となりました。先程追加したレコードが表示されており、意図した結果となっています。
基本的な使い方は以上となります。
補足として、あるダイナミックテーブルが他のダイナミックテーブルをベースとして使うこともできるそうです。詳しくは公式ドキュメントを参照してください。
マテリアライズドビューとの違い
他に気になる点としては、マテリアライズドビューとの違いです。公式ドキュメントでは、比較として次のように説明がされています。引用します。
===================
【違いその1】
マテリアライズドビュー
マテリアライズドビューは、クエリのパフォーマンスを透過的に向上させるように設計されています。
例えば、ベーステーブルをクエリする場合、Snowflakeのクエリオプティマイザは、代わりにマテリアライズドビューをクエリするようにクエリを自動的に書き換えることができます。
ダイナミックテーブル
ダイナミックテーブルは、データパイプラインでストリーミングデータを変換するために設計されています。
ダイナミックテーブルはクエリのパフォーマンスを向上させますが、Snowflakeのクエリオプティマイザはダイナミックテーブルを使用するように自動的にクエリを書き換えることはありません。クエリでダイナミックテーブルを指定した場合のみ、クエリでダイナミックテーブルが使用されます。
【違いその2】
マテリアライズドビュー
マテリアライズドビューは単一のベーステーブルしか使用できません。マテリアライズドビューは、複雑なクエリ (結合や入れ子のビューを含むクエリなど) に基づくことはできません。
ダイナミックテーブル
ダイナミックテーブルは、結合や結合を含む複雑なクエリに基づくことができる。
【違いその3】
マテリアライズドビュー
マテリアライズドビューを通してアクセスされるデータは常に最新です。DML 操作によってベーステーブルのデータが変更された場合、Snowflake はマテリアライズドビューを更新するか、ベーステーブルから更新されたデータを使用します。
ダイナミックテーブル
データは、ダイナミックテーブルのターゲットラグタイムまでのものです。
===================
一番の使い道の違いは、二点目の「マテリアライズドビューは単一のベーステーブルしか使用できません。」というマテリアライズドビューの制約の点かもしれません。
どんなときにダイナミックテーブルを使うのか
最後に、では、どんなときにダイナミックテーブルを使うのか、ということに関しても公式ドキュメントで解説がされているので、翻訳して引用します。
今回は以上です。
株式会社分析屋について
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。