Kategorien:

Systemfunktionen (Systeminformationen)

SYSTEM$CLUSTERING_INFORMATION

Gibt Clustering-Informationen, einschließlich der durchschnittlichen Clustering-Tiefe, für eine Tabelle auf Basis von einer oder mehreren Spalten der Tabelle zurück.

Siehe auch:

SYSTEM$CLUSTERING_DEPTH

Syntax

SYSTEM$CLUSTERING_INFORMATION( '<table_name>'
    [ , { '( <expr1> [ , <expr2> ... ] )' | <number_of_errors> } ] )
Copy

Argumente

table_name

Tabelle, für die Sie Clustering-Informationen zurückgeben möchten.

(expr1 [ , expr2 ... ])

Spaltennamen oder Ausdrücke, für die Clustering-Informationen zurückgegeben werden:

  • Für eine Tabelle ohne Gruppierungsschlüssel ist dieses Argument erforderlich. Wenn das Argument nicht angegeben wird, wird ein Fehler zurückgegeben.

  • Bei einer Tabelle mit Gruppierungsschlüssel ist dieses Argument optional. Wenn das Argument weggelassen wird, nutzt Snowflake zur Rückgabe der Clustering-Informationen den definierten Gruppierungsschlüssel.

Auch wenn nur ein Spaltenname oder Ausdruck übergeben wird, muss dieser in Klammern gesetzt sein.

Bemerkung

Sie können mit diesem Argument Clustering-Informationen für beliebige Spalten in der Tabelle zurückgeben unabhängig davon, ob für die Tabelle ein Gruppierungsschlüssel definiert ist.

Mit anderen Worten, Sie können dies verwenden, um zu entscheiden, welches Clustering in Zukunft verwendet werden soll.

number_of_errors

Anzahl der von der Funktion zurückgegebenen Clustering-Fehler. Wenn dieses Argument weggelassen wird, werden die letzten 10 Fehler zurückgegeben.

Nutzungshinweise

  • Das zweite Argument der Funktion gibt einen Spaltennamen/Ausdruck oder eine Anzahl von Fehlern an. Sie können nicht beide Argumente in einem einzigen Funktionsaufruf verwenden.

  • Tabellenname, Spaltenname und Ausdruck sind Zeichenfolgen, die in einfache Anführungszeichen gesetzt werden müssen.

Ausgabe

Die Funktion gibt einen Wert vom Typ VARCHAR zurück.

Die zurückgegebene Zeichenfolge ist im JSON-Format und enthält die folgenden Name/Wert-Paare:

cluster_by_keys

Spalten in der Tabelle, die zur Rückgabe von Clustering-Informationen verwendet werden. Es kann sich um beliebige Spalten in der Tabelle handeln.

notes

Diese Spalte kann Vorschläge enthalten, um das Clustering effizienter zu gestalten. Dieses Feld kann beispielsweise eine Warnung enthalten, wenn die Kardinalität der Clustering-Spalte extrem hoch ist.

Diese Spalte kann leer sein.

Weitere Informationen zum effizienten Clustering finden Sie unter Strategien zur Auswahl von Gruppierungsschlüsseln.

total_partition_count

Gesamtzahl der Mikropartitionen, aus denen die Tabelle besteht.

total_constant_partition_count

Gesamtzahl der Mikropartitionen, für die der Wert der angegebenen Spalten einen konstanten Status erreicht hat (d. h. die Mikropartitionen profitieren von Reclustering nicht wesentlich). Die Anzahl konstanter Mikropartitionen in einer Tabelle hat Auswirkungen auf das Bereinigen von Abfragen. Je höher die Anzahl ist, desto mehr Mikropartitionen können aus für die Tabelle ausgeführten Abfragen bereinigt werden, was sich entsprechend auf die Leistung auswirkt.

average_overlaps

Durchschnittliche Anzahl sich überlappender Mikropartitionen für jede Mikropartition in der Tabelle. Eine hohe Zahl weist darauf hin, dass das Clustering der Tabelle nicht effizient ist.

average_depth

Mittlere Überlappungstiefe der einzelnen Mikropartitionen in der Tabelle. Eine hohe Zahl weist darauf hin, dass das Clustering der Tabelle nicht effizient ist.

