Hbase行过滤不起作用

时间:2015-10-27 06:05:59

标签: java hbase

我有一个Hbase表,我的行键如下所示

 DELETE c
FROM campaigns c
JOIN campaignsFroms f      ON f.id = c.id
JOIN campaignsRaw r        ON r.id = c.id
JOIN campaignsSubjects s   ON s.id = c.id
JOIN campaignIPTracking ip ON ip.id = c.id
JOIN campaignTracking ct   ON ct.id = c.id
WHERE c.id = '1582'                                 

现在,我想使用行键正则表达式过滤掉一些行,如下所述

        12345678912:::timestamp:::1234567891:::john         cf:somedata
        12345678912:::timestamp:::1234567891:::smith        cf:somedata
        12345678912:::timestamp:::1234567891:::lotta        cf:somedata

但这似乎也没有用,我明白我们不能通过一些研究在rowkey中使用正则表达式。

如何在hbase shell中使用FuzzyRowFilter进行此操作?这个过滤器对我的情况有帮助吗?

我知道我可以对特定行使用SingleColumnValue过滤器,但我的行键对我来说也很重要。

1 个答案:

答案 0 :(得分:0)

您需要的是对行键进行范围扫描。 看起来,该范围适用于整个字符串。例如,以下工作。

scan 'scanRangeTest',{STARTROW=>'1234|20-10-2014|john', STOPROW=>'1234|24-10-2014|john'}

您将获得两个时间戳之间约翰的所有记录。这里要点是你应该建立起始和停止参数。

有一个正则表达式比较器。您可以将它与RowKey Filter一起使用。请参阅here。但是,当您以这种方式使用正则表达式时,您将获得所有匹配的记录,但它不会为您提供范围选项,这对您来说可能很重要。

上述' rowfilter与正则表达式比较器的替代品'是二级索引,FuzzyRowFilter。这些有助于通过跳过某些记录来加快扫描速度。但是,范围选项仍然不存在。因此,您可以根据您的要求接听电话。

解决您的问题

获取日期范围和特定用户名(john)以及一些ID(12345678912,1234567891)。在我的扫描命令中,范围仅适用于完整行键而不适用于正则表达式。所以只要你有名字和id的共同点(你可以像往常一样得到这个参数)然后只改变时间戳(你可以添加这个作为你的要求),并使用这三个,你构建整行键,然后你可以使用开始和停止行。我希望我能满足你的要求。

create 'scanRangeTest', {NAME => 'srt', REPLICATION_SCOPE => '1'}
put 'scanRangeTest','1234|20-10-2014|john', 'srt:name','John Details'
put 'scanRangeTest','1235|21-10-2014|smita', 'srt:name','Smita Details'
put 'scanRangeTest','1236|22-10-2014|lotta', 'srt:name','Lotta Details'
put 'scanRangeTest','1234|23-10-2014|john', 'srt:name','John Details sec timestamp'
put 'scanRangeTest','1237|23-10-2014|john', 'srt:name','Ram Details'

scan 'scanRangeTest',{STARTROW=>'1234|20-10-2014|john', STOPROW=>'1234|24-10-2014|john'}

Output
ROW                                      COLUMN+CELL
 1234|20-10-2014|john                    column=srt:name, timestamp=1446045032763, value=John Details
 1234|23-10-2014|john                    column=srt:name, timestamp=1446045054544, value=John Details sec timestamp