訂單拉鏈表實戰(zhàn)丨教程it資源_第1頁
訂單拉鏈表實戰(zhàn)丨教程it資源_第2頁
訂單拉鏈表實戰(zhàn)丨教程it資源_第3頁
訂單拉鏈表實戰(zhàn)丨教程it資源_第4頁
訂單拉鏈表實戰(zhàn)丨教程it資源_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

慕課網首 免費課 實戰(zhàn)課 金職 慕課專 手 從所有的詞條中查詢Java31初識3Kafka4Kafka擴展內

徐老師·更新于2020-09- 上一節(jié)2需求設計與實 4數據可視化和…下一拉鏈據冗余,浪費磁盤空間。所以這種表,一般使用增量的方式,每日新增的數據在這注意一點:針對訂單表,如果單純的按照訂單產生時間增量數據,是有問題的,因為用戶可能今天下單,明天才支付,但是Hve是不支持數據更新的,這樣雖然MySQL中訂單的狀態(tài)改變了,但是Hve中訂單的狀態(tài)還是之前的狀態(tài)。想要解決這個問題,一般有這么幾種方案第一種:每天全量導入訂單表的數據,這種方案在項目啟動初期是沒有多大問題的,因為前期數據量不大,但是隨著項目的運營,訂單量暴增,假設每天新增億訂單,之前已經累積了10億訂單,如果每天都是全量導入的話,那也就意味著每天都需要把數據庫中的100多億訂單數據導入到HDFS中保存一份,這樣會極大的造成數據冗余,太浪費磁盤空間了。第二種:只保存當天的全量訂單表數據,每次在導入之前,刪除前一天保存的全量訂單數據,這種方式雖然不會造成數據冗余,但是無法查詢訂單的歷史狀態(tài),只有當前的狀態(tài),也不太好。第三種:拉鏈表,這種方式在普通增量導入方式的基礎之上進行完善,把變化的數據也導入進來,這樣既不會造成大量的數據冗余,還可以查詢訂單的歷史狀態(tài)。拉鏈表是針對數據倉庫設計中表數據的方式而定義的,顧名思義,所謂拉鏈,就是記錄歷史。記錄下面就是一張拉鏈表,的是用戶的最基本信息以及每條記錄的生命周期我們可以使用用戶編拿到當天號數據以及之前的歷史數解2026-01-9999-12-初始數2026-01-2026-01-初始數2026-01-9999-12-初始數2026-01-9999-12-修2026-01-9999-12-新說明start_time表示該條記錄的生命周期開始時間,end_time表示該條記錄的生命周期結束時間end_time'9999-12-31'表示該條記錄目前處于有效狀態(tài);如果查詢當前所有有效的記錄,則使SQL select*fromuserwhereend_time='9999-12- select*fromuserwherestart_time<='2026-01-02'andend_time>='2026-這就是拉鏈表那針對我們前面分析的訂單表,希使用拉鏈表的方式實現因為每天都保存全量訂單數據比浪費磁盤空間,但是只增量的無法反應訂單的狀態(tài)變化。所以需要 增量,還要訂單狀態(tài)變化了的數據已發(fā)在這我們先分析兩種狀態(tài):未支付和已支付我們先舉個例子訂單創(chuàng)建時更新時訂單狀解2026-03-未支新2026-03-2026-03-已支新月2日結束訂單表所有數據如下訂單創(chuàng)建時更新時訂單狀解2026-03-2026-03-已支修2026-03-2026-03-已支2026-03-2026-03-已支新1:首先針對3月1號中的訂單數據構建初始的拉鏈表,拉鏈表中需要有一個start_time(數據生效開始時間和end_time(數據生效結束時間),默認情況下start_time等于表中的創(chuàng)建時間,end_time初始化為一限大的日期999-2-31訂單訂單狀未支2026-03-9999-12-已支2026-03-9999-12-:在月號的時候,需要將訂單表中發(fā)生了變化的數據和新增的訂單數據整合到之前的拉鏈表中此時需要先創(chuàng)建一個每日更新表,將每日新增和變化了的數據保存到里面然后基于拉鏈表和這個每日更新表進行l(wèi)eftjoin,根據訂單id進行關聯,如果可以關聯上,就說明這個然后再和每日更新表中的數據執(zhí)行unionall操作,將結果重新insert到拉鏈表最終拉鏈表中的數據如下訂單訂單狀未支2026-03-2026-03-已支2026-03-9999-12-已支2026-03-9999-12-已支2026-03-9999-12-解釋因為在3月2號的時候,訂單id為001的數據的訂單狀態(tài)發(fā)生了變化,所以拉鏈表中訂單id為001的原始數據的end_time需要修改為2026-03-01,然后需要新增一條訂單id為001的數據,訂單狀態(tài)為已支付,start_time為2026-03-02,end_time為還需要將3月2號新增的訂單id為003的數據也添加進來下面我們開始實現1:首先初始化202--01、026-03-0和202-0-03的訂單表新增和變化的數據,os_serordr(直接將數據初始化到HDFS中),這個表其實就是前面我們所說的每日更新表注意:這里模擬使用sqo從ys中抽取新增和變化的數據,根據rrdt和upt_ie這兩個字段獲取這些數據,所以此時os_srrr中的數據就是每日的新增和變化了的數據。執(zhí)行代碼生成數據代碼如下publicstaticvoidmain(String[]args)throws//通過接口獲取用戶行為數StringdataUrl="JSONObjectparamObj=new//TODOcode:,需要 上獲取有效,具體操作流程見paramObj.put("code","imooc");// 9//判斷獲取的用戶行為數據是否正booleanflag=longstart=("===============start上傳數據//從dataObj中獲取每一天,每一種類型的數String[]dateArr=for(intStringdt=StringtableName=//獲取某一天某一類型的數JSONArrayresArr=StringBuffersb=newfor(intJSONObjectjsonObj=Stringline=}}//將數據上傳到HDFS上面,注意:需要關閉HDFS的權限校驗機StringhdfsOutPath=StringfileName=tableName+"-("開始上傳}("===============end上傳數據longend=("===============耗時:"+(end-start)/1000+"秒logger.error("上傳用戶行為數據失敗}}s_srrr面已經使用過,所以在這只需要將0--0、22-0-0和06-0-0的數據加載進去即可hive(default)>altertableods_mall.ods_user_orderaddifnotexistshive(default)>altertableods_mall.ods_user_orderaddifnotexistshive(default)>altertableods_mall.ods_user_orderaddifnotexists然后在dwd_user_order中生成數hive(default)>insertoverwritetabledwd_mall.dwd_user_orderfromwheredt= 'andorder_idisnothive(default)>insertoverwritetabledwd_mall.dwd_user_orderorderfromwheredt= 'andorder_idisnothive(default)>insertoverwritetabledwd_mall.dwd_user_orderfromwheredt= 'andorder_idisnot創(chuàng)建拉鏈表:dws_user_order_zipcreateexternaltableifnotexists )rowformatfieldsterminatedbylocation3:向拉鏈表中添加數:添加2026-03-01的全量數據至拉鏈表(初始化操作insertoverwritetableselect(whenduoz.end_time='9999-12-31'andduo.order_idisnotnullelseduozendfromdws_mall.dws_user_order_zipasleft(fromwhere )asonduoz.order_id=union'2026-03-01'as'9999-12-31'asfromdwd_mall.dwd_user_orderaswhere )as查詢此時拉鏈表中的數hive(default)>select*from32026-03-0110NULL42026-03-0110NULL52026-03-0111-Timetaken:0.176seconds,Fetched:3:添加2026-03-02的新增及變化的數據至拉insertoverwritetableselect(whenduoz.end_time='9999-12-31'andduo.order_idisnotnullelseendasfromdws_mall.dws_user_order_zipasleft(fromwhere )asonduoz.order_id=union'2026-03-02'as'9999-12-31'asfromdwd_mall.dwd_user_orderaswhere )as查詢此時拉鏈表中的數hive(default)>select*from32026-03-0110NULL42026-03-0110NULL52026-03-0111-62026-03-0111-72026-03-0210NULL82026-03-0211- Timetaken:0.186seconds,Fetched:6查詢目前的所有有效 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0110NULL42026-03-0111-52026-03-0111-62026-03-0210NULL72026-03-0211- Timetaken:0.269seconds,Fetched:5查詢3月1日的切片數 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0110NULL42026-03-0110NULL52026-03-0111- Timetaken:0.182seconds,Fetched:3查詢3月2日的切片數 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0110NULL42026-03-0111-52026-03-0111-62026-03-0210NULL72026-03-0211- Timetaken:0.216seconds,Fetched:5:添加2026-03-03的新增及變化的數據至拉鏈insertoverwritetableselect(whenduoz.end_time='9999-12-31'andduo.order_idisnotnullelseendasfromdws_mall.dws_user_order_zipasleft(fromwhere )asonduoz.order_id=union'2026-03-03'as'9999-12-31'asfromdwd_mall.dwd_user_orderaswhere )as查詢目前的所有有效數hive(default)>select*fromdws_mall.dws_user_order_zipwhere32026-03-0111-42026-03-0111-52026-03-0211-62026-03-0111-72026-03-0211-82026-03-0311-92026-03-0310NULL Timetaken:0.359seconds,Fetched:7查詢3月1日的切片數 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0110NULL42026-03-0110NULL52026-03-0111- Timetaken:0.328seconds,Fetched:3查詢3月2日的切片數 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0110NULL42026-03-0111-52026-03-0111-62026-03-0210NULL72026-03-0211- Timetaken:0.951seconds,Fetched:5查詢3月3日的切片數 hive(default)>select*fromdws_mall.dws_user_order_zipwhere 32026-03-0111-42026-03-0111-52026-03-0211- Timetaken:0.195seconds,Fetched:7此時,如果想要翻舊賬,查看某一個訂單的歷史變化情

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論