Tous les produits
Search
Centre de documentation

Tablestore:Créer un index secondaire

Dernière mise à jour :Aug 18, 2026

La fonctionnalité d'index secondaire vous permet d'interroger des données en vous basant sur la clé primaire d'une table de données et sur les colonnes d'index de l'index secondaire créé pour cette table. Si vous devez utiliser les colonnes d'attribut d'une table de données pour interroger des données, créez un index secondaire afin d'accélérer les requêtes. Lors de la création d'un index secondaire, définissez les colonnes d'index ou les colonnes d'attribut comme étant les colonnes prédéfinies spécifiées lors de la création de la table de données. Une fois l'index secondaire créé, utilisez-le pour interroger les données.

Remarque
  • Les index secondaires se divisent en index secondaires globaux et index secondaires locaux. Pour plus d'informations sur la fonctionnalité d'index secondaire, consultez Présentation.

  • Vous pouvez créer une ou plusieurs tables d'index lors de la création d'une table de données en appelant l'opération CreateTable. Pour plus d'informations, consultez Créer des tables de données.

Prérequis

  • Initialisez une instance OTSClient. Pour plus d'informations, consultez Initialiser une instance OTSClient.

  • Créez une table de données dont le paramètre maxVersions est défini sur 1. Le paramètre timeToLive de la table de données doit respecter l'une des conditions suivantes :

    • Le paramètre timeToLive de la table de données est défini sur -1, ce qui signifie que les données de la table n'expirent jamais.

    • Le paramètre timeToLive de la table de données est défini sur une valeur différente de -1 et les opérations de mise à jour sur la table de données sont interdites.

  • Spécifiez des colonnes prédéfinies pour la table de données.

Description

Un index secondaire utilise un schéma de clé primaire différent, composé de colonnes de clé primaire et de colonnes prédéfinies issues d'une table de données, afin de fournir des dimensions de requête supplémentaires. Les index secondaires se divisent en index secondaires globaux et index secondaires locaux. Ces deux types d'index présentent des modes de synchronisation des données et des exigences en matière de clé primaire différents. Pour plus d'informations, consultez Présentation.

Appelez createIndex pour créer un index secondaire pour une table de données existante. Pour créer un ou plusieurs index secondaires conjointement avec une table de données, configurez les schémas d'index dans la requête createTable. Pour plus d'informations, consultez Créer une table de données.

public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
        throws TableStoreException, ClientException

L'exemple de code suivant crée l'index secondaire global example_global_index pour example_table. L'index inclut les données existantes.

IndexMeta indexMeta = new IndexMeta("example_global_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");

CreateIndexRequest request =
        new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);

Paramètres

Paramètre

Description

mainTableName

Nom de la table de données.

indexMeta

Informations de schéma relatives à la table d'index. Ces informations contiennent les éléments suivants :

  • name : nom de la table d'index.

  • primaryKey : clé primaire de la table d'index. La clé primaire est une combinaison de toutes les colonnes de clé primaire et d'un nombre aléatoire de colonnes prédéfinies de la table de données.

    Si vous souhaitez créer un index secondaire local, la première colonne de clé primaire de la table d'index doit être identique à la première colonne de clé primaire de la table de données.

  • definedColumn : colonnes d'attribut de la table d'index. Les colonnes d'attribut sont une combinaison de colonnes prédéfinies de la table de données.

  • includeBaseData : indique s'il faut inclure les données existantes de la table de données dans la table d'index.

    Si vous définissez le paramètre includeBaseData sur true, la table d'index inclut les données existantes de la table de données. Si vous définissez le paramètre includeBaseData sur false, la table d'index n'inclut pas les données existantes de la table de données.

  • indexType : type de la table d'index. Valeurs valides : IT_GLOBAL_INDEX et IT_LOCAL_INDEX.

    • Si vous ne spécifiez pas le paramètre indexType ou si vous le définissez sur IT_GLOBAL_INDEX, un index secondaire global est créé.

      Tablestore synchronise automatiquement les données des colonnes indexées et des colonnes de clé primaire de la table de données vers les colonnes de la table d'index que vous souhaitez créer, en mode asynchrone. La latence de synchronisation est de quelques millisecondes.

    • Si vous définissez le paramètre indexType sur IT_LOCAL_INDEX, un index secondaire local est créé.

      Tablestore synchronise automatiquement les données des colonnes indexées et des colonnes de clé primaire de la table de données vers les colonnes de la table d'index que vous souhaitez créer, en mode synchrone. Une fois les données écrites dans la table de données, vous pouvez immédiatement les interroger dans la table d'index.

  • indexUpdateMode : mode de mise à jour de la table d'index. Valeurs valides : IUM_ASYNC_INDEX et IUM_SYNC_INDEX.

    • Si vous ne spécifiez pas le paramètre indexUpdateMode ou si vous le définissez sur IUM_ASYNC_INDEX, le mode asynchrone est utilisé pour mettre à jour l'index.

      Si vous utilisez la fonctionnalité d'index secondaire global, vous devez définir le paramètre indexUpdateMode sur IUM_ASYNC_INDEX.

    • Si vous définissez le paramètre indexUpdateMode sur IUM_SYNC_INDEX, le mode synchrone est utilisé pour mettre à jour l'index.

      Si vous utilisez la fonctionnalité d'index secondaire local, vous devez définir le paramètre indexUpdateMode sur IUM_SYNC_INDEX.

