HBase中关于Bytes类的add方法疑问

espace123123 2015-08-18 11:29:17

/**
* Hello world!
*/
public class PageFilterExample {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "QT-H-0038");

String tableName = "testTable";
String cfName = "colfam1";
final byte[] POSTFIX = new byte[] { 0x00 };
HTable table = new HTable(config, tableName);
Filter filter = new PageFilter(15);
byte[] lastRow = null;
int totalRows = 0;
while (true) {
Scan scan = new Scan();
scan.setFilter(filter);
if(lastRow != null){
//注意这里添加了POSTFIX操作,不然死循环了
byte[] startRow = Bytes.add(lastRow,POSTFIX);
scan.setStartRow(startRow);
}
ResultScanner scanner = table.getScanner(scan);
int localRows = 0;
Result result;
while((result = scanner.next()) != null){
System.out.println(localRows++ + ":" + result);
totalRows ++;
lastRow = result.getRow();
}
scanner.close();
if(localRows == 0) break;
}
System.out.println("total rows:" + totalRows);
}

}


请教,byte[] startRow = Bytes.add(lastRow,POSTFIX);
此代码返回的startRow是否就是lastRow?如果是的话,为什么要add上POSTFIX?如果不是得话返回的是什么?

...全文
547 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡淡清风 2017-07-27
  • 打赏
  • 举报
回复
为什么要加在lastRow基础上增加POSTFIX呢。 因为下次循环的开始行startRow,必须是上次结束行lastRow的下1行。 通过实验可以验证byte[] startRow = Bytes.add(lastRow,POSTFIX)的作用。 新建表test,test添加2行记录。2行的rowkey分别是Jim和Tom。 执行scan.setStartRow(Bytes.toBytes("Jim"));输出2行,Jim和Tom。 执行scan.setStartRow(Bytes.add(Bytes.toBytes("Jim"), new byte[] { 0x00 }));则只输出1行,Tom。 显然。Tom行是Jim行的下一行。 所以,实际上,如果起始行是前次的最后1行的下一行的话,应该这样写,如:scan.setStartRow(Bytes.add(Bytes.toBytes("Jim"), new byte[] { 0x00 }));

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