Analysieren von Abfragen mithilfe von Query Profile

Das über die Snowflake-Weboberfläche verfügbare Tool Query Profile stellt Ausführungsdetails zu einer Abfrage bereit. Für die ausgewählte Abfrage wird eine grafische Darstellung der Hauptkomponenten des Verarbeitungsplans mit Statistiken zu jeder Komponente sowie Details und Statistiken zur Gesamtabfrage bereitgestellt.

Unter diesem Thema:

Einführung

Wann wird Query Profile verwendet?

Query Profile ist ein leistungsfähiges Tool zum Verständnis der Mechanismen von Abfragen. Es kann verwendet werden, wenn Sie mehr über die Leistung oder das Verhalten einer bestimmten Abfrage erfahren möchten oder müssen. Es soll Ihnen helfen, typische Fehler in SQL-Abfrageausdrücken zu erkennen, um potenzielle Leistungsengpässe und Verbesserungsmöglichkeiten zu identifizieren.

Zusätzliche übergeordnete Informationen zu einzelnen Abfragen können in verschiedenen Spalten auf den Seiten Worksheets Worksheet tab und History History tab angezeigt werden.

Zugriff auf Query Profile

Auf Query Profile kann über die Detailseite für eine Abfrage zugegriffen werden. Sie können also auf Query Profile von jeder Seite aus zugreifen, auf der die Spalte Query ID angezeigt wird, und auf Abfrage-IDs kann geklickt werden, insbesondere:

  • Worksheets Worksheet tab

  • History History tab

Bemerkung

Wenn die Spalte Query ID auf diesen Seiten nicht angezeigt wird, klicken Sie auf die Dropdown-Liste neben einer der Spaltenüberschriften der Seite, und wählen Sie in der Columns-Liste die Query ID aus.

So greifen Sie auf das Profil einer Abfrage zu:

  1. Klicken Sie auf der Seite History History tab oder Worksheets Worksheet tab auf eine Abfrage-ID.

  2. Die Detailseite für die Abfrage wird angezeigt:

    ../_images/ui-profile-detail.png
  3. Klicken Sie auf die Registerkarte Profile.

  4. Wenn die Abfrage über ein Profil verfügt, wird dieses angezeigt (siehe Screenshots unten).

Benutzeroberfläche von Query Profile

Zur weiteren Erläuterung verwenden wir hier eine einfache SQL-Beispielabfrage, die zwei Tabellen verknüpft (Join):

select sum(j)
from x join y using (i)
where j > 300
and i < (select avg(j) from x);

Der folgende Screenshot zeigt das Profil für diese Abfrage:

../_images/ui-profile-step1.png

Die Schnittstelle besteht aus folgenden Hauptelementen:

Schritte

Wenn die Abfrage in mehreren Schritten verarbeitet wurde, können Sie zwischen den einzelnen Schritten wechseln.

Operatorbaum

Im mittleren Bereich werden alle Operatorknoten für den ausgewählten Schritt grafisch dargestellt, einschließlich der Beziehungen zwischen den einzelnen Operatorknoten.

Knotenliste

Der mittlere Bereich enthält eine reduzierbare Liste der Operatorknoten nach Ausführungszeit.

Übersicht

Im rechten Bereich wird ein Überblick zum Abfrageprofil angezeigt. Bei Auswahl eines Operatorknotens wechselt die Anzeige zu den Operatordetails.

Schritte

Abfragen werden meist in mehreren Schritten verarbeitet. Die Beispielabfrage wurde in 2 Schritten verarbeitet:

  • In Schritt 1 wurde der Durchschnitt der Spalte x.j berechnet.

  • In Schritt 2 wurde dieses Zwischenergebnis zur Berechnung des endgültigen Abfrageergebnisses verwendet.

Query Profile zeigt jeden Verarbeitungsschritt in einem separaten Bereich an. Sie können zwischen den Bereichen wechseln, indem Sie auf den jeweiligen Schritt klicken. Wenn Sie für unsere Beispielabfrage auf Step 2 klicken, ändert sich die Ansicht wie folgt:

../_images/ui-profile-step2.png

Operatorbaum