Dieser Wert wird auch von SYSTEM$CLUSTERING_DEPTH zurückgegeben.

partition_depth_histogram

Ein Histogramm, das die Verteilung der Überlappungstiefe für die einzelnen Mikropartitionen in der Tabelle darstellt. Das Histogramm enthält Buckets mit Breiten:

  • 0 bis 16 in Inkrementen von 1.

  • Bei Buckets, die größer als 16 sind, Inkremente mit doppelter Breite des vorherigen Buckets (z. B. 32, 64, 128, …).

clustering_errors

Ein Array von JSON-Objekten, jeweils mit timestamp und error-Name/Wert-Paar. error beschreibt, warum das automatische Clustering nicht in der Lage war, die Daten neu zu clustern.

Standardmäßig werden von der Funktion die letzten 10 Fehler zurückgegeben. Um mehr oder weniger Fehler zurückzugeben, geben Sie als zweites Argument der Funktion die Anzahl an.

Weitere Informationen zu Überlappung und Tiefe von Mikropartitionen sowie deren Auswirkungen auf die Abfragebereinigung finden Sie unter Grundlegendes zu Tabellenstrukturen in Snowflake.

Beispiele

Zurückgeben der letzten 5 Clustering-Fehler:

SELECT SYSTEM$CLUSTERING_INFORMATION('t1', 5);
Copy

Zurückgeben der Clustering-Informationen für eine Tabelle mit zwei Spalten in der Tabelle:

SELECT SYSTEM$CLUSTERING_INFORMATION('test2', '(col1, col3)');
Copy
+--------------------------------------------------------------------+
| SYSTEM$CLUSTERING_INFORMATION('TEST2', '(COL1, COL3)')             |
|--------------------------------------------------------------------|
| {                                                                  |
|   "cluster_by_keys" : "LINEAR(COL1, COL3)",                        |
|   "total_partition_count" : 1156,                                  |
|   "total_constant_partition_count" : 0,                            |
|   "average_overlaps" : 117.5484,                                   |
|   "average_depth" : 64.0701,                                       |
|   "partition_depth_histogram" : {                                  |
|     "00000" : 0,                                                   |
|     "00001" : 0,                                                   |
|     "00002" : 3,                                                   |
|     "00003" : 3,                                                   |
|     "00004" : 4,                                                   |
|     "00005" : 6,                                                   |
|     "00006" : 3,                                                   |
|     "00007" : 5,                                                   |
|     "00008" : 10,                                                  |
|     "00009" : 5,                                                   |
|     "00010" : 7,                                                   |
|     "00011" : 6,                                                   |
|     "00012" : 8,                                                   |
|     "00013" : 8,                                                   |
|     "00014" : 9,                                                   |
|     "00015" : 8,                                                   |
|     "00016" : 6,                                                   |
|     "00032" : 98,                                                  |
|     "00064" : 269,                                                 |
|     "00128" : 698                                                  |
|   },                                                               |
|   "clustering_errors" : [ {                                        |
|      "timestamp" : "2023-04-03 17:50:42 +0000",                    |
|      "error" : "(003325) Clustering service has been disabled.\n"  |
|      }                                                             |
|   ]                                                                |
| }                                                                  |
+--------------------------------------------------------------------+

Dieses Beispiel zeigt, dass die test2-Tabelle aus folgenden Gründen nicht gut gruppiert ist:

  • Null (0) konstante Mikropartitionen von insgesamt 1156 Mikropartitionen.

  • Hoher Durchschnitt an überlappenden Mikropartitionen.

  • Hoher Durchschnitt der Überlappungstiefe zwischen Mikropartitionen.

  • Die meisten Mikropartitionen sind am unteren Ende des Histogramms gruppiert, wobei die Mehrzahl der Mikropartitionen eine Überlappungstiefe zwischen 64 und 128 aufweist.

  • Automatisches Clustering war zuvor deaktiviert.

Einschränkungen

Wenn eine Tabelle mehr als 2 Millionen Partitionen hat:

  • Die Ergebnisse der Funktion basieren auf einer Teilmenge der Partitionen der Tabelle.

  • Der Wert des Ausgabefeldes total_partition_count ist 2 Millionen.