Aktualisieren einer materialisierten Ansicht - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aktualisieren einer materialisierten Ansicht

In diesem Thema wird beschrieben, wie die Daten in einer Materialansicht anhand der zugrunde liegenden Tabellen aktualisiert werden.

Wenn Sie eine materialisierte Ansicht erstellen, spiegelt ihr Inhalt den Zustand der zugrundeliegenden Datenbanktabelle(n) zu diesem Zeitpunkt wider. Die Daten in der materialisierten Ansicht bleiben unverändert, auch wenn Anwendungen die Daten in den zugrundeliegenden Tabellen ändern. Um die Daten in der materialisierten Ansicht manuell zu aktualisieren, können Sie jederzeit die Anweisung REFRESH MATERIALIZED VIEW verwenden. Wenn Sie diese Anweisung verwenden, identifiziert Amazon Redshift Änderungen, die in der oder den Basistabellen stattgefunden haben, und wendet diese Änderungen auf die materialisierte Ansicht an.

Amazon Redshift besitzt zwei Strategien zum Aktualisieren einer materialisierten Ansicht:

  • In vielen Fällen kann Amazon Redshift eine inkrementelle Aktualisierung durchführen. Bei einer inkrementellen Aktualisierung kann Amazon Redshift Änderungen an den Daten in den Basistabellen seit der letzten Aktualisierung schnell identifizieren und die Daten in der materialisierten Ansicht aktualisieren. Die inkrementelle Aktualisierung wird für die folgenden SQL-Konstrukte unterstützt, die in der Abfrage beim Definieren der materialisierten Ansicht verwendet werden:

    • Konstrukte mit den Klauseln SELECT, FROM, [INNER] JOIN, WHERE, GROUP BY oder HAVING.

    • Konstrukte mit Aggregationen, wie SUM, MIN, MAX, AVG und COUNT.

    • Die meisten integrierten SQL-Funktionen, insbesondere diejenigen, die unveränderlich sind, erzeugen bei den gleichen Eingabeargumenten immer die gleiche Ausgabe.

    Die inkrementelle Aktualisierung wird auch für eine materialisierte Ansicht unterstützt, die auf einer Datashare-Tabelle basiert.

  • Wenn eine inkrementelle Aktualisierung nicht möglich ist, führt Amazon Redshift eine vollständige Aktualisierung durch. Eine Vollständige Aktualisierung führt die zugrundeliegende SQL-Anweisung erneut aus und ersetzt alle Daten in der materialisierten Ansicht.

  • Amazon Redshift wählt automatisch die Aktualisierungsmethode für eine materialisierte Ansicht, abhängig von der SELECT-Abfrage, die zur Definition der materialisierten Ansicht verwendet wurde.

Das Aktualisieren einer materialisierten Ansicht auf einer materialisierten Ansicht ist kein kaskadierender Prozess. Mit anderen Worten, nehmen Sie an, Sie haben eine materialisierte Ansicht A, die von der materialisierten Ansicht B abhängt. In diesem Fall wird beim Aufrufen von REFRESH MATERIALIZED VIEW A A A mit der aktuellen Version von B aktualisiert, auch wenn B dies ist. out-of-date Um A auf den neuesten Stand zu bringen, müssen Sie vor der Aktualisierung von A zunächst B aktualisieren.

Das folgende Beispiel zeigt, wie Sie programmatisch einen Plan für eine vollständige Aktualisierung einer materialisierten Ansicht erstellen können. Um die materialisierte Ansicht v zu aktualisieren, aktualisieren Sie zuerst die materialisierte Ansicht u. Um die materialisierte Ansicht w zu aktualisieren, aktualisieren Sie zuerst die materialisierte Ansicht u und dann die materialisierte Ansicht v.

CREATE TABLE t(a INT); CREATE MATERIALIZED VIEW u AS SELECT * FROM t; CREATE MATERIALIZED VIEW v AS SELECT * FROM u; CREATE MATERIALIZED VIEW w AS SELECT * FROM v; WITH RECURSIVE recursive_deps (mv_tgt, lvl, mv_dep) AS ( SELECT trim(name) as mv_tgt, 0 as lvl, trim(ref_name) as mv_dep FROM stv_mv_deps UNION ALL SELECT R.mv_tgt, R.lvl+1 as lvl, trim(S.ref_name) as mv_dep FROM stv_mv_deps S, recursive_deps R WHERE R.mv_dep = S.name ) SELECT mv_tgt, mv_dep from recursive_deps ORDER BY mv_tgt, lvl DESC; mv_tgt | mv_dep --------+-------- v | u w | u w | v (3 rows)

Das folgende Beispiel zeigt eine informative Meldung, wenn Sie REFRESH MATERIALIZED VIEW für eine materialisierte Ansicht ausführen, die von einer materialisierten Ansicht abhängt. out-of-date

