Snowflake動的テーブル(Dynamic Table)とは?(vol.20)

  • 公開日:2024年04月22日(月)

Snowflakeのプレビュー機能には、「動的テーブル(Dynamic Table)」という機能が存在します。
本ブログ記事では、動的テーブルにはどのような機能があるのか、似ている機能との違いや、動的テーブルの活用方法について解説します。

Snowflakeの動的テーブル(Dynamic Table)とは?

Snowflakeの「動的テーブル(Dynamic Table)」は、変換後の状態をあらかじめ定義することで、Snowflake外のソースデータに対して行われた更新を、Snowflake内のテーブルに自動で反映し、データを更新してくれる機能です。

Snowflakeの公式ドキュメントには、「動的テーブル(Dynamic Table)」の説明として次の記載があります。
———————————————————————————–
「動的テーブル(Dynamic Table)」は、宣言型データ変換パイプラインの構成要素です。
「動的テーブル(Dynamic Table)」 は、指定したクエリの結果を具体化します。ターゲットテーブルを別に作成し、そのテーブルのデータを変換および更新するコードを記述する代わりに、ターゲットテーブルを動的テーブルとして定義し、変換を実行する SQL ステートメントを指定することができます。自動プロセスでは、定期的な リフレッシュ によって、具体化された結果が自動的にリフレッシュされます。

「動的テーブル(Dynamic Table)」のコンテンツは特定のクエリによって決定されるため、 DML を使用してコンテンツを変更することはできません。動的テーブルの行を挿入、更新、削除することはありません。自動リフレッシュプロセスは、クエリ結果を動的テーブルに具体化します。
———————————————————————————–
(参照元) https://docs.snowflake.com/ja/user-guide/dynamic-tables-about

以上の内容を踏まえ、「動的テーブル(Dynamic Table)」には以下の特徴があります。

  •  動的テーブルは、データ取得元のターゲットテーブルから、SQLのSELECT句のカラムをテーブルとして定義することで作成される
  • ターゲットテーブルから動的テーブルへ作成するデータを制限する場合は、Where句で指定することが可能
  • 動的テーブル自体に対してデータの挿入/更新/削除を行うことはなく、データ取得元のテーブルからの「データ更新(リフレッシュ)」を「指定した時間(タイムラグ)」内で自動実行してくれる

例えば、次のSalesテーブルのデータを用いて、2022年と2023年のB自動車とC電機のデータに売上高の前年比のカラムを追加した「NewSalesテーブル」を作成する場合、下記SQLを実行することで動的テーブルが作成されます。

Salesテーブル

[年]

[会社]

[売上高]

2023

A食品

150,000

2023

B自動車

1,000,000

2023

C電機

500,000

2023

D化粧品

100,000

2022

A食品

120,000

2022

B自動車

8,000,000

2022

C電機

400,000

2022

D化粧品

120,000

2021

A食品

100,000

2021

B自動車

900,000

2021

C電機

600,000

2021

D化粧品

80,000

NewSalesテーブル:動的テーブル(Dynamic Table)

[年]

[会社]

[売上高]

2023

B自動車

1,000,000

2023

C電機

500,000

2022

B自動車

8,000,000

2022

C電機

400,000

CREATE OR REPLACE DYNAMIC TABLE NewSales
TARGET_LAG = '1 minute' --許容タイムラグ時間
WAREHOUSE = 使用するウェアハウス名
AS
SELECT 
年
, 会社
, 売上高
FROM 
Sales
WHERE
年 IN (2022, 2023)
会社IN (B自動車, C電機)

Salesテーブルへデータが更新されると、TARGET_LAGで指定した‘1分’以内に動的テーブルへデータが更新されるようになります。
上記の動的テーブルでは、Salesテーブルに2022年か2023年のB自動車もしくはC自動車のデータに変更が発生した場合、1分以内に動的テーブルへデータが更新されます。
このように、ソースデータの加工などを行うことなく、動的テーブルへ自動的にデータが更新されるのが、「動的テーブル(Dynamic Table)」の機能になります。

Snowflakeの動的テーブル(Dynamic Table)とマテリアライズドビューの違いとは?

Snowflakeには、前章で解説した「動的テーブル(Dynamic Table)」と似たような機能として、マテリアライズドビューの機能があります。
本章では「動的テーブル(Dynamic Table)」と「マテリアライズドビュー(Materialized View)」の違いについて解説します。

「マテリアライズドビュー(Materialized View)」は、事前に計算された結果を保存する仮想テーブルです。ベーステーブルのデータに基づいて作成され、クエリのパフォーマンスを大幅に向上させることができます。
*「マテリアライズドビュー(Materialized View)」の特徴について知りたい方は、「SnowflakeのViewの種類とそれぞれのViewの特徴とは?(vol.9)」のブログをご覧ください。

