materialisierte Ansicht

Nutzung

view: my_view {
derived_table: {
materialized_view: Ja
...
}
}
Hierarchie
materialized_view
Standardwert
no

Akzeptiert
Ein boolescher Wert (yes oder no)

Sonderregeln
materialized_view wird nur für bestimmte Dialekte unterstützt

Definition

Die Funktion für eine materialisierte Ansicht ist eine erweiterte Funktion. Je nach Dialekt kann eine materialisierte Ansicht große Ressourcen verbrauchen. Daher ist es wichtig, dass Sie die Implementierung von materialisierten Ansichten in Ihrem Dialekt verstehen. In der Dokumentation Ihres Dialekts finden Sie Informationen zum Verhalten Ihres Dialekts und zur Häufigkeit, mit der der Dialekt Daten für materialisierte Ansichten aktualisiert.

Materialisierte Ansichten ermöglichen es Ihnen, die Funktionen Ihrer Datenbank zu nutzen, um abgeleitete Tabellen in Ihrem Looker-Projekt zu speichern. Wenn Ihr Datenbankdialekt materialisierte Ansichten unterstützt und Ihre Looker-Verbindung mit aktivierter Option Persistent abgeleitete Tabellen konfiguriert ist, können Sie eine materialisierte Ansicht erstellen, indem Sie materialized_view: yes für eine abgeleitete Tabelle angeben. Materialisierte Ansichten werden sowohl für native abgeleitete Tabellen als auch für SQL-basierte abgeleitete Tabellen unterstützt.

Ähnlich wie bei einer persistenten abgeleiteten Tabelle (PDT) ist eine materialisierte Ansicht ein Abfrageergebnis, das als Tabelle im Scratch-Schema Ihrer Datenbank gespeichert wird. Der Hauptunterschied zwischen einer PDT und einer materialisierten Ansicht besteht in der Aktualisierung der Tabellen:

  • Bei PDTs wird die Persistenzstrategie in Looker definiert und die Persistenz wird von Looker verwaltet.
  • Bei materialisierten Ansichten ist die Datenbank für die Verwaltung und Aktualisierung der Daten in der Tabelle zuständig.

Deshalb benötigen Sie für die Funktionalität der materialisierten Ansicht fortgeschrittenes Wissen um Ihren Dialekt und seine Funktionen. In den meisten Fällen aktualisiert Ihre Datenbank die materialisierte Ansicht jedes Mal, wenn die Datenbank neue Daten in den Tabellen erkennt, die von der materialisierte Ansicht abgefragt werden. Materialisierte Ansichten eignen sich ideal für Szenarien, die Echtzeitdaten erfordern.

Wenn eine abgeleitete Tabelle mit einer materialized_view: yes-Anweisung auch einen datagroup-, sql_trigger_value- oder persist_for-Parameter hat, hat die materialized_view: yes-Anweisung Vorrang.

Beispiel

Diese abgeleitete e_flights_pdt-Tabelle hat die Anweisung materialized_view: yes, sodass im Scratch-Schema der Datenbank eine materialisierte Ansicht erstellt wird:


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
  }
}

Wenn Looker die materialisierte Ansicht erstellt

Looker generiert materialisierte Ansichten auf dieselbe Weise wie andere PDTs. Wenn Sie die materialisierte Ansicht erstellen und im Entwicklungsmodus abfragen, erstellt Looker eine Entwicklungsversion der materialisierten Ansicht, die auch für die Produktion verwendet werden kann. Weitere Informationen finden Sie auf der Dokumentationsseite Abgeleitete Tabellen in Looker im Abschnitt Persistenz Tabellen im Entwicklungsmodus.

Andernfalls wird die materialisierte Ansicht während des nächsten Zyklus des Looker-Regenerators erstellt, nachdem LookML der abgeleiteten Tabelle mit materialized_view: yes in der Produktion bereitgestellt wurde.

