Freigeben über


Materialisierte Sichten

Gilt für: ✅Microsoft Fabric✅Azure Data Explorer

Materialisierte Ansichten machen eine Aggregationsabfrage über eine Quelltabelle oder eine andere materialisierte Ansicht verfügbar.

Materialisierte Ansichten geben immer ein aktuelles Ergebnis der Aggregationsabfrage zurück (immer frisch). Das Abfragen einer materialisierten Ansicht ist leistungsfähiger als das direkte Ausführen der Aggregation über die Quelltabelle.

Hinweis

Warum materialisierte Ansichten verwenden?

Wenn Sie Ressourcen (Datenspeicher, Hintergrund-CPU-Zyklen) für materialisierte Ansichten häufig verwendeter Aggregationen investieren, erhalten Sie die folgenden Vorteile:

  • Leistungsverbesserung: Das Abfragen einer materialisierten Ansicht führt häufig besser aus als das Abfragen der Quelltabelle für die gleichen Aggregationsfunktionen.

  • Aktualität: Eine materialisierte Ansichtsabfrage gibt immer die aktuellsten Ergebnisse zurück, unabhängig davon, wann die Materialisierung zuletzt stattgefunden hat. Die Abfrage kombiniert den materialisierten Teil der Ansicht mit den Datensätzen in der Quelltabelle, die noch nicht materialisiert wurden (teil delta ), wobei immer die aktuellsten Ergebnisse bereitgestellt werden.

  • Kostenreduzierung: Das Abfragen einer materialisierten Ansicht verbraucht weniger Ressourcen als die Aggregation über die Quelltabelle. Die Aufbewahrungsrichtlinie der Quelltabelle kann reduziert werden, wenn nur Aggregation erforderlich ist. Durch diese Einrichtung werden die Kosten für den heißen Cache für die Quelltabelle reduziert.

Beispiele für Anwendungsfälle finden Sie unter "Materialisierte Ansichtsanwendungsfälle".

Funktionsweise von materialisierten Ansichten

Eine materialisierte Ansicht besteht aus zwei Komponenten:

  • Ein materialisierter Teil – eine Tabelle mit aggregierten Datensätzen aus der Quelltabelle, die bereits verarbeitet wurden. Diese Tabelle enthält immer einen einzelnen Datensatz pro Kombination aus Aggregation.
  • Ein Delta – die neu aufgenommenen Datensätze in der Quelltabelle, die noch nicht verarbeitet wurden.

Durch Abfragen der materialisierten Ansicht wird der materialisierte Teil mit dem Deltateil kombiniert, wodurch ein aktuelles Ergebnis der Aggregationsabfrage bereitgestellt wird. Der Offlinematerialisierungsprozess erfasst neue Datensätze aus dem Delta in die materialisierte Tabelle und aktualisiert vorhandene Datensätze. Wenn die Schnittmenge zwischen dem Delta und dem materialisierten Teil groß ist und viele Datensätze Aktualisierungen erfordern, kann dies negative Auswirkungen auf den Materialisierungsprozess haben. Sehen Sie sich die materialisierten Ansichten der Überwachung an, wie Sie solche Situationen behandeln können.

Materialisierte Ansichtenabfragen

Es gibt zwei Möglichkeiten zum Abfragen einer materialisierten Ansicht:

  • Abfrage der gesamten Ansicht: Wenn Sie die materialisierte Ansicht anhand ihres Namens abfragen, ähnlich wie beim Abfragen einer Tabelle, kombiniert die materialisierte Ansichtsabfrage den materialisierten Teil der Ansicht mit den Datensätzen in der Quelltabelle, die noch nicht materialisiert wurden (die delta).

    • Durch Abfragen der materialisierten Ansicht werden immer die aktuellsten Ergebnisse zurückgegeben, basierend auf allen Datensätzen, die in die Quelltabelle aufgenommen wurden. Weitere Informationen zu den materialisierten und nicht materialisierten Teilen in materialisierter Ansicht finden Sie unter materialisierte Ansichten.
    • Diese Option kann nicht optimal ausgeführt werden, da sie während der Abfragezeit materialisiert delta werden muss. Die Leistung in diesem Fall hängt vom Alter der Ansicht und den in der Abfrage angewendeten Filtern ab. Der Abschnitt zur materialisierten Ansichtsabfrageoptimierer enthält mögliche Möglichkeiten, die Abfrageleistung beim Abfragen der gesamten Ansicht zu verbessern.
  • Fragen Sie den materialisierten Teil nur ab: Eine andere Möglichkeit zum Abfragen der Ansicht ist die Verwendung der materialized_view() Funktion. Diese Option unterstützt das Abfragen nur des materialisierten Teils der Ansicht, während die maximale Latenz angegeben wird, die der Benutzer tolerieren möchte.

    • Diese Option ist nicht garantiert, die aktuellsten Datensätze zurückzugeben, aber sie sollte immer performanter sein, als die gesamte Ansicht abzufragen.
    • Diese Funktion ist nützlich für Szenarien, in denen Sie bereit sind, eine gewisse Aktualität für die Leistung zu opfern, z. B. für Telemetriedashboards.

