我一直对HBase中的过滤器如何工作感到困惑(或者,大体上等同于HappyBase--我用它来与HBase进行交互)。我混乱的根源是,我似乎无法控制过滤器的功能。HBase中的过滤器:设计用于按行或按列还是两者过滤数据?
某些过滤器(如SingleColumnValueFilter
)会导致不根据其某列的值排放行。这是有道理的 - 在我看来,这是过滤器应该是的。但是,像FirstKeyOnlyFilter
这样的其他过滤器似乎不是按行方向进行过滤,而是过滤出呈现给请求者的数据 - 即,它们过滤列为,如columns
参数。不仅如此,它们似乎影响其他过滤器是否可以访问数据。
也许我只是用它们错了。但是,对我来说,一个“过滤器”应该根据对其属性进行操作的输出来移除项目,例如“找到我身高超过7英尺的所有人!”但至少在HBase中,FirstKeyOnlyFilter
的行为似乎更类似于“让我的每个人都离开耳朵,没有别的东西!”此外,如果我有以下过滤器:
SingleColumnValueFilter('body', 'height', =, 'regexstring:^over7ft$') AND FirstKeyOnlyFilter
,FirstKeyOnlyFilter
似乎限制第一个过滤器访问列族:column“body:height”。
这是什么设计选择?上面的过滤器看起来像是在说:“让我身高七英尺高的每个人都明白我的名字!”而是说的更像是“如果名字高7英尺,让我明白我的名字!”。一行中的第一个关键字没有列,只有名称可以说有一个“高度”。
我在做什么错?这是HappyBase的一个特点,还是与HBase本身一样?
有趣。但是,如果我想减少网络I/O但不一定从数据库读取数据呢?即,“回到我身边所有的行键,其中该行已比照:x的C值” – eriophora
我已经更新了答案 –
@eriophora回答您的评论以上:使用columnvalue过滤器和FirstKeyOnlyFilter并传递参数“必须全部匹配”到您的扫描对象。 – halil