背景及介紹詳見:**鏈冷熱資料處理實踐
方案主要包含讀寫兩塊,寫是第一步,因為pg是行資料,而hbase是列資料,而且在做資料同步的同時,還要考慮怎樣的資料結構可以方便資料讀取,不僅僅如此,因為乙個主單會對應多條明細,而查詢的時候需要根據單號撈取相關的明細資料,最終通過不斷嘗試,梳理出以下可執行方案
行轉列的時候,pg的一行資料會轉成hbase的多條資料,因為查詢上只需要支援order_no作為查詢條件,直接以order_no作為rowkey,以為查詢的資料需要將每條明細轉換成乙個物件(object),這裡面涉及到兩個維度的匹配,乙個是這麼多資料如何哪些資料是同一條資料,另乙個是這個資料對應的是哪條資料的哪個屬性,我們的做法是,已pg資料的列作為hbase的列簇,pg明細資料的唯一標識作為列的別名,比如以資產碼作為別名,開始動手
create
't_operate_order_inventory_list'
, , , , , , , ,
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'inventory_sn:8600021356'
,'8600021356'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'factory_sn:8600021356'
,'ls36071s25w4355'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'package_sn:8600021356'
,'za00000097'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'inventory_spu:8600021356'
,'bat1011'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'inventory_sku:8600021356'
,'bat101110'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'inventory_status:8600021356'
,'0'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'is_deleted:8600021356'
,'0'
put 't_operate_order_inventory_list'
,'sn_20191106509325024585940992'
,'inventory_ext:8600021356'
,''
讀取的時候通過order_no或者明細資料,然後根據列和列簇組裝明細list,**實現如下
public list
queryinventory
(inventoryqueryreq req)
// date check
date orderdate = dateutil.
formatdate
(orderno.
substring(3
,11),
"yyyymmdd");
if(dateutil.
calintervalday
(system.
currenttimemillis()
, orderdate.
gettime()
)> commonconstant.default_data_time_operate_order_inventory_list)
else
switch
(new
string
(cellutil.
clonefamily
(cell)))
inventorylistmap.
put(id, list);}
// filter
list
data =
newarraylist
<
>
(inventorylistmap.
values()
);if(
!collectionutils.
isempty
(data))if
(!stringutils.
isempty
(req.
getinventorysku()
))if(
!stringutils.
isempty
(req.
getpackagesn()
))}return data;
}// get from pg
operateorderinventorylist query =
newoperateorderinventorylist()
; query.
setrefsn
(orderno)
; query.
setisdeleted
(deleteenum.existed.
value()
);query.
setinventoryspu
(req.
getinventoryspu()
);query.
setinventorysku
(req.
getinventorysku()
);query.
setpackagesn
(req.
getpackagesn()
);list
query
(query)
; list
inventoryvolist =
newarraylist
<
>()
;if(!collectionutils.
isempty
(inventorylist)))
;}return inventoryvolist;
}
資料處理 流資料處理利器
流處理 stream processing 是一種計算機程式設計正規化,其允許給定乙個資料序列 流處理資料來源 一系列資料操作 函式 被應用到流中的每個元素。同時流處理工具可以顯著提高程式設計師的開發效率,允許他們編寫有效 乾淨和簡潔的 流資料處理在我們的日常工作中非常常見,舉個例子,我們在業務開發...
爬蟲 資料處理 pandas資料處理
使用duplicated 函式檢測重複的行,返回元素為布林型別的series物件,每個元素對應一行,如果該行不是第一次出現,則元素為true keep引數 指定保留哪一重複的行資料 dataframe替換操作 使用df.std 函式可以求得dataframe物件每一列的標準差 資料清洗清洗重複值 清...
資料處理 pandas資料處理優化方法小結
資料處理時使用最多的就是pandas庫,pandas在資料處理方面很強大,整合了資料處理和資料視覺化。pandas的視覺化使用的是matplotlib。回到主題 計算資料的某個欄位的所有值,對其欄位所有值進行運算 處理的字段資料為時間戳,需要計算該時間戳距離現在的時間,單位為天。一般方法 使用現在的...