Este tópico descreve como configurar uma coluna de chave primária com incremento automático em uma tabela de dados usando o Tablestore SDK for Java. Também explica como gravar dados nessa coluna e recuperar os valores gerados.
Observações de uso
O recurso de coluna de chave primária com incremento automático é compatível com o Tablestore SDK for Java V4.2.0 ou superior.
Os valores gerados para uma coluna de chave primária com incremento automático são exclusivos e aumentam monotonicamente dentro de uma partição, mas podem não ser consecutivos.
Pré-requisitos
Inicialize um cliente. Para mais informações, consulte Inicializar um cliente do Tablestore.
Configurar uma coluna de chave primária com incremento automático
Ao criar uma tabela de dados, especifique uma coluna de chave primária que não seja a chave de partição como coluna de chave primária com incremento automático. Não é possível definir esse tipo de coluna em tabelas existentes.
Apenas colunas de chave primária do tipo Integer podem ter incremento automático. Cada tabela de dados admite no máximo uma coluna desse tipo. Os valores gerados são inteiros longos assinados de 64 bits.
Código de exemplo
O código abaixo ilustra a criação de uma tabela chamada test_table. Neste exemplo, a tabela contém uma chave de partição chamada id e uma coluna de chave primária com incremento automático chamada incr.
public static void createTableTest(SyncClient client) {
TableMeta tableMeta = new TableMeta("test_table");
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("incr", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
TableOptions tableOptions = new TableOptions();
tableOptions.setMaxVersions(1);
tableOptions.setTimeToLive(-1);
CreateTableRequest createTableRequest = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(createTableRequest);
}
Gravar dados
Para gravar dados em uma tabela com coluna de chave primária com incremento automático, defina o valor dessa coluna como um espaço reservado (placeholder). Caso precise obter o valor gerado automaticamente para consultas ou atualizações futuras, configure o tipo de retorno de rowPutChange como RT_PK.
Código de exemplo
O trecho a seguir demonstra como inserir uma linha na tabela test_table, além de obter e exibir as informações da chave primária retornada:
public static void putRowTest(SyncClient client) {
// Construct the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
// Set the value of the auto-increment primary key column to a placeholder.
primaryKeyBuilder.addPrimaryKeyColumn("incr", PrimaryKeyValue.AUTO_INCREMENT);
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Construct the row data to write.
RowPutChange rowPutChange = new RowPutChange("test_table", primaryKey);
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));
// Set the return type to RT_PK to return the primary key information of the written row.
rowPutChange.setReturnType(ReturnType.RT_PK);
// Call the putRow method to write the row of data.
PutRowRequest putRowRequest = new PutRowRequest();
putRowRequest.setRowChange(rowPutChange);
PutRowResponse putRowResponse = client.putRow(putRowRequest);
// Display the request Id and read/write CU consumption.
System.out.println("RequestId: " + putRowResponse.getRequestId());
System.out.println("Read CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
// Obtain and print the returned primary key information. If the return type is not set to RT_PK, the primary key information is not returned.
Row row = putRowResponse.getRow();
if(row != null)
System.out.println(row.getPrimaryKey().toString());
}