在一次做項目的過程中,要實現一個功能,功能描述為前端給定日期范圍,在該日期范圍內取出指定行的信息。在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得到的內容就是時間戳范圍內的數據。