Beschleunigen von Abfragen auf semistrukturierten Daten durch die Suchoptimierung¶
Der Suchoptimierungsdienst kann die Leistung von Punktsuchabfragen und Abfragen mit Teilzeichenfolgen auf semistrukturierte Daten in Snowflake-Tabellen (d. h. Daten in den Spalten VARIANT, OBJECT und ARRAY) verbessern. Sie können die Suchoptimierung für Spalten dieser Arten konfigurieren, selbst wenn die Struktur tief verschachtelt ist und sich häufig ändert. Sie können auch die Suchoptimierung für bestimmte Elemente innerhalb einer semistrukturierten Spalte aktivieren.
In den folgenden Abschnitten finden Sie weitere Informationen zur Unterstützung der Suchoptimierung bei Abfragen von semistrukturierten Daten:
Unterstützte Datentypen für Konstanten und Umwandlungen in Prädikaten für semistrukturierte Typen
Unterstützung der Umwandlung von semistrukturierten Datentypwerten in VARCHAR
Derzeitige Einschränkungen bei der Unterstützung von semistrukturierten Typen
Suchoptimierung für Abfragen von semistrukturierten Daten¶
Um die Leistung bei Abfragen von semistrukturierten Daten in einer Tabelle zu verbessern, verwenden Sie die Klausel ON in dem Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION für bestimmte Spalten oder Elemente in Spalten. Abfragen für die Spalten VARIANT, OBJECT und ARRAY werden nicht optimiert, wenn Sie die Klausel ON weglassen. Wenn Sie die Suchoptimierung auf Tabellenebene aktivieren, wird sie nicht für Spalten mit semistrukturierten Daten aktiviert.
Beispiel:
Weitere Informationen dazu finden Sie unter Aktivieren und Deaktivieren der Suchoptimierung.
Unterstützte Datentypen für Konstanten und Umwandlungen in Prädikaten für semistrukturierte Typen¶
Der Suchoptimierungsdienst kann die Leistung von Punktsuchabfragen auf semistrukturierten Daten verbessern, bei denen die folgenden Typen für Konstanten und für die implizite oder explizite Umwandlung von Elementen verwendet werden:
FIXED (einschließlich Umwandlungen, die eine gültige Genauigkeit und Skalierung angeben)
INTEGER (einschließlich synonymer Typen)
VARCHAR (einschließlich synonymer Typen)
DATE (einschließlich Umwandlungen, die eine Skalierung angeben)
TIME (einschließlich Umwandlungen, die eine Skalierung angeben)
TIMESTAMP TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ (einschließlich Umwandlungen, die eine Skalierung angeben)
Der Suchoptimierungsdienst unterstützt die Umwandlung von Typen mit:
Unterstützung der Umwandlung von semistrukturierten Datentypwerten in VARCHAR¶
Der Suchoptimierungsdienst kann auch die Leistung von Punktsuchen verbessern, bei denen Spalten mit semistrukturierten Datentypen in VARCHAR umgewandelt und mit Konstanten verglichen werden, die in VARCHAR umgewandelt werden.
Angenommen, src ist eine VARIANT-Spalte, die Werte der Datentypen BOOLEAN, DATE und TIMESTAMP enthält, die in VARIANT-Wert konvertiert worden sind:
Bei dieser Tabelle kann der Suchoptimierungsdienst die folgenden Abfragen verbessern, bei denen die VARIANT-Spalte in VARCHAR umgewandelt und die Spalte mit Zeichenfolgenkonstante verglichen wird:
Unterstützte Prädikate für Punktsuche auf VARIANT-Typen¶
Der Suchoptimierungsdienst kann Punktsuchabfragen mit den unten aufgeführten Typen von Prädikaten verbessern. In den folgenden Beispielen ist src die Spalte mit einem semistrukturierten Datentyp, und path_to_element ist ein Pfad zu einem Element in der Spalte mit einem semistrukturierten Datentyp.
Gleichheitsprädikate im folgenden Format:
WHERE path_to_element[::target_data_type] = constantBei dieser Syntax müssen
target_data_type(falls angegeben) und der Datentyp vonconstantzu den oben aufgeführten unterstützten Typen gehören.Der Suchoptimierungsdienst unterstützt beispielsweise Folgendes:
Abgleich eines VARIANT-Elements mit einer NUMBER-Konstanten ohne explizite Umwandlung des Elements.
Explizite Umwandlung eines VARIANT-Elements in NUMBER mit einer bestimmten Genauigkeit und Skalierung.
Abgleich eines VARIANT-Elements mit einer VARCHAR-Konstanten ohne explizite Umwandlung des Elements.
Explizite Umwandlung eines VARIANT-Elements in VARCHAR.
Explizite Umwandlung eines VARIANT-Elements in DATE.
Explizite Umwandlung eines VARIANT-Elements in TIMESTAMP mit einem bestimmten Maßstab.
Abgleich eines ARRAY-Elements mit dem Wert eines unterstützten Typs, mit oder ohne explizite Umwandlung in den Typ. Beispiel:
Abgleich eines OBJECT-Elements mit dem Wert eines unterstützten Typs, mit oder ohne explizite Umwandlung in den Typ. Beispiel:
Prädikate, die ARRAY-Funktionen verwenden, wie z. B.:
WHERE ARRAY_CONTAINS(value_expr, array)In dieser Syntax darf
value_exprnicht NULL sein und muss VARIANT ergeben. Der Datentyp des Wertes muss einer der unterstützten Typen sein.Beispiel:
In diesem Beispiel ist der Wert eine Konstante, die implizit in ein VARIANT umgewandelt wird:
WHERE ARRAYS_OVERLAP(ARRAY_CONSTRUCT(constant_1, constant_2, .., constant_N), array)Der Datentyp jeder Konstanten (
constant_1,constant_2und so weiter) muss einer der von unterstützten Typen sein. Das konstruierte ARRAY kann NULL-Konstanten enthalten.In diesem Beispiel befindet sich das Array in einem VARIANT-Wert:
In diesem Beispiel ist das Array eine ARRAY-Spalte:
Die folgenden Prädikate, die auf NULL-Werte prüfen:
WHERE IS_NULL_VALUE(path_to_element)Beachten Sie, dass IS_NULL_VALUE für JSON-Nullwerte und nicht für SQL-NULL-Werte gilt.
WHERE path_to_element IS NOT NULLWHERE semistructured_column IS NULLwobei sich
semistructured_columnauf die Spalte und nicht auf einen Pfad zu einem Element in den semistrukturierten Daten bezieht.Zum Beispiel unterstützt der Suchoptimierungsdienst die Verwendung der Spalte VARIANT
src, aber nicht den Pfad zum Elementsrc:person.agein dieser Spalte VARIANT.
Suche nach Teilzeichenfolgen in VARIANT-Typen¶
Der Suchoptimierungsservice kann Platzhalter oder reguläre Ausdrücke in semistrukturierten Spalten (d. h. VARIANT-, OBJECT- und ARRAY-Spalten) oder Elemente in solchen Spalten optimieren.
Der Suchoptimierungsservice kann Prädikate optimieren, die die folgenden Funktionen verwenden:
Sie können die Optimierung der Suche nach Teilzeichenfolgen für eine Spalte oder für mehrere einzelne Elemente innerhalb einer Spalte aktivieren. Die folgende Anweisung aktiviert zum Beispiel die Optimierung der Suche nach Teilzeichenfolgen für ein verschachteltes Element in einer Spalte:
Nachdem der Suchzugriffspfad erstellt wurde, kann die folgende Abfrage optimiert werden:
Die folgenden Abfragen werden jedoch nicht optimiert, da die Filter der WHERE-Klausel nicht auf das Element angewendet werden, das bei der Aktivierung der Suchoptimierung angegeben wurde (col2:data.search):
Sie können mehrere Elemente angeben, die optimiert werden sollen. Im folgenden Beispiel ist die Suchoptimierung für zwei bestimmte Elemente in der Spalte col2 aktiviert:
Wenn Sie die Suchoptimierung für ein bestimmtes Element aktivieren, wird sie auch für alle verschachtelten Elemente aktiviert. Die zweite Anweisung ALTER TABLE unten ist redundant, da die erste Anweisung die Suchoptimierung für das gesamte Element data ermöglicht, einschließlich des verschachtelten Elements search.
Wenn Sie die Suchoptimierung für eine ganze Spalte aktivieren, werden alle Suchen nach Teilzeichenfolgen in dieser Spalte optimiert, einschließlich der Elemente, die in beliebiger Tiefe in der Spalte verschachtelt sind.
Ein Beispiel für eine FULL_TEXT-Suchoptimierung für eine VARIANT-Spalte in der Tabelle car_sales und deren Daten (beschrieben in Abfragen von semistrukturierten Daten) finden Sie unter FULL_TEXT-Suchoptimierung in einer VARIANT-Spalte aktivieren.
Auswertung der Konstanten für die Suche von VARIANT-Teilzeichenfolgen¶
Bei der Auswertung der konstanten Zeichenfolge in einer Abfrage (z. B. LIKE 'constant_string') teilt der Suchoptimierungsservice die Zeichenfolge in Token auf und verwendet dabei die folgenden Zeichen als Trennzeichen:
Eckige Klammern (
[und])Geschweifte Klammern (
{und})Doppelpunkte (
:)Kommas (
,)Doppelte Anführungszeichen (
")
Nachdem die Zeichenfolge in Token aufgeteilt wurde, berücksichtigt der Suchoptimierungsservice nur Token, die mindestens fünf Zeichen lang sind. In der folgenden Tabelle wird erläutert, wie der Suchoptimierungsservice verschiedene Beispiele für Prädikate behandelt:
Beispiel für ein Prädikat |
Wie der Suchoptimierungsdienst die Abfrage verarbeitet |
|---|---|
|
Der Suchoptimierungsservice verwendet keine Suchzugriffspfade für das folgende Prädikat, da die Teilzeichenfolge kürzer als fünf Zeichen ist. |
|
Der Suchoptimierungsservice kann diese Abfrage optimieren, indem er die Suchzugriffspfade verwendet, um nach |
|
Der Suchoptimierungsservice kann die Abfrage optimieren, indem Suchzugriffspfade für die Suche nach |
|
Der Suchoptimierungsdienst zerlegt diese Zeichenfolge in |
|
Der Suchoptimierungsservice zerlegt diese Zeichenfolge in die Token |
|
Der Suchoptimierungsdienst zerlegt diese Zeichenfolge in die Token |
Derzeitige Einschränkungen bei der Unterstützung von semistrukturierten Typen¶
Die Unterstützung für semistrukturierte Typen im Suchoptimierungsdienst ist auf folgende Weise eingeschränkt:
Prädikate der Form
path_to_element IS NULLwerden nicht unterstützt.Prädikate, bei denen die Konstanten Ergebnisse von skalaren Unterabfragen sind, werden nicht unterstützt.
Prädikate, die Pfade zu Elementen angeben, die Unterelemente enthalten, werden nicht unterstützt.
Prädikate, die die XMLGET-Funktion verwenden, werden nicht unterstützt.
Die aktuellen Einschränkungen des Suchoptimierungsservice gelten auch für semistrukturierte Typen.