Tipp

Abfragen über den materialisierten Teil werden nur immer besser ausgeführt als das Abfragen der gesamten Ansicht. Verwenden Sie die materialized_view() Funktion immer, wenn sie für Ihren Anwendungsfall anwendbar ist.

  • Materialisierte Ansichten nehmen an clusterübergreifenden oder datenbankübergreifenden Abfragen teil, sind jedoch nicht in Wildcard-Vereinigungen oder Suchvorgängen enthalten.

    • Die folgenden Beispiele enthalten alle materialisierten Ansichten mit dem NamenViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Die folgenden Beispiele enthalten keine Datensätze aus materialisierten Ansichten:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    
  • Materialisierte Ansichten nehmen an Eventhouse- oder datenbankübergreifenden Abfragen teil, sind jedoch nicht in Wildcard-Vereinigungen oder Suchvorgängen enthalten.

    • Die folgenden Beispiele enthalten alle materialisierten Ansichten mit dem NamenViewName:
    cluster("<serviceURL>").database('db').ViewName
    cluster("<serviceURL>").database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Die folgenden Beispiele enthalten keine Datensätze aus materialisierten Ansichten:
    cluster("<serviceURL>").database('db').*
    database('*').View*
    search in (*)
    search * 
    

Materialisierte Ansichtsabfrageoptimierer

Beim Abfragen der gesamten Ansicht wird der materialisierte Teil mit der delta Abfragezeit kombiniert. Dazu gehört das delta Aggregieren und Verknüpfen mit dem materialisierten Teil.

  • Das Abfragen der gesamten Ansicht ist besser, wenn die Abfrage Filter für die Gruppe nach Schlüsseln der materialisierten Ansichtsabfrage enthält. Weitere Tipps zum Erstellen ihrer materialisierten Ansicht finden Sie basierend auf Ihrem Abfragemuster im .create materialized-view Abschnitt "Leistungstipps ".
  • Der Abfrageoptimierer wählt Zusammenfassungs-/Verknüpfungsstrategien aus, die die Abfrageleistung verbessern sollen. Beispielsweise basiert die Entscheidung darüber, ob die Abfrage neu gemischt werden soll, auf der Anzahl der Datensätze teilweisedelta. Die folgenden Clientanforderungseigenschaften bieten eine gewisse Kontrolle über die angewendeten Optimierungen. Sie können diese Eigenschaften mit Ihren materialisierten Ansichtsabfragen testen und deren Auswirkungen auf die Leistung von Abfragen auswerten.
Name der Clientanforderungseigenschaft Typ Beschreibung
materialized_view_query_optimization_costbased_enabled bool Bei Festlegung auf false, deaktiviert Zusammenfassungs-/Verknüpfungsoptimierungen in materialisierten Ansichtsabfragen. Verwendet Standardstrategien. Der Standardwert ist true.
materialized_view_shuffle dynamic Erzwingen sie das Shuffling der materialisierten Ansichtsabfrage, und (optional) stellen Sie bestimmte Schlüssel bereit, um sie zu mischen. Sehen Sie sich hierzu die Beispiele unten an.

ingestion_time() Funktion im Kontext materialisierter Ansichten

ingestion_time() -Funktion gibt Nullwerte zurück, wenn sie im Kontext einer materialisierten Ansicht verwendet werden, wenn sie die gesamte Ansicht abfragen. Beim Abfragen des materialisierten Teils der Ansicht hängt der Rückgabewert vom Typ der materialisierten Ansicht ab:

  • In materialisierten Ansichten, die eine einzelne arg_max()/arg_min()take_any()/Aggregation enthalten, entspricht dies ingestion_time() dem ingestion_time() entsprechenden Datensatz in der Quelltabelle.
  • In allen anderen materialisierten Ansichten ist der Wert ungefähr ingestion_time() die Zeit der Materialisierung (siehe materialisierte Ansichten).

