SnowflakeにS3などの外部ステージからデータをロードした際、
JSONとかの形式だと見づらいので見やすくするワンクッション入れることがあると思います。
↑ 見づらい例です。
表形式で見やすくするのに
- ビュー
- マテリアライズドビュー(マテビュー)
- ダイナミックテーブル
と3つ簡単に取りうる策があるかと思います。
だいたい ↑ にまとまってるんですが。
実際試してみたことも踏まえて自分なりにまとめなおしてみます。
ビュー
実データは持たないので、ビュー定義のSELECT文がビュー参照の都度走ることになります。
Good:ストレージ料金がかからない
Bad:Selectがちょっと重たくなる
マテリアライズドビュー
ビューとは違って実際にテーブルのようにデータの実体ができます。
そういう意味ではビューで書いたGoodとBadは逆になる感じです。
Good:SelectがViewより軽い
Bad:ストレージ料金がかかる
ダイナミックテーブル
マテリアライズドビューと同様、実際にデータの実体ができます。
GoodとBadはマテビューと同じで、プラスアルファでマテビューとの差異があります。
それぞれの制限を別枠でまとめます。
マテビューとダイナミックテーブルの制限
公式ドキュメントをちゃんと読むのがおススメではありますが、私が注目したポイントのみ記載します。
マテビューの制限
マテビューは複数テーブルの結合などはできない。単一テーブルのみ。
単一テーブルでも自分自身のテーブルを再度使った結合もダメ。
Window関数も使えない。
実際この制限に引っかかって、マテビューをあきらめてダイナミックテーブルにしたことがあります。
ダイナミックテーブルの制限
ディレクトリテーブル、Icebergテーブル、外部テーブル、ストリーム、マテリアライズドビューは定義に含められない。
マテビューとダイナミックテーブルのコスト面の比較
マテビューはサーバーレスでデータの更新がされます。
サーバーレスは1秒単位の課金です。
ダイナミックテーブルは自アカウント内のウェアハウスが動いてデータの更新がされます。
ウェアハウスは1秒で終わっても60秒は課金対象になります。(61秒以上は秒単位)
コスト的にはマテリアライズドビューの方が安いことが多いんじゃないでしょうか。
まとめ
とりあえず作るならビュー(データ量が少ないとか)
↓
ちゃんと実データとして持ちたいならマテビュー
↓
マテビュー制約にひっかかってダメならダイナミックテーブル
完全に個人的感想です。
異論は認める!のでコメントください。