「マテリアライズドビュー(Materialized View)」と「動的テーブル(Dynamic Table)」を比べると、次のような違いがあります

  • 「マテリアライズドビュー(Materialized View)」のデータは常に最新のデータとなる
    マテリアライズドビューは、参照元データが更新されると即座に自動でデータが反映されるため、最新のデータを使用することが可能です。
  • 「動的テーブル(Dynamic Table)」はデータは更新までのタイムラグがある
    動的テーブルを定義したSQLに設定されている更新の許容時間内でデータが更新されるため、参照元データが更新された場合、データが置き換わるまでタイムラグがあります。
  • 「マテリアライズドビュー(Materialized View)」は単一のベーステーブルのみ使用可能
    結合やネストされたビューを含んでいる複雑なクエリでは、マテリアライズドビューを作成することができません。
  • 「動的テーブル(Dynamic Table)」は複数テーブルからの結合などの複雑なクエリにも対応している
    動的テーブルは、外部結合など複数テーブルを用いた定義も可能です。ただし、複雑なクエリになると更新時間も増えることを考慮する必要があります。

Snowflakeの動的テーブル(Dynamic Table)の活用方法とは?

本章では、ここまで解説した内容を踏まえて、どのような用途で「動的テーブル(Dynamic Table)」が活用できるのかについて解説します。
「マテリアライズドビュー」との違いに更新時間と複雑なクエリの有無があったように、動的テーブルでは参照元データが更新されてからのタイムラグが許容されることから、リアルタイムではなく外部結合などの複雑なクエリを必要とするデータ加工処理で活用できます。

「Snowflakeの動的テーブル(Dynamic Table)とは?」の章で例示した、Salesテーブルのデータを用いて、2022年と2023年のB自動車とC電機のデータに売上高の前年比のカラムを追加した動的テーブルである「NewSalesテーブル」を作成する場合は次のようになります。

NewSalesテーブル=動的テーブル(Dynamic Table)

[年]

[会社]

[売上高]

[前年比]

2023

B自動車

1,000,000

125%

2023

C電機

500,000

111%

2022

B自動車

8,000,000

89%

2022

C電機

400,000

75%

CREATE OR REPLACE DYNAMIC TABLE NewSales
TARGET_LAG = '1 minute' --許容タイムラグ時間
WAREHOUSE = 使用するウェアハウス名
AS
SELECT 
THISSALES.年
, THISSALES.会社
, THISSALES.売上高
, (THISSALES.売上高 / BEFORESALES.売上高) * 100 AS 前年比
FROM 
Sales THISSALES LEFT OUTER JOIN Sales BEFORESALES
ON THISSALES.年 = (BEFORESALES.年 - 1)
AND THISSALES.会社 = BEFORESALES.会社
WHERE
THISSALES.年 IN (2022, 2023)
AND THISSALES.会社IN (B自動車, C電機)

上記SQLを実行することで動的テーブルが作成されます。
前年比などの参照元テーブルを外部結合して(例えば、前年比の値を加工して)算出するような処理を行い、その結果をBIレポートなどで表示するといった用途で動的テーブルを活用できます。

Snowflakeの動的テーブル(Dynamic Table)にかかるコストとは?

本章では「動的テーブル(Dynamic Table)」で発生するコストについて解説します。
「動的テーブル(Dynamic Table)」は主に次の2点のコストが発生します。

  • 動的テーブルのデータを保存するためのストレージ利用料金
    動的テーブルはストレージにデータを保存するため、データ量に応じたストレージコストが発生します。
  • 動的テーブルのデータ更新時のコンピュート利用料金
    動的テーブルは参照元データが更新された後にデータを更新します。
    更新処理は動的テーブルを作成したSQLに記載されているウェアハウスで行われるため、ウェアハウスのサイズや動作時間に基づいてコンピュートコストが発生します。

*Snowflakeの料金計算の仕組みについて知りたい方は、「Snowflakeの価格体系・料金計算の仕組みを理解し、コストパフォーマンス良く使いこなそう!(vol.2)」のブログをご覧ください。

■まとめ
ここまで、「動的テーブル(Dynamic Table)」の解説や「マテリアライズドビューMaterialized View」との違い、動的テーブルの活用方法、動的テーブルにより発生するコストについて解説してまいりました。
動的テーブルを活用することで、ETLツールを使用することなく、データ加工を行うことが可能になるなどのメリットがあります。弊社では、お客様の用途やデータ連携元の環境構成、今後の活用方法を踏まえて、データ分析基盤の構築やお客様が構築したデータ分析基盤の改修などを実施しております。 
Snowflakeを用いたデータ活用でお悩みの際は、是非、弊社までお声掛けください。 

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