【问题标题】:Hbase Row filtering doesn't workHbase 行过滤不起作用
【发布时间】:2015-10-27 06:05:59
【问题描述】:

我有一个 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'}

但这似乎也不起作用,我知道我们不能通过一些研究在 rowkey 中使用正则表达式。

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

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

【问题讨论】:

  • 那么你需要在行键和两个时间戳之间的所有行吗?
  • 是的,到目前为止我已经尝试过了,但这在获取两个时间戳扫描'mytable'之间的记录时无法正常工作,{FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL') ,RegexStringComparator.new('^\d{1,}:::([startingtimestamp-endingtimestamp]*):::.*:::john'))}

标签: java hbase


【解决方案1】:

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

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

您将获得两个时间戳之间 john 的所有记录。这里的重点是您应该构建开始和停止参数。

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

上面“带有正则表达式比较器的行过滤器”的替代品是二级索引和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

【讨论】:

  • 范围检查在行过滤器和模糊行过滤器的情况下不起作用,正则表达式在 startrow 和 stoprow 的情况下不起作用,因此您的输入没有帮助。
  • 这就是我上面所说的。您只有具有完整行键的范围扫描正在工作..请再次阅读上述评论。我提到范围不适用于响应您关于模糊行过滤器的查询。
  • 好的,我可以在 stoprow 和 startrow 中使用正则表达式吗?请参阅我的初始帖子,您在答案中无处使用正则表达式。如果没有正则表达式与行键上的范围扫描相结合,我似乎无法解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多