HBase Shell中QualifierFilter与逻辑OR、SingleColumnValueFilter联用失效问题
HBase Scan 操作异常原因分析
针对你在customer_product表上的scan操作问题,逐个分析原因:
1. 未指定COLUMN时输出包含personal_info列族内容
HBase的默认scan行为是返回表中所有列族的所有列,除非通过COLUMN参数明确指定要读取的列族或列。你没有指定COLUMN,所以scan会自动拉取personal_info和product_purchase两个列族的全部数据,自然包含personal_info下的内容。
2. 指定COLUMN为product_purchase时,related_product列未被过滤
COLUMN参数的作用是限定要返回的列范围,而非过滤行。指定COLUMN='product_purchase'仅表示返回该列族下的所有列(包括product和related_product),但不会对related_product的值做任何过滤,也不会剔除不满足条件的行,所以related_product列会被正常返回。
3. 指定COLUMN为product_purchase:product时无过滤效果
同样,指定COLUMN='product_purchase:product'只是告诉HBase只返回product列,但没有设置行级过滤规则。HBase不会自动根据related_product的值筛选行,因此所有行的product列都会被返回,完全不做过滤。
正确的实现思路
要实现你的需求,需要同时做两件事:
- 用
COLUMN='product_purchase:product'指定仅返回目标列 - 添加基于
related_product的过滤条件,比如使用SingleColumnValueFilter来匹配Pens或Comfortchair,示例命令大致如下:
scan 'customer_product', {COLUMNS => 'product_purchase:product', FILTER => "(SingleColumnValueFilter('product_purchase', 'related_product', =, 'binary:Pens') OR SingleColumnValueFilter('product_purchase', 'related_product', =, 'binary:Comfortchair'))"}
内容的提问来源于stack exchange,提问作者Riddhesh Markandeya
相关产品推荐
相关产品推荐

