Business Intelligence/26. Juli 2023 -Aktualisiert am 21. Dezember 2023

Materialisierte Views in BigQuery

3 illustrierte Tabellen, die von links nach rechts immer deutlicher zu sehen sind.

Materialisierte Ansichten bzw. Views sind eine neue Funktion, die seit kurzem in BigQuery verfügbar ist. Ein View stellt eine virtuelle Tabelle dar, die mit einer SQL-Anweisung erstellt wird. Views haben den Vorteil, dass sie wie reguläre Tabellen abgefragt werden können, aber so komplex wie nötig sind. Sie können alle Arten von Verknüpfungen, Subqueries oder andere SQL-Anweisungen enthalten.

Ein großer Nachteil der Verwendung von Views ist jedoch, dass die SQL-Abfrage jedes Mal ausgeführt wird, wenn der View abgefragt wird. Je nach Größe der zugrunde liegenden Tabellen und der Anzahl der View-Aufrufe kann sich dies als ressourcen- und zeitaufwändig erweisen. Um hier entgegenzuwirken, bietet BigQuery jetzt die Möglichkeit, materialisierte Views zu erstellen. Wie der Name schon sagt, handelt es sich dabei um Views, in denen die Abfrageergebnisse bestehen bleiben.

Um einen materialisierten View zu erstellen, kann das BigQuery Web-Interface verwendet werden. Der Code für die Erstellung lautet:

1CREATE MATERIALIZED VIEW project.dataset.view 
2AS SELECT3FROM project.dataset.table
mysql

Zurzeit unterliegen materialisierte Views einer Reihe von Einschränkungen

  1. Abfragen in der View können keine Joins oder Unnests enthalten
  2. Die Views müssen sich in demselben Dataset wie die abgefragte Tabelle befinden
  3. Außerdem können nicht mehr als 20 materialisierte Views auf derselben Tabelle basieren

Weitere Operationen, die noch nicht implementiert sind, sind das Laden von Daten in oder das Exportieren von Daten aus ihnen.

Trotz dieser Einschränkungen können sich materialisierte Views in bestimmten Szenarien als sehr vorteilhaft erweisen. Ein solches Beispiel sind Abfragen, die eine Aggregation der Daten beinhalten. In diesem Fall kann eine bessere Leistung erreicht werden, indem die Ergebnisse persistiert werden. BigQuery garantiert, dass der materialisierte View stets aktuelle Ergebnisse liefert, da Mechanismen zur Datenaktualisierung implementiert sind, die alle Änderungen an der Originaltabelle widerspiegeln.

Auch wenn die Abfrage Aggregationen zusätzlich zu Joins verwendet, können materialisierte Views nützlich sein. In diesem Fall lohnt es sich, zu prüfen, ob die Reihenfolge der Operationen geändert werden kann. Die Verlagerung von Aggregationen in materialisierte Views und die spätere Verknüpfung kann zu einer erheblichen Verbesserung der Abfragegeschwindigkeit führen.

Betrachten wir zum Beispiel die folgende Abfrage

Hier wird die erste Gruppe von Aggregationen innerhalb der materialisierten Ansicht durchgeführt. Anschließend wird die Ansicht für die Verknüpfung mit der Ländertabelle verwendet, und die finalen Durchschnittswerte werden berechnet. Bei diesem Ansatz bleiben die Summen erhalten, und bei jeder Ausführung der Abfrage werden nur die Durchschnittswerte berechnet.

1CREATE MATERIALIZED VIEW project.dataset.view
2AS SELECT country_code, category, SUM(cost) as category_cost
3FROM table
4GROUP BY country_code, category;
5
6SELECT country_name, AVG(category_cost) as country_cost
7FROM countries as c JOIN view as v ON c.country_code = v.country_code
8GROUP BY country_name;
mysql