Hive增量更新方案

2021-09-10 05:17:29 字數 1442 閱讀 5880

hive增量更新方案

方案一(總結出來業界可行方案):

1、hive原始表提前規劃好以時間分割槽,初始化裝載源庫記錄為base_table(最新資料)

2、每個相關表都會有乙個timestamp列,對每一行操作做了修改,都會重置這列timestamp為當前時間戳;

3、新增資料通過sqoop(支援當天抽取)或者匯出當天檔案兩種形式,抽取或匯入到hive表,記錄為新增表incremental_table

4、(1)如果incremental_table表中資料不涉及到更新,直接匯入到以時間分割槽的base_table表中   (2)如果某幾個分割槽涉及到更新操作,將這段時間分區內的base_table和incremental_table資料進行合併,有相同主鍵的取timestamp最新的那條,合併後新資料重新寫回base_table分割槽中;

(3)如果涉及到刪除資料操作,分軟刪除(打標籤)和硬刪除;如果是軟刪除,記錄資料也會存在incremental_table,只是在合併base_table和incremental_table表中過濾掉此記錄寫回base_table即可。如果是硬刪除,需將刪除的資料行放入額外審計表中audit_table,與base_table和incremental_table一起進行合併過濾處理後,再寫回base_table。

採用oozie、nifi或者shell指令碼等方式,將上述流程統一做成乙個工作流,方便排程。 

方案二(如有業務訴求,需要對hive表具體某條記錄進行delete或update操作):

如果乙個hive表要實現update和delete功能,該錶就必須支援acid,需開啟acid,同時必須滿足以下條件:

1、表的儲存格式必須是orc(stored as orc);

2、表必須進行分桶(clustered by (col_name, col_name, ...)  into num_buckets buckets);

3、table property中引數transactional必須設定為true(tblproperties('transactional'='true'));

4、以下配置項必須被設定:

client端:

hive.support.concurrency – true

hive.enforce.bucketing – true

hive.exec.dynamic.partition.mode – nonstrict  

hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager  

服務端:

hive.compactor.initiator.on – true

hive.compactor.worker.threads – 1

hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager(經過測試,服務端也需要設定該配置項)

ES Ik遠端詞典增量更新方案

2 從es ik原始碼可以看到,傳送httphead請求的時候,會攜帶es外掛程式之前儲存的資源最新更新時間 last modified 通過if modified since請求頭攜帶 和最新的資源標識etags 通過if none match請求頭攜帶 服務端接收到這兩個引數後,和服務端狀態進行...

iOS 熱更新方案

由於蘋果在2017年3月左右更新了開發者協議,禁止需要線上審核的應用進行熱更新,所以請大家慎用 企業版不需要提交審核當然是可以使用的 一 jspatch 熱更新時,從伺服器拉去js指令碼。理論上可以修改和新建所有的模組,但是不建議這樣做。建議 用來做緊急的小需求和 修復嚴重的線上bug。二 lua指...

攜程無線離線包增量更新方案實踐

離線包增量更新方案 下面這張簡圖,介紹了我們是如何設計離線包增量更新方案的 現在以乙個新的業務模組上線為例,說明下整個流程 建立業務模組 發布業務模組 在離線包發布系統,選擇業務 倉庫分支,然後build,發布。離線包安裝 其中2個系統的功能簡單介紹下,其中離線包管理系統主要負責以下功能 離線包元資...