Stabile Datenbankansichten für materialisierte Ansichten

Looker erstellt automatisch für jede materialisierte Ansicht eine stabile Datenbankansicht. Die stabile Datenbankansicht wird in der Datenbank selbst erstellt, damit sie außerhalb von Looker abgefragt werden kann. Dies ist dieselbe stabile Ansichtsfunktion, die auch für den Parameter publish_as_db_view verwendet wird.

Looker erstellt die stabile Ansicht während des nächsten Zyklus des Looker-Regenerators, nachdem LookML in der materialisierten Ansicht für die Produktion bereitgestellt wurde. Sobald die stabile Datenbankansicht veröffentlicht ist, können Sie sie direkt abfragen.

Administratoren oder Nutzer mit der Berechtigung see_pdts können den stabilen Namen der Datenbankansicht auf der Seite Persistent abgeleitete Tabellen im Abschnitt Admin von Looker abrufen. Klicken Sie auf das Dreipunkt-Menü und wählen Sie PDT-Details aus:

Wenn Sie eine materialisierte Ansicht direkt abfragen möchten, fügen Sie einfach den Namen des Scratch-Schemas vor dem Tabellennamen ein. Wenn der Name der stabilen Datenbankansicht beispielsweise NN_e_redflight_e_redflight_publish_as_db und der Name des Scratch-Schemas tmp lautet, können Sie die stabile Datenbankansicht mit einem Befehl wie diesem abfragen:


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

Anforderungen für materialisierte Ansichten

Sie benötigen Folgendes, um materialisierte Ansichten in Ihrem Looker-Projekt zu verwenden:

  • Ein Datenbankdialekt, der materialisierte Ansichten unterstützt. Eine Liste der Dialekte, die materialisierte Ansichten unterstützen, finden Sie im Abschnitt Dialektunterstützung für materialisierte Ansichten.
  • Ein Scratch-Schema in der Datenbank. Dabei kann es sich um ein beliebiges Schema in Ihrer Datenbank handeln. Wir empfehlen aber, ein neues Schema zu erstellen, das nur zu diesem Zweck eingesetzt wird. Der Datenbankadministrator muss das Schema mit Schreibberechtigung für den Looker-Datenbankbenutzer konfigurieren.
  • Eine Looker-Verbindung, für die die Option Persistent abgeleitete Tabellen konfiguriert ist. Dies wird in der Regel bei der Erstkonfiguration Ihrer Looker-Verbindung festgelegt. Eine Anleitung zum Datenbankdialekt finden Sie auf der Seite Looker-Dialekte. Sie können PDTs aber auch nach der Ersteinrichtung für Ihre Verbindung aktivieren.
  • Eine Looker-Verbindung mit der Berechtigung CREATE TABLE für das temporäre Schema in Ihrer Datenbank. Dies ist dieselbe Berechtigung, die zum Erstellen von PDT erforderlich ist. Außerdem muss die Verbindung über CREATE VIEW-Berechtigungen für das temporäre Schema in Ihrer Datenbank verfügen, um die stabile Datenbankansicht für die materialisierte Ansicht zu erstellen. Sie können die Verbindung testen, um zu prüfen, ob die Verbindung diese Berechtigungen hat:
    • Wenn PDTs für die Verbindung aktiviert sind und die Verbindung die Berechtigung CREATE TABLE hat, gibt der Verbindungstest ein Ergebnis wie Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db" zurück.
    • Wenn die Verbindung stabile Ansichten ermöglicht und die Verbindung die Berechtigung CREATE VIEW hat, gibt der Verbindungstest ein Ergebnis wie Can use stable views in temp schema "docsexamples_scratch" in database "flightstats" zurück.

Wichtige Überlegungen zu materialisierten Ansichten

