HBASE多行轉列冷資料處理

2021-10-04 18:48:29 字數 3448 閱讀 3830

背景及介紹詳見:**鏈冷熱資料處理實踐

方案主要包含讀寫兩塊,寫是第一步,因為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。回到主題 計算資料的某個欄位的所有值,對其欄位所有值進行運算 處理的字段資料為時間戳,需要計算該時間戳距離現在的時間,單位為天。一般方法 使用現在的...