本文介绍如何通过 Java SDK 批量读取表格存储中的数据,支持查询多个表的数据。
注意事项
单次批量读取操作最多支持读取 100 行数据。
前提条件
方法说明
public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException
示例代码
以下示例代码用于读取 test_table 表中主键值为 row1 和 row2 的两行数据。
public static void batchGetRowExample(SyncClient client) {
// 构造查询条件
MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("test_table");
// 添加第 1 行主键信息
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
multiRowQueryCriteria.addRow(primaryKeyBuilder.build());
// 添加第 2 行主键信息
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
multiRowQueryCriteria.addRow(primaryKeyBuilder.build());
// 设置查询版本
multiRowQueryCriteria.setMaxVersions(1);
// 调用 batchGetRow 方法进行批量数据查询
BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);
BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);
// 返回结果处理
System.out.println("* RequestId: " + batchGetRowResponse.getRequestId());
System.out.println("* Is all succeeded: " + batchGetRowResponse.isAllSucceed());
// 打印读取成功的行
System.out.println("* Succeeded Rows: ");
for(BatchGetRowResponse.RowResult rowResult:batchGetRowResponse.getSucceedRows())
System.out.println(rowResult.getRow());
// 打印读取失败的行
if(!batchGetRowResponse.isAllSucceed()) {
System.out.println("* Failed Rows: ");
for(BatchGetRowResponse.RowResult rowResult:batchGetRowResponse.getFailedRows())
System.out.println(rowResult.getTableName() + " | " + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()) + " | " + rowResult.getError());
}
}
您可以在批量读取数据时参考以下示例代码进行参数设置。
读取多张表的数据。批量读取支持一次读取多张表的数据,您需要为每张表指定一个MultiRowQueryCriteria。
// 构造第 2 个表的查询条件 MultiRowQueryCriteria multiRowQueryCriteria1 = new MultiRowQueryCriteria("orders_small"); // 添加第 1 行主键信息 primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("order_id", PrimaryKeyValue.fromString("90fb478c-1360-11f0-a34d-00163e30a2a9")); multiRowQueryCriteria1.addRow(primaryKeyBuilder.build()); // 设置查询版本 multiRowQueryCriteria1.setMaxVersions(1); // Request 添加 MultiRowQueryCriteria batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria1);
设置读取的数据版本范围,结果只返回版本范围内的数据。
// 设置查询的数据版本范围为当前时间往前一天 multiRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
指定读取的属性列。
multiRowQueryCriteria.addColumnsToGet("col1");
相关文档
该文章对您有帮助吗?