ストリーム、タスク、マテリアライズドビューと比較した動的テーブル¶
ストリームやタスクと同様に、動的テーブルはパイプラインでデータを変換する方法を提供します。
ストリームおよびタスクと比較した動的テーブル¶
動的テーブルはタスクと類似した目的を果たしますが、重要な違いがあります。
ストリームおよびタスク |
動的テーブル |
---|---|
タスクは命令型アプローチを使用します。手続き型コードを記述してベーステーブルからデータを変換します。 |
動的テーブルは宣言型アプローチを使用します。表示する結果を指定するクエリを記述し、クエリで使用されたベーステーブルからデータを取得して変換します。 |
データを変換するコードの実行スケジュールを定義します。 |
自動リフレッシュプロセスは、リフレッシュを実行するスケジュールを決定します。このプロセスは、指定された鮮度のターゲットレベル(ラグ)を満たすために、これらのリフレッシュをスケジュールします。 |
手続きコードには、非決定性コード、ストアドプロシージャ、その他のタスクの呼び出しが含まれます。手続きコードには、 UDFs や外部関数の呼び出しを含めることができます。 |
動的テーブルの SELECT ステートメントには、結合、集計、ウィンドウ関数、その他の SQL 関数や構文を含めることができますが、ステートメントにストアドプロシージャやタスクの呼び出しを含めることはできません。現時点では、 SELECT ステートメントに外部関数の呼び出しを含めることはできません。 この制限は、動的テーブルのリフレッシュ方法によるものです。データをリフレッシュするために、自動プロセスは動的テーブルの SELECT ステートメントを分析し、データをリフレッシュする最適な方法を決定します。クエリの型によっては、自動プロセスではこれを判断できません。 SELECT ステートメントに関する制限の完全なリストについては、 増分リフレッシュでサポートされるクエリ および 一般的な制限 をご参照ください。 |
タスクはストリームを使用して、ターゲットテーブルのデータを増分リフレッシュできます。これらのタスクを定期的に実行するようにスケジュールできます。 |
自動リフレッシュプロセスは、定期的に動的テーブルの増分リフレッシュを実行します。このプロセスは、指定したデータのターゲット「鮮度」に基づいてスケジュールを決定します。 |
動的テーブルとマテリアライズドビューの比較¶
動的テーブルとマテリアライズドビューは、どちらもクエリの結果を 具体化 する点で類似しています。しかし、重要な違いがあります。
マテリアライズドビュー |
動的テーブル |
---|---|
マテリアライズドビューは、クエリパフォーマンスを透過的に向上させるように設計されています。 たとえば、ベーステーブルをクエリする場合、Snowflakeのクエリオプティマイザーはクエリを 自動的 に書き換えて、代わりにマテリアライズドビューをクエリすることができます。 |
動的テーブルは、マルチレベルのデータパイプラインを構築するために設計されています。 動的テーブルはクエリパフォーマンスを向上させますが、Snowflakeのクエリオプティマイザーは、動的テーブルを使用するようにクエリを 自動的に書き換えることはありません。クエリで動的テーブルを指定した場合にのみ、動的テーブルがクエリで使用されます。 |
マテリアライズドビューは単一のベーステーブルのみを使用できます。マテリアライズドビューは、複雑なクエリ(つまり、結合やネストされたビューを含むクエリ)に基づくことはできません。 |
動的テーブルは、結合や和集合を含んでいる、複雑なクエリに基づくことができます。 |
マテリアライズドビューを介してアクセスされるデータは、 常に最新 です。DML 操作によってベーステーブルのデータが変更される場合、Snowflakeはマテリアライズドビューを更新するか、ベーステーブルから更新されたデータを使用します。 |
データは、動的テーブルのターゲットラグタイムまで最新です。 リフレッシュロジックを含む、マテリアライズドビューのメンテナンスは、リフレッシュのためのコンピューティングと合わせて、別のコンピューティングサービスによって自動的に管理されます。通常は追加の費用が必要です。 |