读取单行数据

本文介绍如何通过 Java SDK 读取表格存储数据表的单行数据。

注意事项

读取数据时需要提供包含自增主键列值在内的完整主键值。

前提条件

初始化 Tablestore Client

方法说明

public GetRowResponse getRow(GetRowRequest getRowRequest) throws TableStoreException, ClientException

GetRowRequest参数说明

  • rowQueryCriteria(必选)SingleRowQueryCriteria:读取单行数据信息,包含以下参数。

    名称

    类型

    说明

    tableName(必选)

    String

    数据表名称。

    primaryKey(必选)

    PrimaryKey

    主键信息,包括主键列名称和主键值。

    • 主键列数据类型包括 STRING、INTEGER 和 BINARY。

    • 主键个数和类型必须与数据表的主键保持一致。

    maxVersions(可选)

    OptionalValue<Integer>

    最大版本数。

    • 必须设置最大版本数和版本范围的其中一个。

    • 如果符合查询条件的数据版本数量超过设置的最大版本数,按从新到旧的顺序返回指定版本数量的数据。

    timeRange(可选)

    OptionalValue<TimeRange>

    数据版本范围。

    • 必须设置最大版本数和版本范围的其中一个。

    • 表格存储数据表的每个属性列可以有不同的数据版本,设置版本范围后,仅返回版本范围内的数据。

    columnsToGet(可选)

    Set<String>

    指定读取的数据列,可以是主键列或属性列。

    • 不设置columnsToGet时,返回整行数据。

    • 设置columnsToGet时,如果读取的行数据不包含任何指定的数据列,将返回 null。

    filter(可选)

    OptionalValue<Filter>

    过滤条件,详情请参见过滤器

    • 如果同时设置columnsToGetfilter,先按columnsToGet筛选符合条件的数据行,再按filter条件过滤数据。

示例代码

以下示例代码读取了主键值为 row1 的单行数据。

public static void getRowExample(SyncClient client) {
    // 构造主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    // 构造读取的行数据
    SingleRowQueryCriteria singleRowQueryCriteria = new SingleRowQueryCriteria("test_table", primaryKey);
    singleRowQueryCriteria.setMaxVersions(1);

    // 调用 getRow 方法读取行数据
    GetRowRequest getRowRequest = new GetRowRequest(singleRowQueryCriteria);
    GetRowResponse getRowResponse = client.getRow(getRowRequest);

    // 返回结果处理
    System.out.println("RequestId: " + getRowResponse.getRequestId());
    System.out.println("Read CU Cost: " + getRowResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + getRowResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
    System.out.println("Row Data: \n" + getRowResponse.getRow());
}
  • 设置读取的数据版本范围,结果只返回版本范围内的数据。

    // 设置查询的数据版本范围为当前时间往前一天
    singleRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
  • 指定读取的属性列。

    singleRowQueryCriteria.addColumnsToGet("col2");

相关文档