Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
MODIFYBerechtigung für die Tabelle verfügen, auf die im Suchindex verwiesen wird. - Sie müssen über die
CREATE TABLEBerechtigung für das übergeordnete Schema verfügen. Ein Schemabesitzer oder ein Benutzer mit dem MANAGE-Privileg kann IhnenCREATE TABLEPrivilegien 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,STRUCToderARRAY.STRINGSpalten verwenden dieUTF8_BINARYSortierung. - Eine
STRUCTSpalte enthält mindestens einSTRING,VARIANToderARRAYein 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:
-
targetmuss vom TypSTRING,VARIANT, ,STRUCToderARRAYden gleichen Typen sein, die die Indizierung zulässt. Ziele werden dedupliziert. -
patternmuss ein Nicht-NULL-Zeichenfolgenliteral sein. -
modegibt an, wiepatternmit jedemtargetübereinstimmt:-
substring(Standard):patternwird als Teilzeichenfolge innerhalb der einzelnentargetZeichenfolgen abgeglichen. -
word:patternwird in Worttoken aufgeteilt, wobei die gleiche Regel wie dersplitTokenizer verwendet wird. Die Funktion gibt "true" zurück, wenn jedes Wort inpatternmindestens 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:
-
truewenn mindestens ein Ziel, das nicht null ist, übereinstimmt. -
nullwenn kein Nicht-Null-Ziel übereinstimmt, aber mindestens ein Ziel istnull. -
falsewenn 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).