Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Important
Esta característica se encuentra en su versión beta. Los administradores del área de trabajo pueden controlar el acceso a esta característica desde la página Vistas previas . Consulte Administrar versiones preliminares de Azure Databricks.
Un índice de búsqueda de texto completo acelera las consultas en una o varias columnas de texto de una tabla administrada de Delta Lake o Iceberg. El índice admite la coincidencia de subcadenas y la coincidencia de palabras. Al consultar la tabla con las funciones de search o isearch, Azure Databricks usa el índice para omitir los archivos que se garantizan que no contengan filas coincidentes. Esto reduce significativamente la cantidad de datos examinados, especialmente para búsquedas selectivas.
Important
No se garantiza que los índices creados durante la versión beta sean compatibles con versiones posteriores. Cuando la característica alcanza la versión preliminar pública, debe quitar los índices existentes y crear otros nuevos.
Requirements
Los índices de búsqueda de texto completo tienen requisitos en cuanto al proceso de cómputo, los permisos sobre la tabla base y el esquema, y la configuración de la tabla base.
Compute
Los índices de búsqueda de texto completo solo están disponibles en Azure Databricks Runtime 18.2 y versiones posteriores, y debe habilitar esta característica Beta en la configuración del área de trabajo. Consulte Administrar versiones preliminares de Azure Databricks.
Permissions
Para crear un índice de búsqueda:
- Debe tener permiso
MODIFYpara la tabla a la que hace referencia el índice de búsqueda. - Debe tener el
CREATE TABLEpermiso en el esquema primario. Un propietario o usuario de esquema con el privilegio MANAGE puede concederleCREATE TABLEprivilegios en el esquema.
Configuración de tablas
Antes de crear un índice de búsqueda de texto completo, la tabla base debe satisfacer lo siguiente:
- Debe crear el índice en el mismo catálogo y esquema que la tabla base.
- La tabla es una tabla Delta Lake administrada o una tabla Iceberg administrada.
- El seguimiento de filas está habilitado (
delta.enableRowTracking = true). Consulte Seguimiento de filas en Azure Databricks. - Las columnas indizadas son de tipo
STRING,VARIANT,STRUCToARRAY.STRINGlas columnas usan la intercalaciónUTF8_BINARY. - Una columna
STRUCTcontiene al menos un campo terminalSTRING,VARIANToARRAYa cualquier profundidad de anidamiento; se ignoran los demás campos terminales. - La tabla no usa ninguna característica de la lista de limitaciones, como: OpenSharing, clonación superficial, controles de acceso basados en atributos, directivas de seguridad de nivel de fila y máscaras de columna. Consulte Limitaciones.
Para obtener información sobre los requisitos de protocolo de las tablas, que se aplican tanto a las tablas de Delta Lake como a las de Iceberg, consulte Compatibilidad de funciones y protocolos de Delta Lake.
Creación de un índice de búsqueda de texto completo
Puede crear hasta cuatro índices en una sola tabla, cada uno en una columna diferente.
Use CREATE SEARCH INDEX para crear un índice en una o varias columnas de texto. En el ejemplo siguiente se indexa dos columnas de texto de una tabla de registro existente:
CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);
La sintaxis completa es:
CREATE SEARCH INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name [, column_name ...] )
[OPTIONS ( option_key = option_value [, ... ] )]
index_name debe ser único dentro del esquema y no puede coincidir con un nombre de tabla existente.
Para controlar cómo se tokeniza el texto, consulte Opciones.
Advertencia
Si CREATE SEARCH INDEX y REFRESH INDEX fallan a mitad de la ejecución, ejecute REFRESH INDEX para recuperarse de un fallo parcial.
Opciones
La OPTIONS cláusula acepta las siguientes claves:
| Clave | Valores | Predeterminado | Description |
|---|---|---|---|
tokenizer |
ngram, split |
ngram |
Cómo se tokeniza el texto para la indexación. Consulte Selección de un tokenizador para su caso de uso. |
ngram_size |
entero en [3, 10] |
5 |
Longitud de los n-gramos producidos. Solo es válido cuando tokenizer = 'ngram'. |
min_token_length |
entero >= 1 |
3 |
Longitud mínima de los tokens que se van a conservar. Los tokens más cortos que este se descartan durante la indexación. Solo es válido cuando tokenizer = 'split'. |
Para obtener información detallada sobre los errores de opciones no válidas, consulte la condición de error SEARCH_INDEX_INVALID_PARAMETERS.
Selección de un tokenizador para el caso de uso
Los índices de búsqueda tienen dos opciones de tokenizador disponibles, en función de su caso de uso:
| Tokenizador | Caso de uso | Description |
|---|---|---|
ngram |
Coincidencia de subcadenas. | Divide el texto en n-gramas de longitud ngram_sizesuperpuestos. |
split |
Comprobaciones de contención de palabras completas. | Divide el texto en tokens de palabras. Un token es una secuencia de letras Unicode (\p{L}) y marcas de combinación (\p{M}); cualquier otro carácter es un delimitador. |
Para crear un índice de n-gramas con un tamaño de n-gramas de 4:
CREATE SEARCH INDEX log_ngram_idx
ON logs (message)
OPTIONS (tokenizer = 'ngram', ngram_size = 4);
Para crear un split índice con una longitud mínima de token de 2:
CREATE SEARCH INDEX log_word_idx
ON logs (message)
OPTIONS (tokenizer = 'split', min_token_length = 2);
Consulta de datos mediante search y isearch
Azure Databricks tiene dos funciones SQL para probar si un patrón de búsqueda está presente en uno o varios destinos de texto:
-
search: Distinguir mayúsculas de minúsculas. -
isearch: no distingue mayúsculas de minúsculas.
Seleccione search o isearch según si necesita distinguir entre mayúsculas y minúsculas. Cuando las columnas indexadas están cubiertas por un índice de búsqueda de texto completo, Azure Databricks usa el índice para omitir los archivos que con seguridad no contienen filas coincidentes. Los índices de búsqueda no afectan a los resultados.
Los índices aceleran las consultas más cuando el patrón de búsqueda aparece en una pequeña fracción de los archivos de la tabla.
search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
Argumentos
search y isearch aceptan los argumentos siguientes:
-
targetdebe ser de tipoSTRING,VARIANT,STRUCToARRAY, los mismos tipos que permite la indexación. Se eliminan los duplicados de los objetivos. -
patterndebe ser un literal de cadena que no sea NULL. -
modeespecifica cómopatterncoincide con cadatarget:-
substring(valor predeterminado):patterncoincide como una subcadena dentro de cadatarget. -
word:patternse divide en tokens de palabras utilizando la misma regla que el tokenizadorsplit. La función devuelve true si cada palabra depatternaparece en al menos un destino, independientemente del orden. Consulte Selección de un tokenizador para su caso de uso.
-
Devoluciones
search y isearch devuelven un BOOLEAN valor con lógica de tres valores:
-
truesi al menos un objetivo no nulo coincide. -
nullsi ningún destino no nulo coincide, pero al menos un destino esnull. -
falsesi todos los objetivos son distintos de NULL y ninguno coincide.
Ejemplos
Los siguientes ejemplos muestran consultas comunes de search y 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');
Administración de índices
Important
Los índices de búsqueda de texto completo no se actualizan automáticamente cuando cambia la tabla base. Consulte Actualizar un índice.
Azure Databricks mantiene la corrección de las consultas, independientemente de la actualización del índice. Cuando una tabla contiene datos no indexados, la consulta usa el índice existente para acelerar el acceso a los registros indexados y usa un examen de tabla para los registros no indexados.
Use las siguientes operaciones para administrar índices de búsqueda de texto completo:
Describir o ver un índice
Para ver información sobre un índice:
DESCRIBE INDEX log_idx;
Actualizar un índice
Los índices de búsqueda de texto completo no se actualizan automáticamente cuando cambia la tabla base.
Para actualizar el índice, agregue entradas para nuevas filas:
REFRESH INDEX log_idx;
REFRESH INDEX es una operación incremental solo de anexión. Indexa nuevos datos, pero no quita entradas para las filas eliminadas.
Para actualizar el índice, tanto para añadir entradas para las filas nuevas como para eliminar las entradas de las filas eliminadas, use REFRESH INDEX ... FULL:
REFRESH INDEX log_idx FULL;
Una actualización completa requiere más recursos de proceso que una actualización incremental. Con el tiempo, las actualizaciones incrementales acumulan entradas obsoletas, lo que aumenta el tamaño del índice y afecta negativamente al rendimiento.
Eliminar un índice
Para quitar un índice, ejecute lo siguiente:
DROP INDEX log_idx;
Para evitar un error por la falta de índices, use:
DROP INDEX IF EXISTS log_idx;
Note
Si quita la tabla base, el comando también quita los índices de búsqueda de texto completo.
Limitaciones
Los índices de búsqueda de texto completo tienen las siguientes limitaciones:
- No se admite cambiar el nombre de una columna indizada en la tabla base o cambiar su tipo de datos.
- No se admiten tablas con OpenSharing. Si agrega la tabla base como origen o destino de OpenSharing después de crear el índice, Azure Databricks omite el índice de búsqueda.
- No se admiten tablas con clones poco profundos. Si agrega la tabla base como un origen de clon superficial después de crear el índice, Azure Databricks omite el índice de búsqueda.
- No se admiten tablas con controles de acceso basados en atributos, máscaras de columna o directivas de seguridad de nivel de fila. Si agrega cualquiera de estos controles a una tabla con un índice de búsqueda, Azure Databricks omite el índice de búsqueda. Consulte Conceptos básicos para el control de acceso basado en atributos (ABAC).