HBase中带有扫描查询的RowFilter

时间:2019-06-26 06:16:57

标签: hbase

我在HBase中有下表;

ng build --prod

我的---row--- ---columns--- 15678,ctx,plm,1561356310000 etc... 15678,ctx,plm,1561388710000 etc... 15678,ctx,plm,1561476430000 etc... 26355,yt,rcc,1561356310000 etc... 26355,yt,rcc,1561356310000 etc... ... ... 格式是;

rowKey

而且,我收到了意外的查询请求。我必须获取特定开始时间和结束时间(行中的时间戳)之间的特定设备(id_of_device)的所有值。


例如; 我想获取<id_of_device>,<id_of_component>,<id_of_item>,<timestamp> 15678之间的设备startTime(1561356310000)的数据。我该如何准备扫描查询?根据我的rowKey设计,我写了endTime(1561476430000)。但是我只想使用"id_of_component" and "id_of_item"来获取数据。

"id_of_device" and "start and end timestamps"

1 个答案:

答案 0 :(得分:1)

根据您的行键设计;您可以在开始和停止行旁边使用带有正则表达式的RowFilter。

scan 'mytable', {STARTROW => '15678', ENDROW => '15679', FILTER => "RowFilter(=, 'regexstring:1561356310000$')"}

将在1561356310000的准确时间获取数据。如果根据日期范围创建时间戳正则表达式,则可以查询时间范围。

scan 'mytable', {STARTROW => '15678', ENDROW => '15679', FILTER => "RowFilter(=, 'regexstring:15613563.....$')"}

在时间戳1561356300000和1561356399999之间将获得100秒的数据

scan 'mytable', {STARTROW => '15678', ENDROW => '15679', FILTER => "RowFilter(=, 'regexstring:1561356[3|4|5].....$')"}

将在时间戳1561356300000和1561356599999之间获得300秒的数据

使用正则表达式过滤器可能不是很有效,但是行键中间的id_of_component,id_of_item数据会阻止使用范围扫描的功能。