vetty

Thrift中实现按照时间戳范围操作Hbase数据

在一次做项目的过程中,要实现一个功能,功能描述为前端给定日期范围,在该日期范围内取出指定行的信息。在Thrift常用的API中,取出一行所有的数据接口为getVer(),getver()具体描述如下:

如果想取到带有时间戳的数据,有一个接口为getVerTs,getVerTs内容描述如下:

但是此接口只能取到小于该时间戳的数据,如果想取到时间戳范围内的数据还是无能为力,为了实现此功能,接着又去尝试了getVer()中参数5map的用法,以为在map中添加timestamp的限制条件就好了。

于是搜啊搜,Google,Baidu都尝试了,关于map的使用例子却找不到,于是就按照网上给的map的含义自己写,但是npm start后一大堆错误,最后实在没办法只好放弃此种方法。

然后就静下心来看了看自己写的代码,自己处理hbase返回数据的方式,忽然,恍然大悟,自己费尽心思想用map实现,其实根本不需要,只需要对其得到的数据加上限制条件就OK了。我的代码如下:


 1 client.getVer('rdga_by_plate',encodedPlate,'KEY:ID','10000',null,AsyncSearchIdAjaxQuery);
function AsyncSearchIdAjaxQuery(err,idValueAjaxQuery) 2 { 3 if (err) 4 { 5 console.log('getRow error:', err); 6 } 7 else 8 { 9 console.log("The ajax startdate is:",dateToTimestamp(inputedStartDate)); 10 console.log("The ajax enddate is:",dateToTimestamp(inputedEndDate)); 11 var rowKeys = new Array(); 12 var timestampNum = 0; 13 var startDateTimestamp = dateToTimestamp(inputedStartDate); 14 var endDateTimestamp = dateToTimestamp(inputedEndDate); 15 for(var key in idValueAjaxQuery) 16 { 17 //console.log("The key is:",key); 18 19 console.log('Row value:', idValueAjaxQuery[key].value.toString()); 20 console.log('Timestamp: ',idValueAjaxQuery[key].timestamp.toString()); 21 if(idValueAjaxQuery[key].timestamp.toString() >= startDateTimestamp && idValueAjaxQuery[key].timestamp.toString() <= endDateTimestamp) 22 { 23 rowKeys.push(idValueAjaxQuery[key].value.toString()); 24 timestampNum++; 25 }
26 client.getRows('rdga_by_id',rowKeys,null,AsyncSearchDetailsAjaxQuery); 27 } 28 29 } 30 }

getVer得到的数据在idValueAjaxQuery中,它的里面包括timestamp的内容,要想实现时间戳范围内查找数据,此时在21行加上限制条件,此时符合条件的idValueAjaxQuery中的value值就会放置在rowKeys数组中,这时通过26行的getRows得到的内容就是时间戳范围内的数据。



posted on 2015-03-26 17:48  cocos2014  阅读(3183)  评论(0编辑  收藏  举报

导航