繁体   English   中英

HBase中带有扫描查询的RowFilter

[英]RowFilter with Scan Query in the HBase

我在HBase中有下表:

---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_component>,<id_of_item>,<timestamp>

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


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

scan 'mytable', {STARTROW => '15678,..,..,1561356310000', ENDROW => '15678,..,..,1561476430000'}

根据您的行键设计; 您可以在开始和停止行旁边使用带有正则表达式的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数据会阻止使用范围扫描的能力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM