Administrar índices - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administrar índices

En esta sección, se describe cómo crear, describir y eliminar índices en Amazon QLDB. La cuota del número de índices por tabla que puede crear se define en Cuotas y límites de Amazon QLDB.

Crear índices

Como también se describe en Creación de tablas e índices, puede usar la instrucción CREATE INDEX para crear un índice en una tabla para un campo de nivel superior específico, de la siguiente manera. Tanto el nombre de la tabla como el nombre del campo indexado distinguen entre mayúsculas y minúsculas.

CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)

Cada índice que cree en una tabla tiene un identificador único asignado por el sistema. Para encontrar este identificador de índice, consulte la siguiente sección Describir índices.

importante

QLDB requiere un índice para buscar un documento de manera eficiente. Sin un índice, QLDB necesita escanear toda la tabla al leer los documentos. Esto puede provocar problemas de rendimiento en tablas grandes, como conflictos de concurrencia y tiempos de espera de las transacciones.

Para evitar el escaneado de tablas, debe ejecutar las instrucciones con una cláusula de predicado WHERE usando un operador de igualdad (= o IN) en un campo indexado o en un ID de documento. Para obtener más información, consulte Optimizar el rendimiento de las consul‎tas‎.

Tenga en cuenta las siguientes restricciones al crear índices:

  • Solo se puede crear un índice en un único campo de nivel superior. No se admiten índices compuestos, anidados, únicos ni basados en funciones.

  • Puede crear un índice en cualquier tipo de datos de Ion, incluidos list y struct. Sin embargo, solo puede realizar la búsqueda indexada igualando el valor total de Ion, independientemente del tipo de Ion. Por ejemplo, cuando se utiliza un tipo list como índice, no se puede realizar una búsqueda indexada por un elemento de la lista.

  • El rendimiento de las consultas solo mejora cuando se utiliza un predicado de igualdad; por ejemplo, WHERE indexedField = 123 o WHERE indexedField IN (456, 789).

    QLDB no respeta las desigualdades en los predicados de consulta. Como resultado, no se implementan los escaneos filtrados por rango.

  • Los nombres de los campos indexados distinguen entre mayúsculas y minúsculas y pueden tener 128 caracteres como máximo.

  • La creación de índices en QLDB es asíncrona. La cantidad de tiempo que tarda en crearse un índice en una tabla que no está vacía varía según el tamaño de la tabla. Para obtener más información, consulte Administrar índices.

Describir índices

La creación de índices en QLDB es asíncrona. La cantidad de tiempo que tarda en crearse un índice en una tabla que no está vacía varía según el tamaño de la tabla. Para comprobar el estado de la creación de un índice, puede consultar la tabla del catálogo del sistema information_schema.user_tables.

Por ejemplo, la siguiente instrucción consulta todos los índices de la tabla VehicleRegistration en el catálogo del sistema.

SELECT VALUE indexes FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration'
{
    indexId: "Djg2nt0yIs2GY0T29Kud1z",
    expr: "[VIN]",
    status: "ONLINE"
},
{
    indexId: "4tPW3fUhaVhDinRgKRLhGU",
    expr: "[LicensePlateNumber]",
    status: "FAILED",
    message: "aws.ledger.errors.InvalidEntityError: Document contains multiple values for indexed field: LicensePlateNumber"
}
Campos de índice
  • indexId: el ID exclusivo del índice.

  • expr: la ruta del documento indexado. Este campo es una cadena en formato: [fieldName].

  • status: el estado actual del índice. El estado puede ser uno de los siguientes valores:

    • BUILDING: está creando activamente el índice de la tabla.

    • FINALIZING: ha terminado de crear el índice y está empezando a activarlo para su uso.

    • ONLINE: está activo y listo para usarse en consultas. QLDB no utiliza el índice en las consultas hasta que el estado es en línea.

    • FAILED: no puede crear el índice debido a un error irrecuperable. Los índices en este estado siguen contando para su cuota de índices por tabla. Para obtener más información, consulte Errores comunes.

    • DELETING: elimina activamente el índice después de que un usuario lo haya descartado.

  • message: el mensaje de error que describe el motivo por el que el índice tiene un estado FAILED. Este campo solo se incluye para índices fallidos.

