Cette rubrique explique comment configurer une colonne de clé primaire à incrémentation automatique pour une table, y écrire des données et obtenir les valeurs générées automatiquement à l'aide du SDK Tablestore pour Go.
Considérations
Les valeurs générées pour une colonne à incrémentation automatique sont uniques et strictement croissantes au niveau de la clé de partition, mais elles ne sont pas nécessairement consécutives.
Prérequis
Configurer une colonne de clé primaire à incrémentation automatique
Vous pouvez définir une colonne de clé primaire (autre que la clé de partition) comme étant à incrémentation automatique lors de la création d'une table. Cette opération est impossible sur une table existante.
Seules les colonnes de clé primaire non partitionnées de type entier peuvent être configurées en tant que colonnes à incrémentation automatique. Une table peut contenir au maximum une colonne à incrémentation automatique, qui génère des entiers signés 64 bits.
Exemple de code
L'exemple de code suivant crée une table nommée test_table. La clé primaire de la table comprend la clé de partition id et la colonne à incrémentation automatique incr.
func CreateTableSample(client *tablestore.TableStoreClient) {
tableMeta := new(tablestore.TableMeta)
tableMeta.TableName = "test_table"
tableMeta.AddPrimaryKeyColumn("id", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption("incr", tablestore.PrimaryKeyType_INTEGER, tablestore.AUTO_INCREMENT)
tableOption := new(tablestore.TableOption)
tableOption.MaxVersion = 1
tableOption.TimeToAlive = -1
reservedThroughput := new(tablestore.ReservedThroughput)
createTableRequest := new(tablestore.CreateTableRequest)
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished.")
}
}
Écrire des données
Pour écrire des données dans une colonne à incrémentation automatique, vous devez définir un espace réservé pour la valeur. Pour récupérer la valeur générée automatiquement lors des requêtes et des mises à jour, définissez le type de retour de putRowChange sur ReturnType_RT_PK.
Exemple de code
L'exemple de code suivant écrit une ligne de données dans la table test_table, récupère les informations de clé primaire de la ligne écrite et les affiche.
func PutRowSample(client *tablestore.TableStoreClient) {
// Construct the primary key
putPrimaryKey := new(tablestore.PrimaryKey)
putPrimaryKey.AddPrimaryKeyColumn("id", "row1")
// Set the auto-increment column
putPrimaryKey.AddPrimaryKeyColumnWithAutoIncrement("incr")
// Construct the row data to write
putRowChange := new(tablestore.PutRowChange)
putRowChange.TableName = "test_table"
putRowChange.PrimaryKey = putPrimaryKey
putRowChange.AddColumn("col1", "val1")
putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
// Set the return type to ReturnType_RT_PK to return the primary key information of the written row
putRowChange.ReturnType = tablestore.ReturnType_RT_PK
// Call the putRow method to write the row data
putRowRequest := new(tablestore.PutRowRequest)
putRowRequest.PutRowChange = putRowChange
response, err := client.PutRow(putRowRequest)
if err != nil {
fmt.Println("Failed to put row with error:", err)
} else {
// RequestId and consumed CU
fmt.Printf("RequestId: %s \n", response.RequestId)
fmt.Printf("Read CU Cost: %d \n", response.ConsumedCapacityUnit.Read)
fmt.Printf("Write CU Cost: %d \n", response.ConsumedCapacityUnit.Write)
// Get and print the returned primary key information. If the return type is not set to ReturnType_RT_PK, the primary key information is not returned by default
fmt.Println(response.PrimaryKey)
}
}