[英]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.