Gestion des index - Amazon Quantum Ledger Database (Amazon QLDB)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestion des index

Cette section décrit comment créer, décrire et supprimer des index dans Amazon QLDB. Le quota du nombre d'index que vous pouvez créer par table est défini dansQuotas et limites d'Amazon QLDB.

Création d'index

Comme décrit également dansCréation de tables et d'index, vous pouvez utiliser l'instruction CREATE INDEX pour créer un index dans une table pour un champ de niveau supérieur spécifié, comme suit. Le nom de la table et le nom du champ indexé distinguent les majuscules et minuscules.

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

Chaque index que vous créez sur une table possède un identifiant unique attribué par le système. Pour trouver cet ID d'index, consultez la section suivanteDescription des index.

Important

QLDB a besoin d'un index pour rechercher efficacement un document. Sans index, QLDB doit effectuer une analyse complète de la table lors de la lecture de documents. Cela peut entraîner des problèmes de performances sur des tables de grande taille, notamment des conflits de simultanéité et des délais de transaction.

Pour éviter de scanner des tables, vous devez exécuter des instructions avec une clause deWHERE prédicat à l'aide d'un opérateur d'égalité (=ouIN) sur un champ indexé ou un identifiant de document. Pour plus d'informations, veuillez consulter Optimisation des performances des données.

Tenez compte des contraintes suivantes lors de la création d'index :

  • Un index ne peut être créé que sur un seul champ de niveau supérieur. Les index composites, imbriqués, uniques et basés sur des fonctions ne sont pas pris en charge.

  • Vous pouvez créer un index sur tous les types de données Ion, y comprislist etstruct. Toutefois, vous ne pouvez effectuer la recherche indexée que par égalité de la valeur totale des ions, quel que soit le type d'ion. Par exemple, lorsque vous utilisez unlist type comme index, vous ne pouvez pas effectuer de recherche indexée par un élément de la liste.

  • Les performances des requêtes ne sont améliorées que lorsque vous utilisez un prédicat d'égalité ; par exemple,WHERE indexedField = 123 ouWHERE indexedField IN (456, 789).

    QLDB ne respecte pas les inégalités dans les prédicats de requête. Par conséquent, les analyses filtrées par plage de valeurs ne sont pas mises en œuvre.

  • Les noms de champs indexés sont sensibles à la casse et peuvent contenir un maximum de 128 caractères.

  • La création d'index dans QLDB est asynchrone. Le temps nécessaire à la création d'un index sur une table non vide varie en fonction de la taille de la table. Pour plus d'informations, veuillez consulter Gestion des index.

Description des index

La création d'index dans QLDB est asynchrone. Le temps nécessaire à la création d'un index sur une table non vide varie en fonction de la taille de la table. Pour vérifier l'état de la génération d'un index, vous pouvez interroger la table du catalogue système information_schema.user_tables.

Par exemple, l'instruction suivante interroge le catalogue système pour tous les index de laVehicleRegistration table.

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"
}
Champs d'index
  • indexId— ID unique de l'index.

  • expr— Le chemin du document indexé. Ce champ est une chaîne de la forme :[fieldName].

  • status— État actuel de l'index. L'état d'un index peut avoir l'une des valeurs suivantes :

    • BUILDING— Construit activement l'index de la table.

    • FINALIZING— A fini de créer l'index et commence à l'activer pour utilisation.

    • ONLINE— Est actif et prêt à être utilisé dans les requêtes. QLDB n'utilise pas l'index dans les requêtes tant que le statut n'est pas en ligne.

    • FAILED— Impossible de créer l'index en raison d'une erreur irrécupérable. Les index dans cet état sont toujours pris en compte dans votre quota d'index par table. Pour plus d'informations, veuillez consulter Erreurs courantes.

    • DELETING— Supprime activement l'index après qu'un utilisateur l'ait supprimé.

  • message— Le message d'erreur qui décrit la raison pour laquelle l'index possède unFAILED statut. Ce champ est inclus uniquement pour les index défaillants.