create table a(a int);
create materialized view b as select * from a;
create materialized view c as select * from b;
insert into a values (1);
refresh materialized view c; INFO: Materialized view c is already up to date. However, it depends on another materialized view that is not up to date.
REFRESH MATERIALIZED VIEW b; INFO: Materialized view b was incrementally updated successfully.
REFRESH MATERIALIZED VIEW c; INFO: Materialized view c was incrementally updated successfully.

Beim inkrementellen Aktualisieren von materialisierten Ansichten in Amazon Redshift gelten derzeit folgende Einschränkungen.

Amazon Redshift unterstützt derzeit keine inkrementelle Aktualisierung für materialisierte Ansichten, die mit einer Abfrage mit den folgenden SQL-Elementen definiert sind:

  • OUTER JOIN (RIGHT, LEFT oder FULL).

  • Die Set-Operationen UNION, INTERSECT, EXCEPT und MINUS.

  • Die Aggregatfunktionen MEDIAN, PERCENTILE_CONT, LISTAGG, STDDEV_SAMP, STDDEV_POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE sowie bitweise Aggregatfunktionen.

    Anmerkung

    Die Aggregatfunktionen COUNT, SUM und AVG werden unterstützt.

  • DISTINCT-Aggregatfunktionen, wie DISTINCT COUNT, DISTINCT SUM usw.

  • Fensterfunktionen.

  • Eine Abfrage, die temporäre Tabellen für die Abfrageoptimierung verwendet, z. B. das Optimieren allgemeiner Unterausdrücke.

  • Unterabfragen.

  • Externe Tabellen, die in der Abfrage, die die materialisierte Ansicht definiert, auf die folgenden Formate verweisen.

    • Delta Lake

    • Hudi

    Die inkrementelle Aktualisierung wird für materialisierte Ansichten unterstützt, die in anderen als den oben aufgeführten Formaten definiert wurden. Weitere Informationen finden Sie unter Materialisierte Ansichten externer Data-Lake-Tabellen in Amazon Redshift Spectrum.

Automatisches Aktualisieren einer materialisierten Ansicht

Amazon Redshift kann materialisierte Ansichten automatisch mit up-to-date Daten aus seinen Basistabellen aktualisieren, wenn materialisierte Ansichten mit der Option Autorefresh erstellt oder geändert werden. Die automatische Aktualisierung durch Amazon Redshift erfolgt nach Änderungen an den Basistabellen so schnell wie möglich.

Um die Aktualisierung der wichtigsten materialisierten Ansichten mit minimalen Auswirkungen auf aktive Workloads in Ihrem Cluster abzuschließen, berücksichtigt Amazon Redshift mehrere Faktoren. Zu diesen Faktoren zählen die aktuelle Systemlast, die für die Aktualisierung erforderlichen Ressourcen, die verfügbaren Clusterressourcen und die Häufigkeit der Verwendung der materialisierten Ansichten.

Amazon Redshift priorisiert Ihre Workloads gegenüber der automatischen Aktualisierung und stoppt möglicherweise die automatische Aktualisierung, um die Leistung des Benutzer-Workloads aufrechtzuerhalten. Dieser Ansatz kann die Aktualisierung einiger materialisierter Ansichten verzögern. In einigen Fällen ist möglicherweise ein deterministisches Aktualisierungsverhalten für Ihre materialisierten Ansichten erforderlich. Wenn dies der Fall ist, sollten Sie die manuelle Aktualisierung verwenden, wie unter REFRESH MATERIALIZED VIEW beschrieben, oder die geplante Aktualisierung mithilfe der Amazon-Redshift Scheduler-API-Vorgänge oder der Konsole.

Sie können die automatische Aktualisierung für materialisierte Ansichten mit CREATE MATERIALIZED VIEW festlegen. Sie können außerdem die AUTO-REFRESH-Klausel verwenden, um materialisierte Ansichten automatisch zu aktualisieren. Weitere Hinweise zur Erstellung von materialisierten Ansichten finden Sie unter CREATE MATERIALIZED VIEW. Sie können die automatische Aktualisierung für eine aktuelle materialisierte Ansicht aktivieren, indem Sie verwenden ALTER MATERIALIZED VIEW.

Beachten Sie Folgendes, wenn Sie materialisierte Ansichten aktualisieren:

  • Sie können eine materialisierte Ansicht weiterhin explizit mit dem Befehl REFRESH MATERIALIZED VIEW aktualisieren, auch wenn Sie die automatische Aktualisierung für die materialisierte Ansicht nicht aktiviert haben.

  • Amazon Redshift aktualisiert materialisierte Ansichten, die für externe Tabellen definiert sind, nicht automatisch.

  • Für den Aktualisierungsstatus können Sie SVL_MV_REFRESH_STATUS überprüfen, was Abfragen aufzeichnet, die vom Benutzer initiiert oder automatisch aktualisiert wurden.

  • Um REFRESH für ausschließlich neu berechnete materialisierte Ansichten auszuführen, benötigen Sie die CREATE-Berechtigung für Schemata. Weitere Informationen finden Sie unter GRANT.