hbase scan查询filter过滤的问题

crackajackk 2012-09-23 08:57:27
最近遇到hbase查询方面的两个关于scan的问题:
先附上代码

protected static Scan makeScan(byte[] beginRowRange, byte[] endRowRange, String[] seekFamilys, String[] seekColumns, Filter filter)
{
Scan scan = new Scan();
// 设置缓存条数
scan.setCaching(1000);
// 如果时间戳范围有效

// 用开始时间和结束时间作为rowkey的一个查询范围
if (beginRowRange != null)
scan.setStartRow(beginRowRange);
if (endRowRange != null)
scan.setStopRow(endRowRange);
if (seekFamilys != null)
for (String columnFamily : seekFamilys)
scan.addFamily(Bytes.toBytes(columnFamily));
if (seekColumns != null)
for (String column : seekColumns)
{
int beginIndex = column.indexOf(':');
String columnFamily = column.substring(0, beginIndex);
String columnField = column.substring(beginIndex + 1);
scan.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnField));
// Log.msg(column+" makescan columnFamily:"+columnFamily+" columnField:"+columnField);

}

if (filter != null)
{
scan.setFilter(filter);
}

return scan;
}


1 查询的时候,如查询某些列A,B,C,D(都是属于一个列族),当filter 为 关于查询列的条件(如条件D<=100)的时候可以正常返回数据,但当filter为非查询列的条件的时候(如E<=699)就没有数据返回(能确定数据库里面有满足E<=699的记录)。现在的问题是,有时候filter中要过滤的列必须在 查询里面才能出结果,但是又有些时候不用再查询里面,也能出结果。

2 同样 查询某些列入A,B,C,D, filter 条件为D=100,返回的数据除了包含D=100的,同时也包含D=0 的。现在的问题是返回的结果中D=0 是不对的。

其实问题都是 关于hregionserver 到底是如何执行scan的,以及如何执行filter的。。。。

...全文
1330 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu101q 2012-09-25
  • 打赏
  • 举报
回复
hbase 是根据你的SCAN 中的startRow 先进行定位到某一个regionServer,然后row往下迭代去result的。
至于你的filter , 你可以设定你的Scan 查询的family,具体可以看API!
crackajackk 2012-09-24
  • 打赏
  • 举报
回复
没人遇到过这个问题麦。

20,808

社区成员

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

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