在一次做项目的过程中,要实现一个功能,功能描述为前端给定日期范围,在该日期范围内取出指定行的信息。在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得到的内容就是时间戳范围内的数据。

