Leia várias linhas de uma ou mais tabelas em uma única solicitação com o Tablestore SDK for Java. Cada linha retorna um resultado independente, o que permite buscar registros detalhados em lote pela chave primária.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize o cliente.
Descrição
public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException
Leia múltiplas linhas em uma única solicitação. Um objeto BatchGetRowRequest contém um ou mais objetos MultiRowQueryCriteria, adicionados ao chamar addMultiRowQueryCriteria. Cada MultiRowQueryCriteria refere-se a uma tabela específica. Todas as linhas nesse critério compartilham as mesmas condições de consulta, como maxVersions, columnsToGet e filter.
O servidor processa cada linha independentemente; uma falha em uma linha não afeta as demais. Chame isAllSucceed, getSucceedRows ou getFailedRows para inspecionar os resultados no nível da linha.
Uma única chamada a BatchGetRow pode recuperar até 100 linhas.
O exemplo a seguir lê duas linhas (chaves primárias row1 e row2) da tabela batch_get_demo e retorna apenas a versão mais recente de cada coluna.
String tableName = "batch_get_demo";
MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);
// Add primary key for row 1
PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());
// Add primary key for row 2
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());
criteria.setMaxVersions(1);
BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);
BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("RequestId: " + response.getRequestId());
System.out.println("All Succeeded: " + response.isAllSucceed());
for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
System.out.println("Succeeded: " + rowResult.getRow());
}
if (!response.isAllSucceed()) {
for (BatchGetRowResponse.RowResult fail : response.getFailedRows()) {
System.out.println("Failed: table=" + fail.getTableName()
+ " index=" + fail.getIndex()
+ " error=" + fail.getError());
}
}
Os parâmetros obrigatórios são tableName, rowKeys e um entre maxVersions ou timeRange. Consulte a tabela de Parâmetros para ver o esquema completo.
Parâmetros
Um objeto MultiRowQueryCriteria carrega as condições de consulta em lote para uma única tabela.
|
Name |
Type |
Description |
|
tableName (required) |
String |
Nome da tabela a ser lida. |
|
rowKeys (required) |
List<PrimaryKey> |
Lista de chaves primárias, adicionada ao chamar |
|
maxVersions (one required) |
OptionalValue<Integer> |
Número máximo de versões a serem lidas. Defina pelo menos um entre Se uma coluna tiver mais versões do que o valor definido em |
|
timeRange (one required) |
OptionalValue<TimeRange> |
Intervalo de tempo para leitura. Defina pelo menos um entre Cada coluna de atributo pode ter múltiplas versões. Após definir um intervalo de tempo, o Tablestore retorna apenas as versões dentro desse intervalo. |
|
columnsToGet (optional) |
Set<String> |
Colunas a serem lidas — podem ser colunas de chave primária ou colunas de atributo.
|
|
filter (optional) |
OptionalValue<Filter> |
Condição de filtro. Para mais detalhes, consulte Usar filtros. Ao defina tanto |
Cenários
Leitura em várias tabelas
Para ler dados de múltiplas tabelas em uma única solicitação, crie um objeto MultiRowQueryCriteria por tabela e adicione cada um à solicitação usando addMultiRowQueryCriteria.
String tableA = "batch_get_demo";
String tableB = "batch_get_demo_2";
BatchGetRowRequest request = new BatchGetRowRequest();
// Query conditions for table A
MultiRowQueryCriteria criteriaA = new MultiRowQueryCriteria(tableA);
PrimaryKeyBuilder pkA = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkA.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteriaA.addRow(pkA.build());
criteriaA.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaA);
// Query conditions for table B
MultiRowQueryCriteria criteriaB = new MultiRowQueryCriteria(tableB);
PrimaryKeyBuilder pkB = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkB.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowA"));
criteriaB.addRow(pkB.build());
criteriaB.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaB);
BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("Total succeeded rows: " + response.getSucceedRows().size());
Leitura com filtro
Chame setFilter para anexar um filtro de valor de coluna ao critério. Todas as linhas neste MultiRowQueryCriteria usam o mesmo filtro, e o Tablestore retorna apenas as linhas correspondentes.
String tableName = "batch_get_demo";
MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);
PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());
criteria.setMaxVersions(1);
// Return only rows where col1 equals "val1"
SingleColumnValueFilter filter = new SingleColumnValueFilter(
"col1",
SingleColumnValueFilter.CompareOperator.EQUAL,
ColumnValue.fromString("val1"));
filter.setPassIfMissing(false);
criteria.setFilter(filter);
BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);
BatchGetRowResponse response = client.batchGetRow(request);
int matched = 0;
for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
if (rowResult.getRow() != null) {
matched++;
}
}
System.out.println("Rows matching filter: " + matched);