用途
view: my_view {
derived_table: {
materialized_view: yes
...
}
}
|
階層
materialized_view |
デフォルト値
no
許可
ブール値(yes または no)
特別なルール
materialized_view は特定の言語でのみサポートされています |
定義
マテリアライズド ビューは高度な機能です。ダイアレクトによっては、マテリアル化ビューが膨大なリソースを消費することがあるため、ダイアレクトへのマテリアル化ビューの導入がどういったものか十分理解しておくことが重要です。ダイアレクトの動作や、マテリアル化ビューでのダイアレクトのデータ更新頻度の情報については、ダイアレクトのドキュメンテーションを参照してください。
マテリアル化ビューでは、データベースの機能を利用して、Looker プロジェクトで派生テーブルを永続化させることができます。データベース言語がマテリアライズド ビューをサポートし、Looker の接続が永続的な派生テーブルオプションを有効にして構成されている場合は、派生テーブルの materialized_view: yes を指定してマテリアライズド ビューを作成できます。マテリアライズド ビューは、ネイティブ派生テーブルと SQL ベースの派生テーブルの両方でサポートされています。
マテリアライズド ビューは永続的な派生テーブル(PDT)と同様に、データベースのスクラッチ スキーマにテーブルとして保存されるクエリ結果です。PDTとマテリアライズド ビューの主な違いは、テーブルの更新方法です。
- PDT の場合、永続性戦略は Looker で定義され、永続性は Looker で管理されます。
- マテリアライズド ビューでは、データベースがテーブル内のデータの管理と更新を担当します。
このため、マテリアル化ビューの機能を使用するには、ダイアレクトとその機能に関する高度な知識が必要になります。ほとんどの場合、データベースでは、マテリアル化ビューでクエリされるテーブル内に新規データが検出されるたびに、マテリアル化ビューが更新されます。マテリアライズド ビューは、リアルタイムデータが必要なシナリオに最適です。
materialized_view: yes ステートメントを含む派生テーブルに データグループ、sql_trigger_value、または persist_for パラメータも含まれている場合、materialized_view: yes ステートメントが優先されます。
例
この e_flights_pdt 派生テーブルには materialized_view: yes ステートメントがあるため、データベースのスクラッチ スキーマにマテリアライズド ビューが作成されます。
view: e_flights_pdt {
derived_table: {
materialized_view: yes
explore_source: ontime {
column: flight_num {}
column: carrier {}
column: arr_date {}
}
}
dimension: flight_num {}
dimension: carrier {}
dimension: arr_date {
type: date
}
}
Looker がマテリアライズド ビューを作成する場合
Looker は、他の PDT と同じ方法でマテリアライズド ビューを生成します。マテリアライズド ビューを作成して Development Mode でクエリすると、Looker はマテリアライズド ビューの開発バージョンを作成します。このバージョンは本番環境でも使用できます。詳しくは、Looker の派生テーブルのドキュメント ページの Development Mode の永続テーブルをご覧ください。
それ以外の場合、マテリアライズド ビューは、関連付けられた派生テーブルの LookML が materialized_view: yes で本番環境にデプロイされた後、Looker リジェネレータの次のサイクルで作成されます。
マテリアライズド ビューの安定したデータベース ビュー
Looker は、マテリアライズド ビューごとに安定したデータベース ビューを自動的に作成します。安定したデータベース ビューはデータベース自体に作成されるため、Looker の外部からクエリできます。これは、publish_as_db_view パラメータで使用されるのと同じ安定したビュー機能です。
Looker は、マテリアライズド ビューの LookML が本番環境にデプロイされた後、Looker リジェネレータの次のサイクルで安定したビューを作成します。安定したデータベース ビューが公開されると、そのビューに直接クエリを実行できます。
see_pdts 権限を持つ管理者またはユーザーは、Looker の [管理] セクションの [永続的な派生テーブル] ページの [PDT の詳細] モーダルで、安定したデータベース ビュー名を取得できます。
マテリアライズド ビューを直接クエリするには、テーブル名の前にスクラッチ スキーマ名を追加します。たとえば、安定したデータベース ビュー名が NN_e_redflight_e_redflight_publish_as_db で、スクラッチ スキーマ名が tmp の場合、次のようなコマンドを使用して安定したデータベース ビューをクエリできます。
SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db
マテリアライズド ビューの要件
Looker プロジェクトでマテリアライズド ビューを使用するには、次のものが必要です。
- マテリアライズド ビューをサポートするデータベース ダイアレクト。マテリアライズド ビューをサポートする言語の一覧については、このページのマテリアライズド ビューの言語サポートをご覧ください。
- データベースのスクラッチスキーマ。これは、データベース上のどのスキーマでもかまいませんが、この目的専用の新しいスキーマを作成することをお勧めします。データベース管理者は、Lookerデータベースユーザーの書き込みを許可するスキーマを構成する必要があります。
- 永続的な派生テーブル オプションを有効にして構成された Looker 接続。通常、この設定は Looker の初回構成の際に行いますが(データベース言語に関する手順については Looker 言語のドキュメント ページを参照)、初回構成後に接続に対して PDT を有効にすることもできます。
- データベースの一時スキーマに対する
CREATE TABLE権限を持つ Looker 接続。これは、PDT の作成に必要な権限と同じです。また、マテリアライズド ビューの安定したデータベース ビューを作成するには、接続にデータベースの一時スキーマに対するCREATE VIEW権限が必要です。接続をテストして、接続に次の権限があることを確認できます。- 接続で PDT が有効になっていて、接続に
CREATE TABLE権限がある場合、接続テストはCan use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db"などの結果を返します。 - 接続で安定したビューが許可され、接続に
CREATE VIEW権限がある場合、接続テストはCan use stable views in temp schema "docsexamples_scratch" in database "flightstats"などの結果を返します。
- 接続で PDT が有効になっていて、接続に
マテリアライズド ビューに関する重要な考慮事項
マテリアライズド ビューでは、Looker はテーブル内のデータの管理と更新を行いません。このため、マテリアル化ビューの機能を使用するには、ダイアレクトとその機能に関する高度な知識が必要になります。マテリアライズド ビューを作成する際は、次の点を考慮してください。
- 一部のダイアレクトには、デフォルトの最大更新間隔や結合のサポートなど、マテリアライズド ビューに関する制限があります。Looker では、マテリアライズド ビューの言語固有の機能に関する LookML エラーは生成されません。代わりに、マテリアライズド ビューのビルドに失敗すると、Looker は PDT イベントログのイベントとして、またはマテリアライズド ビューのクエリを試行した場合はランタイム エラーとして、エラーを生成します。マテリアライズド ビューの制限事項については、ダイアレクトのドキュメントをご覧ください。
- 一部の言語では、マテリアライズド ビューがクエリされるときにクエリの鮮度がチェックされるため、クエリ結果の取得にわずかな遅延が生じる可能性があります。ダイアレクトのドキュメントで、ダイアレクトにこのケースが当てはまるかどうかを確認してください。
- 一部の言語では、実体化されたビューを完全に再構築するのではなく、増分更新を試みます。詳細については、ダイアレクトのドキュメントをご覧ください。
- マテリアライズド ビューがデータベースから削除されたベーステーブルを使用している場合、マテリアライズド ビューのクエリを実行できず、新しいバージョンのビルドが失敗する可能性があります。
materialized_view: yesステートメントを含む派生テーブルに データグループ、sql_trigger_value、またはpersist_forパラメータも含まれている場合、materialized_view: yesステートメントが優先されます。- マテリアライズド ビューは、パーティショニング、ソートキー、インデックスなど、派生テーブルで一般的にサポートされているのと同じ方言固有のパラメータをサポートします。
- カスケード派生テーブルの場合、マテリアライズド ビューは Looker PDT に依存できますが、次の点に注意してください。
materialized_view: yesを使用する派生テーブルの定義で、persist_for永続性戦略を持つ派生テーブルを使用することはできません。マテリアライズド ビューの場合、マテリアライズド ビューのソーステーブルは常にデータベースに存在する必要があります。persist_for派生テーブルは、persist_forパラメータで指定された時間が経過するとデータベースから削除されるため、データベースに存在することは保証されません。- PDT は一意の名前で再構築されるため、実体化されたビューの定義で PDT が使用されている場合、PDT が再構築されるたびに、実体化されたビューは PDT の新しいバージョンを指すように更新されます。つまり、依存関係が完全に再構築されると、マテリアライズド ビューは基本的にゼロから再構築されるため、パフォーマンスに影響する可能性があります。この場合、追記専用のベーステーブルを参照するか、Looker を使用して定義された増分 PDT を参照することをおすすめします。
マテリアライズド ビューの言語サポート
派生テーブルをマテリアライズド ビューに変換できるかどうかは、Looker 接続で使用されているデータベース言語によって異なります。現在の Looker リリースでは、次の言語でマテリアライズド ビューがサポートされています。
| 方言 | サポート対象 |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13+ | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |