Volltext-Suchindizes in verwalteten Tabellen im Unity-Katalog

Important

Dieses Feature befindet sich in der Betaversion. Arbeitsbereichsadministratoren können den Zugriff auf dieses Feature über die Vorschauseite steuern. Siehe Manage Azure Databricks Previews.

Ein Volltext-Suchindex beschleunigt Nachschlagevorgänge in einer oder mehreren Textspalten einer verwalteten Delta Lake- oder Iceberg-Tabelle. Der Index unterstützt den Teilzeichenfolgenabgleich und den Wortabgleich. Wenn Sie die Tabelle mit den Funktionen search oder isearch abfragen, verwendet Azure Databricks den Index, um Dateien zu überspringen, die garantiert nicht übereinstimmende Zeilen enthalten. Dadurch wird die zu scannende Datenmenge erheblich reduziert, insbesondere bei selektiven Abfragen.

Important

Indizes, die während der Betaversion erstellt wurden, sind nicht garantiert mit späteren Versionen kompatibel. Wenn das Feature die öffentliche Vorschau erreicht, müssen Sie vorhandene Indizes ablegen und neue erstellen.

Requirements

Volltextsuchindizes verfügen über Anforderungen für Compute-, Basistabellen- und Schemaberechtigungen und die Basistabellenkonfiguration.

Compute

Volltext-Suchindizes sind nur in Azure Databricks Runtime 18.2 und höher verfügbar, und Sie müssen dieses Beta-Feature in Ihren Arbeitsbereichseinstellungen aktivieren. Siehe Manage Azure Databricks Previews.

Erlaubnisse

So erstellen Sie einen Suchindex:

  • Sie müssen über die MODIFY Berechtigung für die Tabelle verfügen, auf die im Suchindex verwiesen wird.
  • Sie müssen über die CREATE TABLE Berechtigung für das übergeordnete Schema verfügen. Ein Schemabesitzer oder ein Benutzer mit dem MANAGE-Privileg kann Ihnen CREATE TABLE Privilegien auf das Schema gewähren.

Tabellenkonfiguration

Bevor Sie einen Volltext-Suchindex erstellen, muss die Basistabelle alle folgenden Anforderungen erfüllen:

  • Sie müssen den Index im selben Katalog und Schema wie die Basistabelle erstellen.
  • Die Tabelle ist eine verwaltete Delta Lake-Tabelle oder eine verwaltete Iceberg-Tabelle.
  • Zeilenverfolgung ist aktiviert (delta.enableRowTracking = true). Siehe Zeilenverfolgung in Databricks.
  • Indizierte Spalten sind vom Typ STRING, , VARIANT, STRUCToder ARRAY. STRING Spalten verwenden die UTF8_BINARY Sortierung.
  • Eine STRUCT Spalte enthält mindestens ein STRING, VARIANToder ARRAY ein Blattfeld in jeder Schachtelungstiefe. Andere Blattfelder werden ignoriert.
  • Die Tabelle verwendet keine Funktionen aus der Liste der Einschränkungen, darunter Delta Sharing, flaches Klonen, attributbasierte Zugriffskontrollen, Sicherheitsrichtlinien auf Zeilenebene und Spaltenmasken. Informationen finden Sie unter Einschränkungen.

Informationen zu den Tabellenprotokollanforderungen, die sowohl für Delta Lake- als auch Iceberg-Tabellen gelten, finden Sie unter Delta Lake-Funktionskompatibilität und -protokolle.

Erstellen eines Volltext-Suchindexes

Sie können bis zu vier Indizes für eine einzelne Tabelle erstellen, jeweils in einer anderen Spalte.

Verwenden Sie CREATE SEARCH INDEX, um einen Index für eine oder mehrere Textspalten zu erstellen. Im folgenden Beispiel werden zwei Textspalten einer vorhandenen Protokolltabelle indiziert:

CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);

Die vollständige Syntax lautet:

CREATE SEARCH INDEX [IF NOT EXISTS] index_name
  ON table_name ( column_name [, column_name ...] )
  [OPTIONS ( option_key = option_value [, ... ] )]

index_name muss innerhalb des Schemas eindeutig sein und kann nicht mit einem vorhandenen Tabellennamen übereinstimmen.

Informationen zum Steuern der Tokenisierung des Texts finden Sie unter "Optionen".

Warning

Wenn CREATE SEARCH INDEX und REFRESH INDEX während der Ausführung fehlschlagen, führen Sie REFRESH INDEX aus, um einen teilweisen Fehler zu beheben.

Optionen

Die OPTIONS Klausel akzeptiert die folgenden Schlüssel:

Schlüssel Werte Vorgabe Description
tokenizer ngram, split ngram Wie der Text für die Indizierung tokenisiert wird. Siehe Auswählen eines Tokenizers für Ihren Anwendungsfall.
ngram_size ganze Zahl in [3, 10] 5 Länge der erzeugten N-Gramme. Nur gültig, wenn tokenizer = 'ngram'.
min_token_length Ganzzahl >= 1 3 Mindestlänge der beizubehaltenden Token. Tokens, die kürzer als dieser Wert sind, werden bei der Indizierung verworfen. Nur gültig, wenn tokenizer = 'split'.

Ausführliche Informationen zu ungültigen Optionsfehlern finden Sie unter SEARCH_INDEX_INVALID_PARAMETERS Fehlerbedingung.

Auswählen eines Tokenizers für Ihren Anwendungsfall

Für Suchindizes sind je nach Anwendungsfall zwei Tokenisierungsoptionen verfügbar:

Tokenisierer Anwendungsfall Description
ngram Teilzeichenfolgenabgleich. Teilt den Text in überlappende N-Gramme der Länge ngram_size auf.
split Vollwort-Eindämmungsprüfungen. Teilt Text in Worttoken auf. Ein Token ist eine Zeichenfolge von Unicode-Buchstaben (\p{L}) und kombinierten Markierungen (\p{M}); jedes andere Zeichen ist ein Trennzeichen.

So erstellen Sie einen n-Gramm-Index mit einer n-Gramm-Größe von 4:

CREATE SEARCH INDEX log_ngram_idx
  ON logs (message)
  OPTIONS (tokenizer = 'ngram', ngram_size = 4);

So erstellen Sie einen split Index mit einer Mindestlänge von 2 Token:

CREATE SEARCH INDEX log_word_idx
  ON logs (message)
  OPTIONS (tokenizer = 'split', min_token_length = 2);

Abfragen von Daten mithilfe search und isearch

Azure Databricks verfügt über zwei SQL-Funktionen, um zu testen, ob ein Suchmuster in einem oder mehreren Textzielen vorhanden ist:

  • search: Groß-/Kleinschreibung wird beachtet.
  • isearch: Groß-/Kleinschreibung wird nicht beachtet.

Wählen Sie search oder isearch entsprechend Ihrer Anforderung hinsichtlich der Groß-/Kleinschreibung aus. Wenn die indizierten Spalten durch einen Volltext-Suchindex abgedeckt werden, verwendet Azure Databricks den Index, um Dateien zu überspringen, die garantiert nicht übereinstimmende Zeilen enthalten. Suchindizes wirken sich nicht auf Ergebnisse aus.

Indizes beschleunigen Abfragen am meisten, wenn das Suchmuster in einem kleinen Bruchteil der Tabellendateien angezeigt wird.

search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )

Arguments

search und isearch akzeptieren die folgenden Argumente:

  • target muss vom Typ STRING, VARIANT, , STRUCToder ARRAYden gleichen Typen sein, die die Indizierung zulässt. Ziele werden dedupliziert.
  • pattern muss ein Nicht-NULL-Zeichenfolgenliteral sein.
  • mode gibt an, wie pattern mit jedem target übereinstimmt:
    • substring (Standard): pattern wird als Teilzeichenfolge innerhalb der einzelnen targetZeichenfolgen abgeglichen.
    • word: pattern wird in Worttoken aufgeteilt, wobei die gleiche Regel wie der split Tokenizer verwendet wird. Die Funktion gibt "true" zurück, wenn jedes Wort in pattern mindestens einem Ziel angezeigt wird, unabhängig von der Reihenfolge. Siehe Auswählen eines Tokenizers für Ihren Anwendungsfall.

Rückkehr

search und isearch geben einen BOOLEAN-Wert mit dreiwertiger Logik zurück:

  • true wenn mindestens ein Ziel, das nicht null ist, übereinstimmt.
  • null wenn kein Nicht-Null-Ziel übereinstimmt, aber mindestens ein Ziel ist null.
  • false wenn alle Ziele nicht null sind und keines übereinstimmt.

Beispiele

Die folgenden Beispiele zeigen allgemeine search und isearch Abfragen:

-- Case-insensitive substring search across one column.
SELECT * FROM logs
WHERE isearch(message, 'connection refused');

-- Case-sensitive substring search across multiple columns.
SELECT * FROM logs
WHERE search(message, error_detail, '550e8400-e29b-41d4-a716-446655440000');

-- Word search: matches rows containing all three words, in any order.
SELECT * FROM audit_logs
WHERE search(message, 'user admin login', mode => 'word');

Verwalten von Indizes

Important

Volltextsuchindizes werden nicht automatisch aktualisiert, wenn sich die Basistabelle ändert. Siehe Aktualisieren eines Indexes.

Azure Databricks behält die Richtigkeit der Abfrage unabhängig von der Index-Aktualität bei. Wenn eine Tabelle nicht indizierte Daten enthält, verwendet die Abfrage den vorhandenen Index, um den Zugriff auf die indizierten Datensätze zu beschleunigen und eine Tabellenüberprüfung für die nicht indizierten Datensätze zu verwenden.

Verwenden Sie die folgenden Vorgänge, um Volltext-Suchindizes zu verwalten:

Einen Index beschreiben oder anzeigen

So zeigen Sie Informationen zu einem Index an:

DESCRIBE INDEX log_idx;

Aktualisieren eines Indexes

Volltextsuchindizes werden nicht automatisch aktualisiert, wenn sich die Basistabelle ändert.

Um den Index zu aktualisieren, fügen Sie Einträge für neue Zeilen hinzu:

REFRESH INDEX log_idx;

REFRESH INDEX ist eine inkrementelle Operation, bei der Daten nur angehängt werden können. Es indiziert neue Daten, entfernt jedoch keine Einträge für gelöschte Zeilen.

Um den Index zu aktualisieren und dabei sowohl Einträge für neue Zeilen hinzuzufügen als auch Einträge für gelöschte Zeilen zu entfernen, verwenden Sie REFRESH INDEX ... FULL:

REFRESH INDEX log_idx FULL;

Eine vollständige Aktualisierung erfordert mehr Computeressourcen als eine inkrementelle Aktualisierung. Im Laufe der Zeit sammeln inkrementelle Aktualisierungen veraltete Einträge, wodurch sich die Größe des Indexes erhöht und die Leistung negativ beeinflusst wird.

Index löschen

Führen Sie zum Löschen eines Indexes Folgendes aus:

DROP INDEX log_idx;

Verwenden Sie Folgendes, um einen Fehler für fehlende Indizes zu vermeiden:

DROP INDEX IF EXISTS log_idx;

Note

Wenn Sie die Basistabelle ablegen, legt der Befehl auch die Volltextsuchindizes ab.

Einschränkungen

Volltext-Suchindizes haben die folgenden Einschränkungen:

  • Das Umbenennen einer indizierten Spalte in der Basistabelle oder das Ändern des Datentyps wird nicht unterstützt.
  • Tabellen mit Delta Sharing werden nicht unterstützt. Wenn Sie die Basistabelle nach dem Erstellen des Indexes als Delta-Freigabequelle oder -ziel hinzufügen, ignoriert Azure Databricks den Suchindex.
  • Tabellen mit flachen Klonen werden nicht unterstützt. Wenn Sie die Basistabelle nach dem Erstellen des Indexes als flache Klonquelle hinzufügen, ignoriert Azure Databricks den Suchindex.
  • Tabellen mit attributbasierten Zugriffssteuerelementen, Spaltenmasken oder Sicherheitsrichtlinien auf Zeilenebene werden nicht unterstützt. Wenn Sie einer Tabelle mit einem Suchindex eines dieser Steuerelemente hinzufügen, ignoriert Azure Databricks den Suchindex. Weitere Informationen finden Sie in den Kernkonzepten für die attributbasierte Zugriffssteuerung (ABAC).