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 が 本番環境にデプロイされた後、Looker リジェネレータの次のサイクルで作成されます。materialized_view: yes

マテリアライズド ビューの安定したデータベース ビュー

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 エラーを生成しません。代わりに、マテリアライズド ビューのビルドに失敗した場合、PDT イベントログのイベントとして、またはマテリアライズド ビューのクエリを試みた場合はランタイム エラーとして、Looker がエラーを生成します。マテリアライズド ビューの制限については、ダイアレクトのドキュメントをご覧ください。
  • 一部の言語では、マテリアライズド ビューのクエリ時にクエリの鮮度がチェックされるため、クエリ結果の取得にわずかな遅延が生じる可能性があります。お使いのダイアレクトでこの問題が発生するかどうかについては、ダイアレクトのドキュメントをご覧ください。
  • 一部の言語では、マテリアライズド ビューを完全に再構築するのではなく、増分更新しようとします。詳しくは、ダイアレクトのドキュメントをご覧ください。
  • マテリアライズド ビューが、データベースから削除されたベーステーブルを使用している場合、マテリアライズド ビューのクエリを実行できない可能性があり、新しいバージョンのビルドに失敗します。
  • 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