materialized_view

用途

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" などの結果を返します。

マテリアライズド ビューに関する重要な考慮事項

マテリアライズド ビューでは、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