Hadoop 如何搜索列值,如';%测试%';在hbase中

Hadoop 如何搜索列值,如';%测试%';在hbase中,hadoop,hbase,Hadoop,Hbase,我将大文本内容保存在co列中,我想搜索co列是否包含特定的单词,类似于我们在RDBMS中所做的操作,例如:wherecolike%test%,要实现这一点,我应该编写任何过滤器还是Mapreduce?有人能举例说明如何做到这一点吗?你可以这样做 RegexStringComparator comp = new RegexStringComparator(".test."); // or (\W|^)test(\W|$) if you want complete words only 或 然

我将大文本内容保存在
co
列中,我想搜索
co
列是否包含特定的单词,类似于我们在
RDBMS
中所做的操作,例如:where
co
like
%test%
,要实现这一点,我应该编写任何过滤器还是
Map
reduce?有人能举例说明如何做到这一点吗?

你可以这样做

RegexStringComparator comp = new RegexStringComparator(".test.");   // or (\W|^)test(\W|$) if you want complete words only

然后

SingleColumnValueFilter filter = new SingleColumnValueFilter(
    Bytes.toBytes("COLUMN_FAMILY_NAME"),
    Bytes.toBytes("co"),
    CompareOp.EQUAL,
    comp
    );
scan.setFilter(filter);

请注意,由于HBase将查看表中该列的每个实例,因此这方面的性能不会非常出色

RegexStringComparator comp = new RegexStringComparator(".test.");   // or (\W|^)test(\W|$) if you want complete words only

然后

SingleColumnValueFilter filter = new SingleColumnValueFilter(
    Bytes.toBytes("COLUMN_FAMILY_NAME"),
    Bytes.toBytes("co"),
    CompareOp.EQUAL,
    comp
    );
scan.setFilter(filter);

请注意,这方面的性能不会很出色,因为HBase会查看表中该列的每个实例

太棒了,感谢它工作了很多,还有一个问题,我有我的密钥,看起来像:-xyz.abc.date.currenttimestamp,这里日期每天都在变化,我想获取包含特定单词的所有列,就像您在上面和两个日期之间所做的那样,上面的过滤器是我获取所有日期的结果…HBase还为每个记录保留一个时间戳(它会自动将其设置为插入时间,但如果需要,您也可以覆盖它)。您可以在扫描中添加时间戳范围以限制结果(scan.setTimeRange(minTimeStamp,maxTimeStamp);)太棒了,感谢它发挥了很多作用,还有一个问题,我有我的钥匙,看起来像:-xyz.abc.date.currenttimestamp,这里日期每天都在变化,我想获取包含特定单词的所有列,就像您在上面和两个日期之间所做的那样,上面的过滤器是我获取所有日期的结果…HBase还为每个记录保留一个时间戳(它会自动将其设置为插入时间,但如果需要,您也可以覆盖它)。您可以向扫描添加时间戳范围以限制结果(scan.setTimeRange(minTimeStamp,maxTimeStamp);)