Beispiele

  1. Fragen Sie die gesamte Ansicht ab. Die neuesten Datensätze in der Quelltabelle sind enthalten:

    ViewName
    
  2. Fragen Sie den materialisierten Teil der Ansicht nur ab, unabhängig davon, wann er zuletzt materialisiert wurde.

    materialized_view("ViewName")
    
  3. Fragen Sie die gesamte Ansicht ab, und geben Sie einen "Hinweis" zur Verwendung shuffle der Strategie an. Die neuesten Datensätze in der Quelltabelle sind enthalten:

    • Beispiel Nr. 1: Auf der Grundlage der Id Spalte (ähnlich wie bei verwendung hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Beispiel Nr. 2: Shuffle basierend auf allen Tasten (ähnlich der Verwendung hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Überlegungen zur Leistung

Die wichtigsten Mitwirkenden, die sich auf die Integrität einer materialisierten Ansicht auswirken können, sind:

  • Clusterressourcen: Wie jeder andere Prozess, der auf dem Cluster ausgeführt wird, verbrauchen materialisierte Ansichten Ressourcen (CPU, Arbeitsspeicher) aus dem Cluster. Wenn der Cluster überlastet ist, kann das Hinzufügen materialisierter Ansichten dazu führen, dass die Leistung des Clusters beeinträchtigt wird. Überwachen Sie die Integrität Ihres Clusters mithilfe von Clusterintegritätsmetriken. Die optimierte autoskalierte Skalierung berücksichtigt derzeit nicht den Zustand der materialisierten Ansichten, die im Rahmen von Regeln für die automatische Skalierung berücksichtigt werden.
    • Der Materialisierungsprozess ist durch die Menge des Arbeitsspeichers und der CPU begrenzt, die er verbrauchen kann. Diese Grenzwerte sind definiert und können in der Arbeitsauslastungsgruppe für materialisierte Ansichten geändert werden.
  • Überlappen mit materialisierten Daten: Während der Materialisierung werden alle neuen Datensätze, die seit der letzten Materialisierung (Delta) in die Quelltabelle aufgenommen wurden, verarbeitet und in der Ansicht materialisiert. Je höher die Schnittmenge zwischen neuen Datensätzen und bereits materialisierten Datensätzen ist, desto schlechter ist die Leistung der materialisierten Ansicht. Eine materialisierte Ansicht funktioniert am besten, wenn die Anzahl der zu aktualisierenden Datensätze (z. B. in arg_max der Ansicht) eine kleine Teilmenge der Quelltabelle ist. Wenn alle oder die meisten materialisierten Ansichtsdatensätze in jedem Materialisierungszyklus aktualisiert werden müssen, ist die materialisierte Ansicht möglicherweise nicht gut geeignet.

  • Aufnahmerate: Es gibt keine hartcodierten Grenzwerte für das Datenvolumen oder die Aufnahmerate in der Quelltabelle der materialisierten Ansicht. Die empfohlene Aufnahmerate für materialisierte Ansichten beträgt jedoch nicht mehr als 1-2 GB/s. Höhere Einnahmeraten können weiterhin gut funktionieren. Die Leistung hängt von der Datenbankgröße, verfügbaren Ressourcen und der Schnittmenge mit vorhandenen Daten ab.

  • Anzahl der materialisierten Ansichten im Cluster: Die oben genannten Überlegungen gelten für jede einzelne materialisierte Ansicht, die im Cluster definiert ist. Jede Ansicht verbraucht ihre eigenen Ressourcen, und viele Ansichten konkurrieren miteinander bei verfügbaren Ressourcen. Obwohl es keine hartcodierten Grenzwerte für die Anzahl der materialisierten Ansichten in einem Cluster gibt, kann der Cluster möglicherweise nicht alle materialisierten Ansichten verarbeiten, wenn viele definiert sind. Die Kapazitätsrichtlinie kann angepasst werden, wenn mehr als eine einzelne materialisierte Ansicht im Cluster vorhanden ist. Erhöhen Sie den Wert der ClusterMinimumConcurrentOperations Richtlinie, um gleichzeitig materialisierte Ansichten auszuführen.
  • Materialisierte Ansichtsdefinition: Die materialisierte Ansichtsdefinition muss gemäß den bewährten Methoden für die abfragebeste Abfrageleistung definiert werden. Weitere Informationen finden Sie unter Erstellen von Befehlsleistungstipps.

Materialisierte Ansicht über materialisierte Ansicht

Eine materialisierte Ansicht kann über eine andere materialisierte Ansicht erstellt werden, wenn die materialisierte Quellansicht eine Deduplizierungsansicht ist. Insbesondere muss die Aggregation der materialisierten Quellansicht sein take_any(*) , um Quelldatensätze zu deduplizieren. Die zweite materialisierte Ansicht kann alle unterstützten Aggregationsfunktionen verwenden. Spezifische Informationen zum Erstellen einer materialisierten Ansicht über eine materialisierte Ansicht finden Sie unter .create materialized-view "Befehl".

Tipp

Beim Abfragen einer materialisierten Ansicht, die über eine andere materialisierte Ansicht definiert ist, wird empfohlen, den materialisierten Teil nur mithilfe der materialized_view() Funktion zu abfragen. Das Abfragen der gesamten Ansicht ist nicht funktionsfähig, wenn beide Ansichten nicht vollständig materialisiert sind. Weitere Informationen finden Sie unter materialisierte Ansichtenabfragen.