Vous pouvez également utiliserAWS Management Console pour vérifier l'état d'un index.

Pour vérifier l'état d'un index (console)
  1. Connectez-vous au et ouvrezAWS Management Console la console Amazon QLDB à l'adresse https://console.aws.amazon.com/qldb.

  2. Dans le panneau de navigation, Ledgers.

  3. Dans la liste des livres, choisissez le nom du livre dont vous souhaitez gérer les index.

  4. Sur la page des détails du registre, sous l'onglet Tables, choisissez le nom de la table dont vous souhaitez vérifier l'index.

  5. Sur la page des détails du tableau, recherchez la fiche Champs indexés. La colonne État de l'index affiche l'état actuel de chaque index de la table.

Supprimer des index

Utilisez l'DROP INDEXinstruction pour supprimer un index. Lorsque vous supprimez un index, il est définitivement supprimé de la table.

Tout d'abord, recherchez l'ID d'index à partir deinformation_schema.user_tables. Par exemple, la requête suivante renvoieindexId leLicensePlateNumber champ indexé de laVehicleRegistration table.

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

Utilisez ensuite cet ID pour supprimer l'index. L'exemple suivant montre comment l'ID d'index est supprimé4tPW3fUhaVhDinRgKRLhGU. ID d'index est un ID unique qui doit être entouré de guillemets doubles.

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

La clauseWITH (purge = true) est obligatoire pour toutes lesDROP INDEX instructions ettrue est actuellement la seule valeur prise en charge.

Le mot clépurge distingue majuscules et minuscules et doit être entièrement en minuscules.

Vous pouvez également utiliser leAWS Management Console pour supprimer un index.

Pour supprimer un index (console)
  1. Connectez-vous au et ouvrezAWS Management Console la console Amazon QLDB à l'adresse https://console.aws.amazon.com/qldb.

  2. Dans le panneau de navigation, Ledgers.

  3. Dans la liste des livres, choisissez le nom du livre dont vous souhaitez gérer les index.

  4. Sur la page des détails du registre, sous l'onglet Tables, choisissez le nom de la table dont vous souhaitez supprimer l'index.

  5. Sur la page des détails du tableau, recherchez la fiche Champs indexés. Sélectionnez l'index que vous souhaitez supprimer, puis choisissez Supprimer l'index.

Erreurs courantes

Cette section décrit les erreurs courantes que vous pouvez rencontrer lors de la création d'index et suggère des solutions possibles.

Note

Les index dont le statut est sontFAILED toujours pris en compte dans votre quota d'index par table. Un index défaillant vous empêche également de modifier ou de supprimer les documents à l'origine de l'échec de la création de l'index dans la table.

Vous devez supprimer explicitement l'index pour le supprimer du quota.

Le document contient plusieurs valeurs pour le champ indexé : fieldName.

QLDB n'est pas en mesure de créer un index pour le nom de champ spécifié car la table contient un document contenant plusieurs valeurs pour le même champ (c'est-à-dire des noms de champ dupliqués).

Vous devez d'abord supprimer l'index défaillant. Assurez-vous ensuite que tous les documents de la table n'ont qu'une seule valeur pour chaque nom de champ avant de réessayer de créer l'index. Vous pouvez également créer un index pour un autre champ qui ne comporte aucun doublon.

QLDB renvoie également cette erreur si vous essayez d'insérer un document contenant plusieurs valeurs pour un champ déjà indexé dans la table.

Limite d'index dépassée : Table TableName ne possède déjà aucun index et ne peut pas en créer d'autres.

QLDB impose une limite de cinq index par table, y compris les index défaillants. Vous devez supprimer un index existant avant d'en créer un nouveau.

Aucun index défini avec identifiant : IndexId.

Vous avez essayé de supprimer un index qui n'existe pas pour la combinaison d'ID de table et d'index spécifiée. Pour savoir comment vérifier les index existants, consultezDescription des index.