Créez un index secondaire global ou local pour une table de données existante à l'aide du SDK Tablestore pour Java.
Prérequis
Installez le SDK Tablestore pour Java et initialisez un client.
La valeur
maxVersionsde la table de données est définie sur 1 et la valeurtimeToLivesur -1, ou bien les données ne peuvent pas être mises à jour via l'appel àUpdateRow.Si vous souhaitez utiliser des colonnes autres que les clés primaires comme colonnes d'index ou colonnes d'attribut, configurez-les en tant que colonnes prédéfinies.
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 globaux et locaux. Ces deux types d'index présentent des modes de synchronisation des données et des exigences en matière de clé primaire distincts. Pour plus d'informations, consultez la rubrique Présentation.
Appelez createIndex pour créer un index secondaire sur 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 la rubrique 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 la table 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
CreateIndexRequest contient les paramètres suivants :
|
Nom |
Type |
Description |
|
mainTableName (obligatoire) |
|
Nom de la table de données. |
|
indexMeta (obligatoire) |
|
Informations de schéma relatives à la table d'index. |
|
includeBaseData (obligatoire) |
|
Indique si la table d'index inclut les données existantes de la table de données. Si vous définissez ce paramètre sur |
Schéma d'index
indexMeta est de type IndexMeta et contient les paramètres suivants :
|
Nom |
Type |
Description |
|
indexName (obligatoire) |
|
Nom de la table d'index. Le nom doit différer de celui d'une table de données ou d'une table de séries temporelles existante. |
|
primaryKey (obligatoire) |
|
Liste ordonnée des noms de colonnes d'index. Spécifiez une à quatre colonnes, qui peuvent être des colonnes de clé primaire ou des colonnes prédéfinies de la table de données. Tablestore utilise l'ordre d'ajout des colonnes et ajoute automatiquement les colonnes de clé primaire non spécifiées de la table de données à la fin de la clé primaire de l'index. Pour un index secondaire local, la première colonne de clé primaire de l'index doit être identique à la première colonne de clé primaire de la table de données. |
|
definedColumns (facultatif) |
|
Liste des noms de colonnes d'attribut de la table d'index. Seules les colonnes prédéfinies de la table de données peuvent être spécifiées. |
|
indexType (facultatif) |
|
Type d'index. Les valeurs valides sont |
|
indexUpdateMode (facultatif) |
|
Mode de mise à jour de l'index. Un index secondaire global doit utiliser |
Exemples de scénarios
Créer un index secondaire local
Pour créer un index secondaire local, spécifiez la première colonne de clé primaire de la table de données comme première colonne de clé primaire de l'index, et définissez respectivement le type d'index et le mode de mise à jour sur IT_LOCAL_INDEX et IUM_SYNC_INDEX.
IndexMeta indexMeta = new IndexMeta("example_local_index");
indexMeta.addPrimaryKeyColumn("user_id");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");
indexMeta.setIndexType(IndexType.IT_LOCAL_INDEX);
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_SYNC_INDEX);
CreateIndexRequest request =
new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);