[英]Hbase Row filtering doesn't work
我有一个Hbase表,其中的行键如下所示
12345678912:::timestamp:::1234567891:::john cf:somedata
12345678912:::timestamp:::1234567891:::smith cf:somedata
12345678912:::timestamp:::1234567891:::lotta cf:somedata
现在,我想使用行键正则表达式过滤掉一些行,如下所述
scan 'mytable', {STARTROW=>'.*:::starttimestamp:::.*:::john', STOPROW=>'.*:::endtimestamp:::.*:::john'}
但这似乎也不起作用,而且我了解某些研究无法在行键中使用正则表达式。
如何在HBase Shell中使用FuzzyRowFilter进行此操作? 这个过滤器真的对我有帮助吗?
我知道我可以对特定行使用SingleColumnValue筛选器,但我的行键对我也很重要。
您需要对行键进行范围扫描。 看起来,范围适用于整个字符串。 例如,以下工作。
scan 'scanRangeTest',{STARTROW=>'1234|20-10-2014|john', STOPROW=>'1234|24-10-2014|john'}
您将获得两个时间戳之间的john的所有记录。 这里的关键是您应该构建开始和停止参数。
有一个正则表达式比较器。 您可以将其与RowKey筛选器一起使用。 请参考这里 。 但是,当您以这种方式使用正则表达式时,将获得所有匹配的记录,但不会提供范围选项,这对您可能很重要。
上面的“带有正则表达式比较器的行过滤器”的替代方法是二级索引和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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.