Tous les produits
Search
Centre de documentation

Tablestore:Use a secondary index to read data

Dernière mise à jour :Oct 10, 2026

Tablestore propose des méthodes de lecture de ligne unique et de plage pour lire les données depuis les tables d'index. Si une table d'index contient les colonnes d'attribut que vous souhaitez récupérer, lisez les données directement depuis cette table. Sinon, interrogez la table principale.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Précautions

  • Les tables d'index servent uniquement à la lecture des données.

  • La première colonne de clé primaire d'une table d'index secondaire local doit être identique à la première colonne de clé primaire de la table principale.

  • Si les colonnes d'attribut à récupérer ne figurent pas dans la table d'index, recherchez les données dans la table principale.

Remarques d'utilisation

  • Les tables d'index sont en lecture seule. Utilisez GetRow ou GetRange pour lire les données d'une table d'index.

  • Pour un index secondaire local (LSI), la première colonne de clé primaire de la table d'index doit correspondre à la première colonne de clé primaire de la table de données.

  • Définissez table_name avec le nom de la table d'index, et non celui de la table de données.

  • Tablestore ajoute automatiquement à la table d'index les colonnes de clé primaire de la table de données qui ne sont pas spécifiées comme colonnes d'index. Lors de la spécification des valeurs de clé primaire, incluez à la fois les colonnes d'index et les colonnes de clé primaire ajoutées de la table de données.

  • Si les colonnes d'attribut à renvoyer ne sont pas projetées dans la table d'index, interrogez directement la table de données pour récupérer ces colonnes.

Lire une ligne unique

Appelez l'opération GetRow pour lire une ligne unique depuis une table d'index. Pour le détail des paramètres, consultez la rubrique Lire une ligne unique.

Exemple

L'exemple suivant lit une ligne depuis une table d'index en spécifiant sa clé primaire :

$request = [
    'table_name' => '<INDEX_NAME>',       // Name of the index table.
    'primary_key' => [                    // Primary key of the row to read.
                                          // For an LSI, the first column must match the first
                                          // primary key column of the data table.
        ['PK0', 123],
        ['Col1', "abc"],
        ['PK1', 'abc']
    ],
    'max_versions' => 1,                  // Read only the latest version.
    'columns_to_get' => ['Col1']          // Attribute columns to return.
];
$response = $otsClient->getRow($request);

Lire des données dans une plage de clés primaires

Appelez l'opération GetRange pour lire les lignes dont les valeurs de clé primaire se situent dans une plage spécifiée. Pour le détail des paramètres, consultez la rubrique Lire des données dans une plage.

Chaque appel GetRange renvoie au maximum 5 000 lignes ou 4 Mo de données, selon la limite atteinte en premier. Si la réponse inclut next_start_primary_key, utilisez cette valeur comme nouvelle inclusive_start_primary_key dans un appel GetRange ultérieur pour récupérer les lignes restantes.

Exemple

L'exemple suivant lit les lignes d'une table d'index où la colonne d'index Col1 est égale à "abc", pour toutes les valeurs de PK0 et PK1 :

// Define the start primary key. Use INF_MIN for open-ended range columns.
// For an LSI, the first column must match the first primary key column of the data table.
$startPK = [
    ['Col1', "abc"],
    ['PK0', null, PrimaryKeyTypeConst::CONST_INF_MIN],  // Start from the minimum value.
    ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MIN]   // Start from the minimum value.
];

// Define the end primary key. Use INF_MAX for open-ended range columns.
$endPK = [
    ['Col1', "abc"],
    ['PK0', null, PrimaryKeyTypeConst::CONST_INF_MAX],  // End at the maximum value.
    ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MAX]   // End at the maximum value.
];

$request = [
    'table_name'                  => '<INDEX_NAME>',                // Name of the index table.
    'max_versions'                => 1,                             // Read only the latest version.
    'direction'                   => DirectionConst::CONST_FORWARD, // Read in ascending order.
    'inclusive_start_primary_key' => $startPK,
    'exclusive_end_primary_key'   => $endPK,
    'limit'                       => 10                             // Maximum rows per call.
];

$response = $otsClient->getRange($request);
print "Read capacity units consumed: {$response['consumed']['capacity_unit']['read']}\n";

foreach ($response['rows'] as $rowData) {
    // Process each row.
}

// If next_start_primary_key is present, more rows are available.
// Call GetRange again with next_start_primary_key as inclusive_start_primary_key.
if (!empty($response['next_start_primary_key'])) {
    // Continue reading from $response['next_start_primary_key'].
}

FAQ

Étapes suivantes

  • Pour les requêtes multidimensionnelles et l'analyse des données, telles que les requêtes sur des colonnes autres que la clé primaire, les requêtes booléennes, les requêtes floues, les agrégations et le regroupement, créez un index de recherche. Pour plus d'informations, consultez la rubrique Index de recherche.

  • Pour interroger et analyser les données à l'aide d'instructions SQL, utilisez la fonctionnalité de requête SQL. Pour plus d'informations, consultez la rubrique Requête SQL.