在一次做項目的過程中,要實現一個功能,功能描述為前端給定日期范圍,在該日期范圍內取出指定行的信息。在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得到的內容就是時間戳范圍內的數據。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

