O recurso de atualização condicional permite atualizar dados em uma tabela apenas se as condições especificadas forem atendidas. Caso contrário, a atualização falha.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Initialize an OTSClient instance.
Tabela de dados criada e preenchida. Para mais informações, consulte Create a data table e Write data.
Observações de uso
Ao chamar as operações PutRow, UpdateRow, DeleteRow ou BatchWriteRow para atualizar dados, use a atualização condicional para verificar condições de existência de linha e condições baseadas em colunas. A atualização só é bem-sucedida se todas as condições forem atendidas.
A atualização condicional pode ser baseada em condições de existência de linha e em condições baseadas em colunas.
-
As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST.
Ao modificar uma tabela de dados, o Tablestore verifica primeiro a condição de existência da linha. Se essa condição não for atendida, a modificação falha e um erro é relatado.
-
As condições baseadas em colunas incluem SingleColumnCondition e CompositeCondition, usadas para determinar se as condições são atendidas com base nos valores de uma ou mais colunas.
Essas condições suportam os seguintes operadores relacionais: =, !=, >, >=, < e <=. Também aceitam os operadores lógicos NOT, AND e OR. É possível especificar até 10 condições baseadas em colunas para uma atualização condicional.
SingleColumnCondition permite comparar uma constante com uma coluna, mas não suporta comparação entre duas colunas ou duas constantes.
Operadores lógicos combinam subcondições em CompositeCondition. Essas subcondições podem ser do tipo SingleColumnCondition ou CompositeCondition.
Use a atualização condicional para implementar bloqueio otimista. Ao atualizar uma linha, obtenha o valor de uma coluna específica e defina uma condição de atualização com base nesse valor. Por exemplo, ao alterar o valor da Coluna A para 2, verifique seu valor atual. Neste exemplo, suponha que o valor obtido seja 1. Nesse caso, especifique que a linha só pode ser atualizada se o valor da Coluna A for igual a 1. Se a condição for atendida, a atualização será bem-sucedida. Se outro cliente tiver atualizado a linha anteriormente, a operação falhará.
Parâmetros
|
Parâmetro |
Descrição |
|
RowExistenceExpectation |
Condição de existência da linha. Ao modificar uma tabela, o Tablestore verifica essa condição. Se ela não for atendida, a modificação falha e um erro é relatado. As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST. No Tablestore, use RowExistenceExpectation_IGNORE para especificar IGNORE, RowExistenceExpectation_EXPECT_EXIST para EXPECT_EXIST e RowExistenceExpectation_EXPECT_NOT_EXIST para EXPECT_NOT_EXIST.
|
|
columnName |
Nome da coluna. |
|
columnValue |
Valor de comparação da coluna. |
|
comparator |
Operador relacional usado para comparar o valor da coluna. Para informações sobre os tipos de operadores relacionais, consulte ComparatorType. Os operadores relacionais incluem EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<) e LESS_EQUAL(<=). No Tablestore, use CT_EQUAL para especificar EQUAL(=), CT_NOT_EQUAL para NOT_EQUAL(!=), CT_GREATER_THAN para GREATER_THAN(>), CT_GREATER_EQUAL para GREATER_EQUAL(>=), CT_LESS_THAN para LESS_THAN(<) e CT_LESS_EQUAL para LESS_EQUAL(<=). |
|
combinator |
Operador lógico que combina múltiplas condições. Para informações sobre os tipos de operadores lógicos, consulte LogicalOperator. Os operadores lógicos incluem NOT, AND e OR. No Tablestore, use LO_NOT para especificar NOT, LO_AND para AND e LO_OR para OR. O número de subcondições permitidas varia conforme o operador lógico utilizado.
|
|
passIfMissing |
Defina se a verificação condicional deve ser aprovada quando uma coluna não existe na linha. Este parâmetro é do tipo Boolean. O valor padrão é true, indicando que, se a coluna não existir, a verificação é aprovada e a linha atende às condições de atualização. Se você definir passIfMissing como false e a coluna não existir na linha, a verificação falha e a linha não atende às condições de atualização. |
|
latestVersionOnly |
Defina se apenas a versão mais recente do valor deve ser usada na comparação quando uma coluna possui múltiplas versões. Este parâmetro é do tipo Boolean. O valor padrão é true, indicando que, se houver várias versões, apenas a mais recente será considerada. Se você definir latestVersionOnly como false e a coluna possuir múltiplas versões, todas serão usadas na comparação. Nesse cenário, basta que uma versão atenda à condição para que a verificação seja aprovada e a linha cumpra os requisitos de atualização. |
Exemplos
Atualize uma linha com base na chave primária especificada. A atualização será bem-sucedida apenas se a linha existir, o valor da coluna "name" for "john" e o valor da coluna "addr" for "china". Caso contrário, a operação falhará.
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};
// Specify the update conditions. Specify that data can be updated only if the following conditions are met: the specified row exists, the value of the "name" column is "john", and the value of the "addr" column is "china".
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});