Die Baumstruktur bietet eine grafische Darstellung der Operatorknoten, aus denen eine Abfrage besteht, sowie den Links, die die Operatoren miteinander verbinden:

  • Operatoren sind die Funktionsbausteine einer Abfrage. Sie sind für verschiedene Aspekte der Datenverwaltung und -verarbeitung verantwortlich, einschließlich Datenzugriff, Transformationen und Aktualisierungen. Jeder Operatorknoten in der Baumstruktur enthält einige grundlegende Attribute:

    <Typ> [#]

    Operatortyp und ID-Nummer. ID kann verwendet werden, um einen Operator innerhalb eines Abfrageprofils eindeutig zu identifizieren (z. B. Aggregate [5] und Join [11] in der Abbildung oben).

    Eine Beschreibung aller Typen finden Sie unter Operatortypen weiter unten.

    Prozentsatz

    Anteil der Zeit, den dieser Operator im Abfrageschritt benötigt (z. B. 25 % für Aggregate [5]). Diese Informationen spiegeln sich auch in der orangefarbenen Leiste am unteren Rand des Operatorknotens wider und ermöglichen die einfache visuelle Identifizierung von leistungskritischen Operatoren.

    Label

    Operatorspezifische Zusatzinformationen (z. B. SUM(X.J) für Aggregate [5]).

  • Links repräsentieren die Daten, die zwischen jedem Bedienerknoten fließen. Jeder Link gibt die Anzahl der Datensätze an, die verarbeitet wurden (z. B. 41,95M von Join [11] bis Aggregate [5]).

Bemerkung

Wenn die Operatorstruktur nicht angezeigt wird, stört möglicherweise die Touchereignisoberfläche Ihres Touchscreens. Anweisungen zum vorübergehenden Deaktivieren der Benutzeroberfläche finden Sie in diesem Artikel der Snowflake Lodge.

Operatorknoten nach Ausführungszeit

Ein reduzierbares Fenster in der Operator-Baumstruktur listet die Knoten nach Ausführungszeit in absteigender Reihenfolge auf, sodass Benutzer die teuersten Operatorknoten in Bezug auf die Ausführungszeit schnell finden können. Im Bereich werden alle Knoten aufgelistet, die 1 % oder mehr der gesamten Ausführungszeit der Abfrage (oder die Ausführungszeit für den angezeigten Abfrageschritt, wenn die Abfrage in mehreren Verarbeitungsschritten ausgeführt wurde) in Anspruch genommen haben.

Durch Klicken auf einen Knoten in der Liste wird der Operatorbaum auf den ausgewählten Knoten zentriert.

Der folgende Screenshot zeigt den Bereich nach dem Klicken auf den Operator Aggregate [5]:

../_images/ui-profile-nodes-by-execution-time.png

Profilübersicht/Operatordetails

Der Übersichts-/Detailbereich auf der rechten Seite enthält Informationen zu den ausgewählten Komponenten (Operatoren und Links) der Baumstruktur auf der linken Seite. Die angezeigten Informationen hängen davon ab, ob ein Knoten im Operatorbaum ausgewählt ist:

  • Anfangs ist kein Knoten in der Baumstruktur ausgewählt, daher werden im Bereich Übersichtsinformationen für den aktuellen Schritt angezeigt.

  • Wenn eine Komponente durch Klicken auf den Knoten ausgewählt wird, werden im Bereich Informationen zu dieser Komponente angezeigt.

Bemerkung

Um nach dem Klicken auf einen Knoten wieder zu den Übersichtsinformationen auf Schrittebene zurückzukehren, deaktivieren Sie einfach den Knoten, indem Sie auf eine leere Stelle im Operatorbaum klicken.

Der Übersichts-/Detailbereich ist in 3 Abschnitte unterteilt:

Ausführungszeit

Enthält Informationen dazu, welche Verarbeitungsaufgaben Abfragezeit verbraucht haben (siehe unten Details zu Abfrage/Operator). Darüber hinaus werden für Informationen auf Schrittebene der Status des angegebenen Schritts und seine Ausführungszeit angezeigt.

Statistiken

Enthält detaillierte Informationen zu verschiedenen Statistiken (siehe unten Details zu Abfrage/Operator).

Attribute

Enthält komponentenspezifische Informationen (siehe unten Operatortypen).

Der folgende Screenshot zeigt die Details nach dem Klicken auf den Operator Join [11] an:

../_images/ui-profile-operator.png

Operatortypen

In den folgenden Abschnitten finden Sie eine Liste der häufigsten Operatortypen und ihrer Attribute.

Datenzugriffs- und Generierungsoperatoren

TableScan

Stellt den Zugriff auf eine einzelne Tabelle dar. Attribute:

  • Full table name – Name der Tabelle, auf die zugegriffen wird, einschließlich Datenbank und Schema.

  • Columns – Liste der gescannten Spalten

  • Table alias – Verwendeter Tabellenalias, falls vorhanden

  • Extracted Variant path – Liste der aus VARIANT-Spalten extrahierten Pfade

ValuesClause

Liste der Werte, die mit der VALUES-Klausel bereitgestellt werden. Attribute:

  • Number of values – Anzahl der produzierten Werte.

  • Values – Liste der produzierten Werte.

Generator

Generiert Datensätze mit dem TABLE(GENERATOR(...))-Konstrukt. Attribute:

  • rowCount – bereitgestellter rowCount-Parameter

  • timeLimit – bereitgestellter timeLimit-Parameter

ExternalScan

Stellt den Zugriff auf Daten dar, die in Stagingobjekten gespeichert sind. Kann Teil von Abfragen sein, mit denen Daten direkt von Stagingbereichen gescannt werden, aber auch von COPY-Abfragen zum Laden von Daten. Attribute:

  • Stage name – Name des Stagingbereichs, von dem die Daten gelesen werden.

  • Stage type – Typ des Stagingbereichs (z. B. TABLE STAGE).

InternalObject

Stellt den Zugriff auf ein internes Datenobjekt dar (z. B. eine Information Schema-Tabelle oder das Ergebnis einer vorherigen Abfrage). Attribute:

  • Object Name – Name oder Typ des Objekts, auf das zugegriffen wird.

Datenverarbeitungsoperatoren

Filter

Stellt eine Operation dar, mit der Datensätze gefiltert werden. Attribute:

  • Filter condition – Bedingung, die zum Filtern verwendet wird.

Join

Kombiniert zwei Eingaben unter einer bestimmten Bedingung. Attribute:

  • Join Type – Typ der Join-Verknüpfung (z. B. INNER, LEFT OUTER usw.)

  • Equality Join Condition – Listet bei Joins, die auf Gleichheit basierende Bedingungen verwenden, die zum Verbinden der Elemente verwendeten Ausdrücke auf.

  • Additional Join Condition – Einige Verbindungen verwenden Bedingungen mit Prädikaten, die nicht auf Gleichheit basieren. Diese werden hier aufgelistet.

Bemerkung

Join-Prädikate, die auf Ungleichheit basieren, können zu deutlich niedrigeren Verarbeitungsgeschwindigkeiten führen und sollten nach Möglichkeit vermieden werden.

Aggregatfunktionen

Gruppiert die Eingabe und berechnet Aggregatfunktionen. Kann SQL-Konstrukte wie GROUP BY oder SELECT DISTINCT darstellen. Attribute:

  • Grouping Keys – Wenn GROUP BY verwendet wird, werden die Ausdrücke aufgelistet, nach denen gruppiert wird.

  • Aggregate Functions – Liste der Funktionen, die für jede Aggregatgruppe berechnet wurden, z. B. SUM.

GroupingSets

Repräsentiert Konstrukte wie GROUPING SETS, ROLLUP und CUBE. Attribute:

  • Grouping Key Sets – Liste der Gruppierungssätze

  • Aggregate Functions – Liste der Funktionen, die für jede Gruppe berechnet wurden, z. B. SUM.

WindowFunction

Berechnet Fensterfunktionen. Attribute:

  • Window Functions – Liste der berechneten Fensterfunktionen.

Sort

Sortiert die Eingabe anhand eines gegebenen Ausdrucks. Attribute:

  • Sort Keys – Ausdruck, der die Sortierreihenfolge definiert.

SortWithLimit

Erstellt nach der Sortierung einen Teil der Eingabesequenz, normalerweise das Ergebnis eines ORDER BY ... LIMIT ... OFFSET ...-Konstrukts in SQL. Attribute:

  • Sort Keys – Ausdruck, der die Sortierreihenfolge definiert.

  • Number of rows – Anzahl der erzeugten Zeilen.

  • Offset – Position in der sortierten Sequenz, ab der die produzierten Tupel ausgegeben werden.

Flatten

Verarbeitet VARIANT-Datensätze und vereinfacht sie ggf. in einem angegebenen Pfad. Attribute:

  • Input – Eingabeausdruck, der zum Vereinfachen der Daten verwendet wird.

JoinFilter

Spezielle Filteroperation, bei der Tupel entfernt werden, die als möglicherweise nicht mit der Bedingung eines Joins im Abfrageplan übereinstimmend identifiziert werden können. Attribute:

  • Original join ID – Join, mit dem Tupel identifiziert werden, die herausgefiltert werden können.

UnionAll

Verkettet zwei Eingänge. Attribute: keine.

ExternalFunction

Repräsentiert die Verarbeitung durch eine externe Funktion.

DML-Operatoren

Insert

Fügt Datensätze entweder durch eine INSERT- oder COPY-Operation zu einer Tabelle hinzu. Attribute:

  • Input expression – Ausdrücke, die eingefügt werden.

  • Table names – Namen der Tabellen, denen Datensätze hinzugefügt werden.

Delete

Entfernt Datensätze aus einer Tabelle. Attribute:

  • Table name – Name der Tabelle, aus der Datensätze gelöscht werden.

Update

Aktualisiert Datensätze in einer Tabelle. Attribute:

  • Table name – Name der aktualisierten Tabelle.

Merge

Führt eine MERGE-Operation für eine Tabelle aus. Attribute:

  • Full table name – Name der aktualisierten Tabelle.

Unload

Stellt eine COPY-Operation dar, bei der Daten aus einer Tabelle in einer Datei im Stagingbereich exportiert werden. Attribute:

  • Location – Name des Stagingbereichs, in den die Daten gespeichert werden.

Metadatenoperatoren

Einige Abfragen enthalten Schritte, bei denen es sich nicht um Datenverarbeitungsoperationen, sondern um reine Metadaten- bzw. Katalogoperationen handelt. Diese Schritte bestehen aus einem einzigen Operator. Einige Beispiele sind:

DDL- und Transaktionsbefehle

Werden zum Erstellen oder Ändern von Objekten, Sitzungen, Transaktionen usw. verwendet. Normalerweise werden diese Abfragen nicht von einem virtuellen Warehouse verarbeitet und führen zu einem Einzelschrittprofil, das der zugehörigen SQL-Anweisung entspricht. Beispiel:

CREATE DATABASE | SCHEMA | …

ALTER DATABASE | SCHEMA | TABLE | SESSION | …

DROP DATABASE | SCHEMA | TABLE | …

COMMIT

Befehl zur Tabellenerstellung

DDL-Befehl zum Erstellen einer Tabelle. Beispiel:

CREATE TABLE

Ähnlich wie andere DDL-Befehle führen diese Abfragen zu einem Einzelschrittprofil. Sie können jedoch auch Teil eines mehrstufigen Profils sein, z. B. in einer CTAS-Anweisung. Beispiel:

CREATE TABLE … AS SELECT …

Wiederverwendung des Abfrageergebnisses

Eine Abfrage, die das Ergebnis einer vorherigen Abfrage wiederverwendet.

Metadatenbasiertes Ergebnis

Eine Abfrage, deren Ergebnis nur auf Verarbeitung von Metadaten basiert, ohne auf Daten zuzugreifen. Diese Abfragen werden nicht von einem virtuellen Warehouse verarbeitet. Beispiel:

SELECT COUNT(*) FROM …

SELECT CURRENT_DATABASE()

Verschiedene Operatoren

Result

Gibt das Abfrageergebnis zurück. Attribute:

  • List of expressions – Ausdrücke, die generiert wurden.

Abfrage-/Operator-Details

Für die Analyse der Abfrageleistung bietet das Detailfenster zwei Klassen von Profilinformationen:

  • Ausführungszeit, unterteilt in Kategorien

  • Detaillierte Statistiken

Außerdem werden für jeden Operator Attribute bereitgestellt (siehe Operatortypen oben).

Ausführungszeit

Die Ausführungszeit enthält Informationen darüber, wofür die Zeit während der Verarbeitung einer Abfrage verbraucht wurde. Die aufgewendete Zeit kann in folgende Kategorien unterteilt werden, die in der folgenden Reihenfolge angezeigt werden:

  • Processing – Zeit, die von der CPU für die Datenverarbeitung verbraucht wurde.

  • Local Disk IO – Zeit, in der die Verarbeitung durch den Zugriff auf die lokale Festplatte blockiert wurde.

  • Remote Disk IO – Zeit, in der die Verarbeitung durch Remote-Festplattenzugriff blockiert wurde.

  • Network Communication – Zeit, in der die Verarbeitung auf die Netzwerkdatenübertragung wartete.

  • Synchronization – Verschiedene Synchronisationsaktivitäten zwischen den beteiligten Prozessen.

  • Initialization – Zeit, die für das Einrichten der Abfrageverarbeitung verbraucht wurde.

Statistiken

Eine wichtige Informationsquelle im Detailbereich sind die verschiedenen Statistiken, die in folgende Abschnitten unterteilt sind:

  • IO – Informationen zu den während der Abfrage ausgeführten Eingabe/Ausgabe-Operationen:

    • Scan progress – Prozentsatz der Daten, die bislang für eine bestimmte Tabelle gescannt wurden.

    • Bytes scanned – Anzahl der bislang gescannten Bytes.

    • Percentage scanned from cache – Prozentsatz der Daten, die vom lokalen Festplattencache gescannt wurden.

    • Bytes written – Geschriebene Bytes (z. B. beim Laden in eine Tabelle).

    • Bytes written to result – Bytes, die in ein Ergebnisobjekt geschrieben wurden.

    • Bytes read to result – Bytes, die aus einem Ergebnisobjekt gelesen wurden.

    • External Bytes scanned – Bytes, die von einem externen Objekt, z. B. einem Stagingbereich, gelesen wurden.

  • DML – Statistiken zu DML–Abfragen (Datenbearbeitungssprache):

    • Number of rows inserted – Anzahl der in eine Tabelle (oder Tabellen) eingefügten Zeilen.

    • Number of rows updated – Anzahl der in einer Tabelle aktualisierten Zeilen.

    • Number of rows deleted – Anzahl der aus einer Tabelle gelöschten Zeilen.

    • Number of rows unloaded – Anzahl der während des Datenexports entladenen Zeilen.

    • Number of bytes deleted – Anzahl der aus einer Tabelle gelöschten Bytes.

  • Pruning – Informationen zu den Auswirkungen der Tabellenverkürzung:

    • Partitions scanned – Anzahl der bisher gescannten Partitionen.

    • Partitions total – Gesamtanzahl der Partitionen einer Tabelle.

  • Spilling – Informationen zur Festplattennutzung für Operationen, bei denen Zwischenergebnisse nicht in den Arbeitsspeicher passen:

    • Bytes spilled to local storage – Datenmenge, die auf die lokale Festplatte übertragen wurde.

    • Bytes spilled to remote storage – Datenmenge, die auf die externe Festplatte übertragen wurde.

  • Network – Netzwerk-Kommunikation:

    • Bytes sent over the network – Über das Netzwerk gesendete Datenmenge.

  • External Functions – Informationen zu Aufrufen externer Funktionen:

    Die folgenden Statistiken werden für jede externe Funktion angezeigt, die von der SQL-Anweisung aufgerufen wird. Wenn dieselbe Funktion mehrmals von derselben SQL-Anweisung aufgerufen wurde, werden die Statistiken aggregiert.

    • Total invocations – Die Häufigkeit, mit der eine externe Funktion aufgerufen wurde. Der Wert kann sich von der Anzahl der externen Funktionsaufrufe im Text der SQL-Anweisung unterscheiden und zwar aufgrund der Anzahl der Batches, in die Zeilen unterteilt sind, der Anzahl der Wiederholungsversuche (bei vorübergehenden Netzwerkproblemen) usw.

    • Rows sent – Die Anzahl der an externe Funktionen gesendeten Zeilen.

    • Rows received – Die Anzahl der von externen Funktionen empfangenen Zeilen.

    • Bytes sent (x-region) – Die Anzahl der an externe Funktionen gesendeten Bytes. Wenn das Etikett „(x-region)“ enthält, wurden die Daten über Regionen hinweg gesendet (was sich auf die Abrechnung auswirken kann).

    • Bytes received (x-region) – Die Anzahl der von externen Funktionen empfangenen Bytes. Wenn das Etikett „(x-region)“ enthält, wurden die Daten über Regionen hinweg gesendet (was sich auf die Abrechnung auswirken kann).

    • Retries due to transient errors — Die Anzahl der Wiederholungen aufgrund vorübergehender Fehler.

    • Average latency per call – Die durchschnittliche Zeit pro Aufruf zwischen dem Zeitpunkt, zu dem Snowflake die Daten gesendet hat, und dem Zeitpunkt, zu dem Snowflake die zurückgegebenen Daten empfangen hat.

    Wenn der Wert eines Feldes, z. B. „Retries due to transient errors“, null ist, wird das Feld nicht angezeigt.

Typische, von Query Profile identifizierte Abfrageprobleme

In diesem Abschnitt werden einige Probleme beschrieben, die Sie mithilfe von Query Profile identifizieren und beheben können.

„Explodierende“ Joins

Einer der häufigsten Fehler, die SQL-Benutzer machen, besteht darin, Tabellen zu verknüpfen, ohne eine Join-Bedingung anzugeben (was zu einem „Kartesischen Produkt“ führt), oder eine Bedingung bereitzustellen, bei der Datensätze einer Tabelle mit mehreren Datensätzen einer anderen Tabelle übereinstimmen. Für solche Abfragen produziert der Operator Join signifikant (oft um Größenordnungen) mehr Tupel, als er verbraucht.

Dies kann beobachtet werden, indem die Anzahl der Datensätze betrachtet wird, die von einem Join-Operator erzeugt wurden. Dies spiegelt sich normalerweise auch in Join-Operatoren wider, die viel Zeit in Anspruch nehmen.

Das folgende Beispiel zeigt eine Eingabe von Hunderten von Datensätzen, aber eine Ausgabe von Hunderttausenden.

SELECT tt1.c1, tt1.c2
FROM tt1
JOIN tt2 ON tt1.c1 = tt2.c1
 AND tt1.c2 = tt2.c2;
../_images/ui-profile-issues-exploding-joins.png

UNION ohne ALL

In SQL können zwei Datasets mit UNION- oder UNION ALL-Konstrukten kombiniert werden. Der Unterschied zwischen beiden besteht darin, dass mit UNION ALL die Eingaben einfach verkettet werden, während UNION dasselbe tut, aber auch eine doppelte Löschung durchführt.

Ein häufiger Fehler ist die Verwendung von UNION, wenn die UNION ALL-Semantik ausreicht. Diese Abfragen werden in Query Profile als UnionAll-Operator mit einem zusätzlichen Aggregate-Operator darüber angezeigt (der eine doppelte Löschung vornimmt).

Abfragen, die zu groß für den Arbeitsspeicher sind

Bei einigen Operationen (z. B. doppelte Löschung bei einem großen Dataset) reicht die für die Server zur Ausführung der Operation zur Verfügung stehende Speicherkapazität möglicherweise nicht aus, um Zwischenergebnisse zu speichern. Als Ergebnis beginnt das Abfrageverarbeitungsmodul, die Daten auf die lokale Festplatte zu übertragen. Wenn der lokale Speicherplatz nicht ausreicht, werden die Überlaufdaten auf Remote-Festplatten gespeichert.

Dieser Überlauf kann sich erheblich auf die Abfrageleistung auswirken (insbesondere, wenn für den Überlauf ein Remote-Datenträger verwendet wird). Um die Auswirkungen zu reduzieren, empfehlen wir Folgendes:

  • Verwenden eines größeren Warehouse (effektives Erhöhen des verfügbaren Arbeitsspeichers bzw. des lokalen Festplattenspeichers für die Operation) und/oder

  • Verarbeiten der Daten in kleineren Batches.

Ineffizientes Verkürzen

Snowflake sammelt umfangreiche Statistiken zu Daten, sodass basierend auf den Abfragefiltern keine unnötigen Teile einer Tabelle gelesen werden. Um diesen Effekt zu erzielen, muss die Reihenfolge der Datenspeicherung mit den Abfragefilterattributen korreliert werden.

Die Effizienz des Verkürzungsprozesses kann durch Vergleichen der Statistiken Partitions scanned und Partitions total in den TableScan-Operatoren überwacht werden. Wenn ersterer Wert ein kleiner Bruchteil des letzteren Werts ist, dann ist das Verkürzen effizient. Wenn nicht, hatte das Verkürzen keine Wirkung.

Das Verkürzen kann natürlich nur für Abfragen hilfreich sein, bei denen tatsächlich eine erhebliche Datenmenge herausgefiltert wird. Wenn in den Verkürzungsstatistiken keine Datenreduktion angezeigt wird, über TableScan jedoch ein Filter-Operator steht, der eine Anzahl von Datensätzen herausfiltert, könnte dies darauf hindeuten, dass für diese Abfrage eine andere Organisation der Daten von Vorteil ist.

Weitere Informationen zum Verkürzen finden Sie unter Grundlegendes zu Tabellenstrukturen in Snowflake.