Utilisez le SDK Tablestore pour Go afin de spécifier des conditions pour l'écriture, la mise à jour ou la suppression d'une ligne. L'opération n'est exécutée que si la ligne cible respecte ces conditions.
Prérequis
Installez le SDK Tablestore pour Go et initialisez le client.
Description
Une mise à jour conditionnelle peut inclure une condition d'existence de ligne, une condition de colonne, ou les deux. Appelez les méthodes SetCondition et SetColumnCondition sur les objets PutRowChange, UpdateRowChange ou DeleteRowChange. Vous pouvez également ajouter ces objets de modification de ligne à une requête BatchWriteRow. Si les conditions ne sont pas remplies, le serveur renvoie une erreur et ne modifie pas les données.
Une condition d'existence de ligne vérifie si la ligne cible existe. Vous pouvez ignorer l'existence de la ligne, exiger que la ligne existe ou exiger que la ligne n'existe pas.
Une condition de colonne compare la valeur d'une colonne ou combine plusieurs conditions de colonne à l'aide d'opérateurs logiques. Les comparaisons entre colonnes ou entre constantes ne sont pas prises en charge. Une mise à jour peut contenir jusqu'à 10 conditions de colonne.
L'exemple suivant met à jour la colonne status uniquement si la ligne cible existe et si la valeur de la colonne score est égale à 30.
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")
change := &tablestore.UpdateRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.PutColumn("status", "processed")
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(
tablestore.NewSingleColumnCondition("score", tablestore.CT_EQUAL, int64(30)),
)
_, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
log.Fatal(err)
}
Paramètres
Condition d'existence de ligne
Appelez la méthode SetCondition pour spécifier une valeur RowExistenceExpectation.
|
Nom |
Type |
Description |
|
expectation (obligatoire) |
|
La condition d'existence de la ligne. Valeurs possibles : |
Condition sur une seule colonne
Appelez la méthode NewSingleColumnCondition(columnName, comparator, value) pour créer une condition sur une seule colonne. L'objet SingleColumnCondition contient les paramètres suivants.
|
Nom |
Type |
Description |
|
ColumnName (obligatoire) |
|
La colonne à évaluer. |
|
Comparator (obligatoire) |
|
L'opérateur de comparaison. Valeurs possibles : |
|
ColumnValue (obligatoire) |
|
La valeur constante à comparer. |
|
FilterIfMissing (facultatif) |
|
Indique si la condition n'est pas remplie lorsque la ligne ne contient pas la colonne. Valeur par défaut : |
|
LatestVersionOnly (facultatif) |
|
Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : |
Condition composite
Appelez la méthode NewCompositeColumnCondition(lo) pour créer une condition composite, puis appelez AddFilter pour ajouter des sous-conditions. Une sous-condition peut être une condition sur une seule colonne ou une condition composite imbriquée. L'objet CompositeColumnValueFilter contient les paramètres suivants.
|
Nom |
Type |
Description |
|
Operator (obligatoire) |
|
L'opérateur logique. Les opérateurs |
|
Filters (obligatoire) |
|
Les sous-conditions à combiner. |
Exemples
Mettre à jour des données à l'aide d'une condition composite
L'exemple suivant effectue une mise à jour uniquement si score >= 60 et si status est égal à pending.
condition := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
condition.AddFilter(
tablestore.NewSingleColumnCondition("score", tablestore.CT_GREATER_EQUAL, int64(60)),
)
condition.AddFilter(
tablestore.NewSingleColumnCondition("status", tablestore.CT_EQUAL, "pending"),
)
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(condition)