文档首页 > > 开发指南> HBase应用开发> 开发程序> 使用Scan读取数据

使用Scan读取数据

分享
更新时间: 2020/01/11 GMT+08:00

功能简介

要从表中读取数据,首先需要实例化该表对应的Table实例,然后创建一个Scan对象,并针对查询条件设置Scan对象的参数值,为了提高查询效率,最好指定StartRow和StopRow。查询结果的多行数据保存在ResultScanner对象中,每行数据以Result对象形式存储,Result中存储了多个Cell。

代码样例

以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseSample”类的testScanData方法中

public void testScanData() {
    LOG.info("Entering testScanData.");

    Table table = null;
    // Instantiate a ResultScanner object.
    ResultScanner rScanner = null;
    try {
        // Create the Configuration instance.
        table = conn.getTable(tableName);

        // Instantiate a Get object.
        Scan scan = new Scan();
        scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));

        // Set the StartRow
        scan.setStartRow(Bytes.toBytes("012005000202"));//注[1]

        // Set the StopRow
        scan.setStopRow(Bytes.toBytes("012005000210"));//注[1]

        // Set the Caching size.
        scan.setCaching(1000);//注[2]

        // Set the Batch size.
        scan.setBatch(100);//注[2]

        // Submit a scan request.
        rScanner = table.getScanner(scan);

        // Print query results.
        for (Result r = rScanner.next(); r != null; r = rScanner.next()) {
            for (Cell cell : r.rawCells()) {
               LOG.info(Bytes.toString(CellUtil.cloneRow(cell)) + ":"
                + Bytes.toString(CellUtil.cloneFamily(cell)) + ","
                + Bytes.toString(CellUtil.cloneQualifier(cell)) + ","
                + Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        LOG.info("Scan data successfully.");
    } catch (IOException e) {
        LOG.error("Scan data failed ", e);
    } finally {
        if (rScanner != null) {
            // Close the scanner object.
            rScanner.close();
        }
        if (table != null) {
            try {
                // Close the HTable object.
                table.close();
            } catch (IOException e) {
                LOG.error("Close table failed ", e);
            }
        }
    }
    LOG.info("Exiting testScanData.");
}

注意事项

  1. 建议Scan时指定StartRow和StopRow,一个有确切范围的Scan,性能会更好些。
  2. 可以设置Batch和Caching关键参数。
    • Batch

      使用Scan调用next接口每次最大返回的记录数,与一次读取的列数有关。

    • Caching

      RPC请求返回next记录的最大数量,该参数与一次RPC获取的行数有关。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问