Este tópico explica como configure uma coluna de chave primária com incremento automático em uma tabela de dados com o .NET SDK, além de demonstrar como gravar dados nessa coluna e recuperar os valores gerados.
Observações de uso
Os valores gerados para uma coluna com incremento automático são exclusivos e estritamente incrementais no nível da chave de partição. No entanto, não há garantia de que sejam consecutivos.
Pré-requisitos
Configure uma coluna de chave primária com incremento automático
Ao crie uma tabela de dados, configure uma coluna de chave primária sem partição como coluna com incremento automático. Não é possível configure colunas com incremento automático em tabelas de dados existentes.
Apenas colunas de chave primária sem partição do tipo inteiro podem ser configuradas como colunas com incremento automático. Uma tabela de dados pode ter, no máximo, uma coluna com incremento automático. Os valores gerados para essa coluna são inteiros longos assinados de 64 bits.
Código de exemplo
O código de exemplo a seguir cria uma tabela de dados chamada test_table. A chave primária da tabela inclui a chave de partição id e a coluna com incremento automático incr.
public static void CreateSample(OTSClient client)
{
try
{
PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
{
{ "id", ColumnValueType.String },
{ "incr", ColumnValueType.Integer, PrimaryKeyOption.AUTO_INCREMENT}
};
TableMeta tableMeta = new TableMeta("test_table", primaryKeySchema);
CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput);
client.CreateTable(request);
Console.WriteLine("Create table succeeded.");
}
catch (Exception ex)
{
Console.WriteLine($"Create table failed, exception:{ex.Message}");
}
}
Gravar dados
Ao gravar dados em uma coluna com incremento automático, defina o valor da coluna como um espaço reservado. Para recuperar o valor de incremento automático gerado e usá-lo em consultas e atualizações, defina o tipo de retorno de RowPutChange como ReturnType.RT_PK.
Código de exemplo
O exemplo abaixo grava uma linha de dados na tabela test_table, obtém e imprime as informações de chave primária da linha gravada.
public static void PutRowSample(OTSClient client)
{
try
{
// Construct the primary key
PrimaryKey primaryKey = new PrimaryKey
{
{ "id", new ColumnValue("row1") },
{ "incr", ColumnValue.AUTO_INCREMENT }
};
// Construct the row data to write
AttributeColumns attribute = new AttributeColumns
{
{ "col1", new ColumnValue("val1") }
};
PutRowRequest request = new PutRowRequest("test_table", new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
// Set the return type to ReturnType.RT_PK to return the primary key information of the written row data
request.RowPutChange.ReturnType = ReturnType.RT_PK;
// Call the PutRow method to write the row data
PutRowResponse response = client.PutRow(request);
// RequestId and consumed CU
Console.WriteLine("RequestId: " + response.RequestID);
Console.WriteLine("Read CU Cost: " + response.ConsumedCapacityUnit.Read);
Console.WriteLine("Write CU Cost: " + 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
Console.WriteLine(response.Row.PrimaryKey.ToString());
}
catch (Exception ex)
{
Console.WriteLine($"Put Row failed, exception:{ex.Message}");
}
}