全部产品
Search
文档中心

表格存储:离线批量读取数据

更新时间:Apr 26, 2024

表格存储提供了BulkExport接口用于在大数据场景下批量读取数据表中的数据。数据写入到数据表后,您可以根据指定条件进行数据读取。

前提条件

  • 已初始化OTSClient。具体操作,请参见初始化OTSClient

  • 已创建数据表并写入数据。

参数

参数

说明

tableName

数据表名称。

inclusiveStartPrimaryKey

本次批量读取的起始主键和结束主键,起始主键和结束主键需要是有效的主键或者是由INF_MIN和INF_MAX类型组成的虚拟点,虚拟点的列数必须与主键相同。

其中INF_MIN表示无限小,任何类型的值都比它大;INF_MAX表示无限大,任何类型的值都比它小。

  • inclusiveStartPrimaryKey表示起始主键,如果该行存在,则返回结果中一定会包含此行。

  • exclusiveEndPrimaryKey表示结束主键,无论该行是否存在,返回结果中都不会包含此行。

数据表中的行按主键从小到大排序,读取范围是一个左闭右开的区间,正序读取时,返回的是大于等于起始主键且小于结束主键的所有的行。

exclusiveEndPrimaryKey

columnsToGet

读取的列集合,列名可以是主键列或属性列。

  • 如果不设置返回的列名,则返回整行数据。

  • 如果设置了返回的列名,当某行中指定的列均不存在时,则不返回该行,即返回值为null;当某行中存在部分指定的列时,则返回该行且只返回存在的列。

说明
  • 查询一行数据时,默认返回此行所有列的数据。如果需要只返回特定列,可以通过设置columnsToGet参数限制。如果将col0和col1加入到columnsToGet中,则只返回col0和col1列的值。

  • 如果某行数据的主键属于读取范围,但是该行数据不包含指定返回的列,则返回结果中不包含该行数据。

  • 当columnsToGet和filter同时使用时,执行顺序是先获取columnsToGet指定的列,再在返回的列中进行条件过滤。

filter

使用过滤器,在服务端对读取结果再进行一次过滤,只返回符合过滤器中条件的数据行。更多信息,请参见过滤器

说明

当columnsToGet和filter同时使用时,执行顺序是先获取columnsToGet指定的列,再在返回的列中进行条件过滤。

dataBlockType

此次读取请求的返回数据的格式类型。可选项包括PlainBuffer和SimpleRowMatrix。

示例

以下示例用于批量读取指定范围内的数据。

private static void bulkExport(SyncClient client, String start, String end){
    // 构造起始主键。
    PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    startPrimaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(String.valueOf(start)));
    PrimaryKey startPrimaryKey = startPrimaryKeyBuilder.build();

    // 构造结束主键。
    PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    endPrimaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(String.valueOf(end)));
    PrimaryKey endPrimaryKey = endPrimaryKeyBuilder.build();

    // 创建bulkExportRequest。
    BulkExportRequest bulkExportRequest = new BulkExportRequest();
    // 创建bulkExportQueryCriteria。
    BulkExportQueryCriteria bulkExportQueryCriteria = new BulkExportQueryCriteria("<TABLE_NAME>");

    bulkExportQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKey);
    bulkExportQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKey);
    //使用DBT_PLAIN_BUFFER编码方式。
    bulkExportQueryCriteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
    //如果需要使用DBT_SIMPLE_ROW_MATRIX编码方式时,请使用以下代码配置。
    // bulkExportQueryCriteria.setDataBlockType(DataBlockType.DBT_SIMPLE_ROW_MATRIX);
    bulkExportQueryCriteria.addColumnsToGet("pk");
    bulkExportQueryCriteria.addColumnsToGet("DC1");
    bulkExportQueryCriteria.addColumnsToGet("DC2");

    bulkExportRequest.setBulkExportQueryCriteria(bulkExportQueryCriteria);
    // 获取bulkExportResponse。
    BulkExportResponse bulkExportResponse = client.bulkExport(bulkExportRequest);
    
    // 如果设置DataBlockType为DBT_SIMPLE_ROW_MATRIX,则需要使用以下代码进行结果打印。
    //{
    //    SimpleRowMatrixBlockParser parser = new SimpleRowMatrixBlockParser(bulkExportResponse.getRows());
    //    List<Row> rows = parser.getRows();
    //    for (int i = 0; i < rows.size(); i++){
    //        System.out.println(rows.get(i));
    //    }
    //}

    // 设置DataBlockType为DBT_PLAIN_BUFFER并打印结果。
    {
        PlainBufferBlockParser parser = new PlainBufferBlockParser(bulkExportResponse.getRows());
        List<Row> rows = parser.getRows();
        for (int i = 0; i < rows.size(); i++){
            System.out.println(rows.get(i));
        }
    }
}

相关文档

  • 关于API的更多信息,请参见BulkExport

  • 关于功能接口实现的更多信息,请参见BulkExportRequest.javaBulkExportResponse.java

  • 如果要使用索引技术加速数据查询,您可以通过二级索引或者多元索引功能实现。更多信息,请参见二级索引或者多元索引

  • 如果要可视化展示表中数据,您可以通过对接DataV或者Grafana工具实现。更多信息,请参见数据可视化

  • 如果要下载表中数据到本地,您可以通过DataX、表格存储命令行CLI工具实现。更多信息,请参见将表格存储数据下载到本地文件

  • 如果要计算与分析表中数据,您可以通过表格存储SQL查询实现。更多信息,请参见SQL查询

    说明

    您还可以通过MaxCompute、Spark、Hive或者HadoopMR、函数计算、Flink等计算引擎实现表中数据的计算与分析。具体操作,请参见计算与分析