También puede utilizar el AWS Management Console para comprobar el estado de un índice.

Para comprobar el estado de un índice (consola)
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon QLDB en https://console.aws.amazon.com/qldb.

  2. En el panel de navegación, seleccione Libros mayores.

  3. En la lista de libros mayores, seleccione el nombre del libro mayor cuyos índices desee administrar.

  4. En la página de detalles del libro mayor, en la pestaña Tablas, seleccione el nombre de la tabla cuyo índice desee comprobar.

  5. En la página de detalles de la tabla, busque la tarjeta Campos indexados. La columna Estado del índice muestra el estado actual de cada índice de la tabla.

Eliminar índices

Use la instrucción DROP INDEX para descartar un índice. Cuando descarta un índice, se elimina permanentemente de la tabla.

En primer lugar, busque el identificador del índice en information_schema.user_tables. Por ejemplo, la siguiente consulta devuelve indexId del campo LicensePlateNumber indexado de la tabla VehicleRegistration.

SELECT indexes.indexId FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration' and indexes.expr = '[LicensePlateNumber]'

A continuación, utilice este identificador para descartar el índice. A continuación, se muestra un ejemplo en el que se descarta el identificador del índice 4tPW3fUhaVhDinRgKRLhGU. En este caso, el identificador del índice es un identificador único que se escribe entre comillas dobles.

DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
nota

La cláusula WITH (purge = true) es obligatoria para todas las instrucciones DROP INDEX y actualmente true es el único valor admitido.

La palabra clave purge distingue entre mayúsculas y minúsculas y debe escribirse completamente en minúsculas.

También puede utilizar AWS Management Console para descartar un índice.

Para descartar un índice (consola)
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon QLDB en https://console.aws.amazon.com/qldb.

  2. En el panel de navegación, seleccione Libros mayores.

  3. En la lista de libros mayores, seleccione el nombre del libro mayor cuyos índices desee administrar.

  4. En la página de detalles del libro mayor, en la pestaña Tablas, elija el nombre de la tabla cuyo índice desee descartar.

  5. En la página de detalles de la tabla, busque la tarjeta Campos indexados. Seleccione el índice que desee descartar y, a continuación, elija Descartar índice.

Errores comunes

En esta sección, se describen los errores más frecuentes que se pueden encontrar al crear índices y se sugieren posibles soluciones.

nota

Los índices con estado FAILED siguen contando para su cuota de índices por tabla. Un índice erróneo también impide modificar o eliminar cualquier documento de la tabla que haya provocado un error en la creación del índice.

Debe descartar el índice de forma explícita para eliminarlo de la cuota.

El documento contiene varios valores para el campo indexado: fieldName.

QLDB no puede crear un índice para el nombre de campo especificado porque la tabla contiene un documento con varios valores para el mismo campo (es decir, nombres de campo duplicados).

Primero debe descartar el índice fallido. A continuación, asegúrese de que todos los documentos de la tabla tengan solo un valor para cada nombre de campo antes de volver a intentar crear el índice. También puede crear un índice para otro campo que no tenga duplicados.

QLDB también devuelve este error si intenta insertar un documento que contenga varios valores para un campo que ya está indexado en la tabla.

Se ha superado el límite de índices: la tabla tableName ya tiene n índices y no puede crear más.

QLDB impone un límite de cinco índices por tabla, incluidos los índices fallidos. Debe descartar un índice existente antes de crear uno nuevo.

No hay un índice definido con el identificador: indexID.

Intentó eliminar un índice que no existe para la combinación especificada de tabla e identificador de índice. Para obtener información sobre cómo comprobar los índices existentes, consulte Describir índices.