Exemples

Créer un index secondaire global

L'exemple de code suivant montre comment créer un index secondaire global qui n'inclut pas les données existantes de la table de données pour laquelle l'index est créé. Dans cet exemple, les colonnes de clé primaire de la table de données sont pk1 et pk2. La colonne de clé primaire et la colonne d'attribut spécifiées pour l'index secondaire global sont respectivement col1 et col2. Les colonnes de clé primaire de la table d'index sont constituées de col1, pk1 et pk2. La colonne d'attribut de la table d'index est col2.

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // Specify the name of the data table. 
    indexMeta: {
        name: "<INDEX_NAME>", // Specify the name of the index table. 
        primaryKey: ["col1"], // Specify a primary key column for the index table. 
        definedColumn: ["col2"], // Specify an attribute column for the index table. 
        includeBaseData: false, // Specify that the index table does not include the existing data of the data table for which the index table is created. If you want to include the existing data of the data table in the index table, set the includeBaseData parameter to true. 
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_ASYNC_INDEX,// By default, the index update mode is asynchronous update (IUM_ASYNC_INDEX). 
        indexType: TableStore.IndexType.IT_GLOBAL_INDEX,// By default, the index type is global secondary index (IT_GLOBAL_INDEX). 
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Créer un index secondaire local

L'exemple de code suivant montre comment créer un index secondaire local qui n'inclut pas les données existantes de la table de données pour laquelle l'index est créé. Dans cet exemple, les colonnes de clé primaire de la table de données sont pk1 et pk2. Les colonnes de clé primaire spécifiées pour l'index secondaire local sont col1 et pk1. La colonne d'attribut spécifiée pour l'index secondaire local est col2. Les colonnes de clé primaire de la table d'index sont constituées de col1, pk1 et pk2. La colonne d'attribut de la table d'index est col2.

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // Specify the name of the data table. 
    indexMeta: {
        name: "<INDEX_TABLE>", // Specify the name of the index table. 
        primaryKey: ["pk1","col1"], // Specify primary key columns for the index table. The first primary key column of the index table must be the same as the first primary key column of the data table. 
        definedColumn: ["col2"], // Specify an attribute column for the index table. 
        includeBaseData: false, // Specify that the index table does not include the existing data of the data table for which the index table is created. If you want to include the existing data of the data table in the index table, set the includeBaseData parameter to true. 
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX// Set the indexUpdateMode parameter to IUM_SYNC_INDEX, which indicates that the index is updated in synchronous mode. If you set the indexType parameter to IT_LOCAL_INDEX, you must set the indexUpdateMode parameter to IUM_SYNC_INDEX. 
        indexType: TableStore.IndexType.IT_LOCAL_INDEX, // Set the indexType parameter to IT_LOCAL_INDEX, which indicates a local secondary index. 
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Références