Bei materialisierten Ansichten werden die Daten in der Tabelle nicht von Looker verwaltet und aktualisiert. Deshalb benötigen Sie für die Funktionalität der materialisierten Ansicht fortgeschrittenes Wissen um Ihren Dialekt und seine Funktionen. Beachten Sie beim Erstellen einer materialisierten Ansicht Folgendes:

  • Einige Dialekte haben Einschränkungen für materialisierte Ansichten, z. B. maximale maximale Aktualisierungsintervalle und Unterstützung für Joins. Looker generiert keine LookML-Fehler im Hinblick auf Dialektfunktionen in materialisierten Ansichten. Stattdessen generiert Looker einen Fehler, wenn die materialisierte Ansicht nicht erstellt werden kann, entweder als Ereignis im PDT-Ereignisprotokoll oder als Laufzeitfehler, wenn Sie versuchen, die materialisierte Ansicht abzufragen. Informationen zu Einschränkungen für materialisierte Ansichten finden Sie in der Dokumentation Ihres Dialekts.
  • Einige Dialekte prüfen bei der Abfrage von materialisierten Ansichten auf die Aktualität von Abfragen. Dies kann zu einer kleinen Verzögerung beim Abrufen von Abfrageergebnissen führen. Sehen Sie in der Dokumentation Ihres Dialekts nach, ob dies bei Ihrem Dialekt der Fall ist.
  • Einige Dialekte versuchen, die materialisierte Ansicht inkrementell zu aktualisieren, anstatt sie vollständig neu zu erstellen. Weitere Informationen finden Sie in der Dokumentation Ihres Dialekts.
  • Wenn die materialisierte Ansicht eine Basistabelle verwendet, die aus der Datenbank gelöscht wurde, können Sie die materialisierte Ansicht möglicherweise nicht abfragen und neue Versionen werden nicht erstellt.
  • Wenn eine abgeleitete Tabelle mit einer materialized_view: yes-Anweisung auch einen datagroup-, sql_trigger_value- oder persist_for-Parameter hat, hat die materialized_view: yes-Anweisung Vorrang.
  • Materialisierte Ansichten unterstützen dieselben dialektischen Parameter, die von abgeleiteten Tabellen im Allgemeinen unterstützt werden, z. B. Partitionierung, Sortierschlüssel und Indexe.
  • Bei kaskadierten abgeleiteten Tabellen können materialisierte Ansichten von Looker-PDTs abhängig sein. Es gelten jedoch die folgenden Einschränkungen:
    • Sie können keine abgeleitete Tabelle mit der Persistenzstrategie persist_for in der Definition einer abgeleiteten Tabelle mit materialized_view: yes verwenden. Bei materialisierten Ansichten muss die Quelltabelle für eine materialisierte Ansicht immer in der Datenbank vorhanden sein. persist_for abgeleitete Tabellen werden nach dem im Parameter persist_for angegebenen Zeitraum aus Ihrer Datenbank gelöscht. Sie sind also nicht zwangsläufig in der Datenbank vorhanden.
    • PDTs werden mit einem eindeutigen Namen neu erstellt. Wenn also eine materialisierte Ansicht ein PDT in seiner Definition verwendet, wird die materialisierte Ansicht jedes Mal aktualisiert, wenn sie auf die neue Version des PDT verweist. Das bedeutet, dass die materialisierte Ansicht im Wesentlichen neu erstellt wird, wenn eine Abhängigkeit vollständig neu erstellt wird, was sich auf die Leistung auswirken kann. In diesem Fall ist es besser, auf eine Basistabelle zu verweisen, die nur angehängt werden kann, oder auf eine inkrementelle PDT, die mit Looker definiert ist.

Dialektunterstützung für materialisierte Ansichten

Ob eine abgeleitete Tabelle in eine materialisierte Ansicht umgewandelt werden kann, hängt vom Datenbankdialekt ab, den Ihre Looker-Verbindung verwendet. In der aktuellen Looker-Version unterstützen die folgenden Dialekte materialisierte Ansichten: