面试题答案
一键面试- 实现思路:
- 利用HBase的过滤器机制,通过组合多个过滤器来实现筛选条件。
- 分别针对年龄和注册时间设置过滤器,然后使用
FilterList
将这两个过滤器组合起来,以达到“且”的关系。
- 涉及的过滤器类型及相关配置:
- 针对年龄筛选:
- 过滤器类型:
SingleColumnValueFilter
。 - 配置:
- 列族:存储年龄信息的列族,假设为
cf
。 - 列限定符:存储年龄信息的列名,假设为
age
。 - 比较运算符:使用
CompareOp.GREATER
,表示大于。 - 比较器:使用
BinaryComparator
,并传入值30
的字节数组,如Bytes.toBytes("30")
。示例代码(Java):
SingleColumnValueFilter ageFilter = new SingleColumnValueFilter( Bytes.toBytes("cf"), Bytes.toBytes("age"), CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("30")) );
- 列族:存储年龄信息的列族,假设为
- 过滤器类型:
- 针对注册时间筛选:
- 过滤器类型:
SingleColumnValueFilter
。 - 配置:
- 列族:存储注册时间信息的列族,假设为
cf
。 - 列限定符:存储注册时间信息的列名,假设为
register_time
。 - 比较运算符:使用
CompareOp.GREATER
,表示大于。 - 比较器:使用
BinaryComparator
,并传入值2020
的字节数组,如Bytes.toBytes("2020")
。示例代码(Java):
SingleColumnValueFilter timeFilter = new SingleColumnValueFilter( Bytes.toBytes("cf"), Bytes.toBytes("register_time"), CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("2020")) );
- 列族:存储注册时间信息的列族,假设为
- 过滤器类型:
- 组合过滤器:
- 过滤器类型:
FilterList
。 - 配置:
- 使用
FilterList.Operator.MUST_PASS_ALL
表示两个过滤器的条件都必须满足。示例代码(Java):
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); filterList.addFilter(ageFilter); filterList.addFilter(timeFilter);
- 使用
- 过滤器类型:
- 针对年龄筛选:
在实际查询时,将 filterList
设置到 Get
或 Scan
对象中执行查询操作,就可以筛选出年龄大于30岁且注册时间在2020年之后的用户信息。