Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità è in versione beta. Gli amministratori dell'area di lavoro possono controllare l'accesso a questa funzionalità dalla pagina Anteprime . Vedere Gestire le anteprime di Azure Databricks.
Un indice di ricerca full-text accelera le ricerche in una o più colonne di testo di una tabella Delta Lake o Iceberg gestita. L'indice supporta la ricerca per sottostringa e la ricerca di parole. Quando si esegue una query sulla tabella con le funzioni search o isearch, Azure Databricks usa l'indice per ignorare i file che non contengono righe corrispondenti. Ciò riduce significativamente la quantità di dati analizzati, soprattutto per ricerche selettive.
Importante
Gli indici creati durante la versione beta non sono necessariamente compatibili con le versioni successive. Quando la funzionalità raggiunge l'anteprima pubblica, è necessario eliminare gli indici esistenti e crearne di nuovi.
Requirements
Gli indici di ricerca full-text richiedono risorse di calcolo, autorizzazioni sulla tabella di base e sullo schema e una configurazione della tabella di base adeguata.
Compute
Gli indici di ricerca full-text sono disponibili solo in Azure Databricks Runtime 18.2 e versioni successive ed è necessario abilitare questa funzionalità Beta nelle impostazioni dell'area di lavoro. Vedere Gestire le anteprime di Azure Databricks.
Permissions
Per creare un indice di ricerca:
- È necessario disporre dell'autorizzazione
MODIFYper la tabella a cui si fa riferimento nell'indice di ricerca. - È necessario disporre dell'autorizzazione
CREATE TABLEper lo schema padre. Un proprietario dello schema o un utente con il privilegio MANAGE può concederti privilegiCREATE TABLEsullo schema.
Configurazione delle tabelle
Prima di creare un indice di ricerca full-text, la tabella di base deve soddisfare tutte le operazioni seguenti:
- È necessario creare l'indice nello stesso catalogo e nello stesso schema della tabella di base.
- La tabella è una tabella Delta Lake gestita o una tabella Iceberg gestita.
- Il rilevamento delle righe è abilitato (
delta.enableRowTracking = true). Vedi Tracciamento delle righe in Azure Databricks. - Le colonne indicizzate sono di tipo
STRING,VARIANT,STRUCToARRAY.STRINGcolonne usano la regola di confrontoUTF8_BINARY. - Una colonna
STRUCTcontiene almeno un campo fogliaSTRING,VARIANToARRAYa qualsiasi livello di annidamento; gli altri campi foglia vengono ignorati. - La tabella non usa funzionalità dell'elenco delle limitazioni, tra cui: OpenSharing, clonazione superficiale, controlli di accesso basati su attributi, criteri di sicurezza a livello di riga e maschere di colonna. Vedere Limitazioni.
Per informazioni sui requisiti del protocollo di tabella, che si applicano alle tabelle Delta Lake e Iceberg, vedere Compatibilità e protocolli delle funzionalità delta Lake.
Crea un indice di ricerca a testo completo
È possibile creare fino a quattro indici in una singola tabella, ognuno in una colonna diversa.
Usare CREATE SEARCH INDEX per creare un indice su una o più colonne di testo. Nell'esempio seguente vengono indicizzate due colonne di testo di una tabella di log esistente:
CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);
La sintassi completa è:
CREATE SEARCH INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name [, column_name ...] )
[OPTIONS ( option_key = option_value [, ... ] )]
index_name deve essere univoco all'interno dello schema e non può corrispondere a un nome di tabella esistente.
Per controllare la modalità di tokenizzazione del testo, vedere Opzioni.
Avvertimento
Se CREATE SEARCH INDEX e REFRESH INDEX hanno esito negativo durante l'esecuzione, eseguire REFRESH INDEX per eseguire il ripristino da un errore parziale.
Opzioni
La OPTIONS clausola accetta le chiavi seguenti:
| Chiave | Valori | Predefinito | Description |
|---|---|---|---|
tokenizer |
ngram, split |
ngram |
Modalità di tokenizzazione del testo per l'indicizzazione. Consulta Seleziona un tokenizer in base al tuo caso d'uso. |
ngram_size |
integer in [3, 10] |
5 |
Lunghezza degli n-grammi generati. Valido solo quando tokenizer = 'ngram'. |
min_token_length |
Intero >= 1 |
3 |
Lunghezza minima dei token da mantenere. I token più brevi di questo vengono eliminati durante l'indicizzazione. Valido solo quando tokenizer = 'split'. |
Per informazioni dettagliate sugli errori di opzione non validi, vedere la condizione di errore SEARCH_INDEX_INVALID_PARAMETERS.
Seleziona un tokenizer per il tuo caso d'uso
Gli indici di ricerca hanno 2 opzioni di tokenizer disponibili, a seconda del caso d'uso:
| Tokenizzatore | Caso di utilizzo | Description |
|---|---|---|
ngram |
Confronto di sottostringhe. | Suddivide il testo in n-grammi sovrapposti di lunghezza ngram_size. |
split |
Controlli di contenimento di parole intere. | Suddivide il testo in token di parola. Un token è un'esecuzione di lettere Unicode () e segni di combinazione (\p{L}\p{M}); qualsiasi altro carattere è un delimitatore. |
Per creare un indice n-gram con una dimensione n-gram di 4:
CREATE SEARCH INDEX log_ngram_idx
ON logs (message)
OPTIONS (tokenizer = 'ngram', ngram_size = 4);
Per creare un split indice con una lunghezza minima di token pari a 2:
CREATE SEARCH INDEX log_word_idx
ON logs (message)
OPTIONS (tokenizer = 'split', min_token_length = 2);
Interrogare i dati usando search e isearch
Azure Databricks dispone di due funzioni SQL per verificare se un criterio di ricerca è presente in una o più destinazioni di testo:
-
search: Distinzione tra maiuscole e minuscole. -
isearch: senza distinzione tra maiuscole e minuscole.
Seleziona search o isearch in base al requisito di distinzione tra maiuscole e minuscole. Quando le colonne indicizzate sono coperte da un indice di ricerca full-text, Azure Databricks utilizza l'indice per saltare i file che sicuramente non contengono righe corrispondenti. Gli indici di ricerca non influiscono sui risultati.
Gli indici accelerano la maggior parte delle query quando il criterio di ricerca viene visualizzato in una piccola frazione dei file della tabella.
search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
Arguments
search e isearch accettano i seguenti argomenti:
-
targetdeve essere di tipoSTRING,VARIANTSTRUCT, oARRAY, gli stessi tipi consentiti dall'indicizzazione. Le destinazioni vengono deduplicate. -
patterndeve essere una stringa letterale non nulla. -
modespecifica comepatterncorrisponde a ognitarget:-
substring(impostazione predefinita):patternviene trovato come sottostringa all'interno di ognitarget. -
word:patternè suddiviso in token di parola usando la stessa regola delsplittokenizer. La funzione restituisce true se ogni parola inpatternviene visualizzata in almeno una destinazione, indipendentemente dall'ordine. Consulta Seleziona un tokenizer in base al tuo caso d'uso.
-
Returns
search e isearch restituiscono un BOOLEAN valore con logica a tre valori:
-
truese almeno una destinazione non Null corrisponde. -
nullse nessun target non null corrisponde, ma almeno un target ènull. -
falsese tutte le destinazioni sono non nulle e nessuna coincide.
Examples
I seguenti esempi mostrano query comuni di search e isearch:
-- 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');
Gestire gli indici
Importante
Gli indici di ricerca full-text non vengono aggiornati automaticamente quando cambia la tabella di base. Vedere Aggiornare un indice.
Azure Databricks mantiene la correttezza delle query, indipendentemente dall'aggiornamento dell'indice. Quando una tabella contiene dati non indicizzati, la query usa l'indice esistente per accelerare l'accesso ai record indicizzati e usa un'analisi di tabella per i record non indicizzati.
Usare le operazioni seguenti per gestire gli indici di ricerca full-text:
Descrivere o visualizzare un indice
Per visualizzare informazioni su un indice:
DESCRIBE INDEX log_idx;
Aggiornare un indice
Gli indici di ricerca full-text non vengono aggiornati automaticamente quando cambia la tabella di base.
Per aggiornare l'indice, aggiungere voci per le nuove righe:
REFRESH INDEX log_idx;
REFRESH INDEX è un'operazione incrementale di sola aggiunta. Indicizza i nuovi dati, ma non rimuove le voci relative alle righe cancellate.
Per aggiornare l'indice, sia aggiungendo voci relative alle nuove righe sia rimuovendo voci relative alle righe eliminate, utilizzare REFRESH INDEX ... FULL:
REFRESH INDEX log_idx FULL;
Un aggiornamento completo richiede più risorse di calcolo rispetto a un aggiornamento incrementale. Nel corso del tempo, gli aggiornamenti incrementali accumulano voci non aggiornate, che aumentano le dimensioni dell'indice e influiscono negativamente sulle prestazioni.
Eliminare un indice
Per eliminare un indice, eseguire quanto segue:
DROP INDEX log_idx;
Per evitare un errore per gli indici mancanti, usare:
DROP INDEX IF EXISTS log_idx;
Annotazioni
Se si elimina la tabella di base, il comando elimina anche gli indici di ricerca full-text.
Limitazioni
Gli indici di ricerca full-text presentano le limitazioni seguenti:
- La ridenominazione di una colonna indicizzata nella tabella di base o la modifica del tipo di dati non è supportata.
- Le tabelle con OpenSharing non sono supportate. Se si aggiunge la tabella di base come origine o destinazione OpenSharing dopo la creazione dell'indice, Azure Databricks ignora l'indice di ricerca.
- Le tabelle con cloni superficiali non sono supportate. Se si aggiunge la tabella di base come origine clone superficiale dopo la creazione dell'indice, Azure Databricks ignora l'indice di ricerca.
- Le tabelle con controlli di accesso basato su attributi, maschere di colonna o criteri di sicurezza a livello di riga non sono supportate. Se si aggiunge uno di questi controlli a una tabella con un indice di ricerca, Azure Databricks ignora l'indice di ricerca. Vedere Concetti di base per il controllo degli accessi in base agli attributi.See Core concepts for attribute-based access control (ABAC).