免费人成动漫在线播放r18-免费人成观看在线网-免费人成黄页在线观看日本-免费人成激情视频在线观看冫-jlzzjlzz亚洲大全-jlzzjlzz亚洲日本

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 企資頭條 » 熱點(diǎn) » 正文

如何正確的做增量加工

放大字體  縮小字體 發(fā)布日期:2022-12-02 00:56:03    作者:微生興云    瀏覽次數(shù):76
導(dǎo)讀

1.增量加工回到十多年前,增量加工這個(gè)方法并不是一種需要特別需要提出得方法,因?yàn)殛P(guān)系數(shù)據(jù)庫得存儲(chǔ)與計(jì)算性能十分有限(即便是MPP數(shù)據(jù)庫平臺(tái)也不是全都是做全量加工),增量加工是最普遍得方式。數(shù)據(jù)庫系統(tǒng)是支持

1.增量加工

回到十多年前,增量加工這個(gè)方法并不是一種需要特別需要提出得方法,因?yàn)殛P(guān)系數(shù)據(jù)庫得存儲(chǔ)與計(jì)算性能十分有限(即便是MPP數(shù)據(jù)庫平臺(tái)也不是全都是做全量加工),增量加工是最普遍得方式。

數(shù)據(jù)庫系統(tǒng)是支持事務(wù)得,AC發(fā)布者會(huì)員賬號(hào)(原子性、一致性、隔離性、持久性)四大特性可以完美得支持在一個(gè)數(shù)據(jù)表上同時(shí)做更新、刪除、插入操作。數(shù)據(jù)庫系統(tǒng)得數(shù)據(jù)存儲(chǔ)是到每一個(gè)4K或者8K這種大小得數(shù)據(jù)塊上得,詳細(xì)得統(tǒng)計(jì)信息與索引結(jié)構(gòu)都允許我們高效來做增量數(shù)據(jù)處理。

1.1.問題簡述

在當(dāng)前得MaxCompute這種分布式文件系統(tǒng)上,這些操作都變得不容易了。我們得數(shù)據(jù)塊已經(jīng)是64MB,不是KB這個(gè)量級(jí)。我們也沒有索引這種加速從一千萬數(shù)據(jù)中找到五十行數(shù)據(jù)得結(jié)構(gòu)。

那么我們?cè)趺丛贛axCompute做增量加工呢?說實(shí)話,不太好做。因?yàn)闆]有索引結(jié)構(gòu),我們每一次得處理都是全量數(shù)據(jù)檢索。如果還是跟之前在關(guān)系數(shù)據(jù)庫一樣頻繁得提交,不但無法體現(xiàn)增量加工得性能與資源優(yōu)勢(shì),反而成為了劣勢(shì)。(如果我們還想使用關(guān)系數(shù)據(jù)庫支持得delete、update這些特性,可以看下MaxCompute公共云近期上線得新特性“Transactional表”。)

那么我們要不要做呢?總結(jié)一句話:能做得地方還是可以做一下,但是不要勉強(qiáng),不要大規(guī)模得去做,畢竟做增量加工不容易。

2.解決方案

增量加工得前提是我們獲取到了增量數(shù)據(jù),相比全量數(shù)據(jù)增量數(shù)據(jù)是一個(gè)更小得集合,然后我們希望利用這個(gè)小增量集合來完成數(shù)據(jù)加工得過程而不是使用全量,這樣就可以更快速、更節(jié)約得完成整個(gè)數(shù)據(jù)加工過程。

但是增量加工在MaxCompute總結(jié)為兩個(gè)場景:

場景一,全量加工所需資源無法滿足時(shí)效性要求,性能急需優(yōu)化;

場景二,增量加工邏輯簡單,相比全量加工性能優(yōu)勢(shì)明顯;

2.1.加工原則

然后我們需要確立一些使用增量加工得原則,突破或者不遵守這些原則都是不合理或者不正確得。

一、增量表(增量狀態(tài)[U\D\I\K],數(shù)據(jù)更新時(shí)間);

二、2張?jiān)隽勘聿荒苤苯雨P(guān)聯(lián),必須要有至少一張表是全量;

三、增量加工產(chǎn)出得結(jié)果表,還需要記錄增量狀態(tài)和數(shù)據(jù)更新時(shí)間;

四、多個(gè)表關(guān)聯(lián)情況下,需要取多個(gè)表得增量標(biāo)識(shí),只要某一個(gè)表得關(guān)聯(lián)行是增量就使用該表增量標(biāo)識(shí);

五、只有主表或則INNER JOIN得表得INSERT和DELETE狀態(tài)可以傳遞到下一層,其他表得增量狀態(tài)都是UPDATE;

2.2.MERGE邏輯

增量集成到MaxCompute平臺(tái)得數(shù)據(jù)落地后,需要做一次MERGE才會(huì)產(chǎn)生ODS層得全量數(shù)據(jù)。所以,MERGE邏輯是最簡單和經(jīng)典得增量加工邏輯。最簡單得MERGE邏輯如下:

INSERT OVERWRITE TABLE table_old PARTITION(ds='${ds}')SELECT `(ds)?+.+`FROM table_old a --全量表LEFT ANTI JOINtable_new b --增量表ON a.pk = b.pkAND b.ds = '${ds}'WHERe a.ds = '${lastdate}'UNIOn ALLSELECt b.*FROM table_new bWHERe b.ds = '${ds}'-- AND b.operation not in('D');

這個(gè)邏輯使用了一個(gè)JOIN加上一個(gè)UNIOn實(shí)現(xiàn)了一個(gè)MERGE邏輯,把增量合并成一份全量。這里有一個(gè)選項(xiàng)【-- AND b.operation not in('D')】,是否要把物理刪除從當(dāng)前全量表中刪除,可以根據(jù)實(shí)際業(yè)務(wù)需求選擇。

2.3.業(yè)務(wù)計(jì)算邏輯

MERGE邏輯是最簡單得一個(gè)涉及到增量得邏輯,但是實(shí)際業(yè)務(wù)計(jì)算邏輯要比這個(gè)場景更加復(fù)雜一些。

2.3.1.2張?jiān)隽勘淼锰幚?/p>

我們?cè)贛ERGE里面雖然也是2張表,但是其實(shí)這是一張表得增量與全量。如果是2張?jiān)隽勘?,那么該如何處理呢?;趦蓮堅(jiān)隽勘頍o法關(guān)聯(lián)得原則,我們必須引入全量表。

1.我們需要利用2張表得當(dāng)日增量與全量,也就是說有4張表參與計(jì)算。

2.如果不想讓全量直接關(guān)聯(lián),那么就需要先找到兩個(gè)增量表得主鍵得并集。然后從兩個(gè)表得全量中拆出這個(gè)并集得集合,再去關(guān)聯(lián)。

邏輯如下:

-- ta_add ta表得增量表-- ta_all ta表得全量表-- tb_add tb表得增量表-- tb_all tb表得全量表-- 注意這個(gè)場景使用了mapjoin,增量表得數(shù)據(jù)量是有限制得with tx_add as(select distinct pk from(select pk from ta_add where ds = '${ds}'union allselect pk from tb_add where ds = '${ds}')t),ta_add2(select t1.*from ta_all t1 join tx_add t2 on t1.pk=t2.pkwhere t1.ds = '${ds}'),tb_add2(select t1.*from tb_all t1 join tx_add t2 on t1.pk=t2.pkwhere t1.ds = '${ds}')insert overwrite table tc_add partition (ds='${ds}')select *from ta_add2 t1 join tb_add2 t2 on t1.pk=t2.pk;

這個(gè)邏輯利用了增量表比較小,可以利用了MAPJOIN得特性,可以快速得產(chǎn)出兩個(gè)可以關(guān)聯(lián)得并集再去關(guān)聯(lián)。因?yàn)楸苊饬舜蟊淼弥胤植迹裕梢源蠓嵘\(yùn)行效率,降低資源消耗。(在這里增量得意義是表真得很大,如果全量是兩張百萬級(jí)得表,建議測試一下性能,可能直接關(guān)聯(lián)更簡單效率更高。所以,在MaxCompute做增量加工計(jì)算很多場景是沒必要得。)

2.3.2.2張以上增量表得處理

我們一般說得增量加工得表還是指業(yè)務(wù)表,而不是代碼表、參數(shù)表這種小表。這種萬級(jí)得小表,增量與全量關(guān)聯(lián)計(jì)算得性能差距可以忽略。百萬級(jí)這種量級(jí)得表,增量計(jì)算也是意義不大得。我們看下上一小節(jié)那段冗長得邏輯,其實(shí)原本只需要2行就可以,現(xiàn)在已經(jīng)變得如此得復(fù)雜。2張以上得表,如果使用同一PK關(guān)聯(lián),2張以上表得這個(gè)邏輯還是可以沿用得。如果有多個(gè)不同得關(guān)聯(lián)PK,這個(gè)問題就從一維搞成了二維,除非實(shí)在不得已,不建議再去搞增量加工了。

我在這個(gè)優(yōu)化工作得過程中遇到得場景,就是遠(yuǎn)遠(yuǎn)大于2張以上得表得增量加工,并且關(guān)聯(lián)得PK也是多個(gè)。原來開發(fā)者選取了主表作為增量表,其他得表都是全量表得計(jì)算邏輯。因?yàn)檫@是一個(gè)分鐘級(jí)得任務(wù),原來得開發(fā)者應(yīng)該還是希望從性能得角度做一些高效得設(shè)計(jì)。

但是在這個(gè)場景,第壹主表并不是太大(百萬級(jí)),相反左關(guān)聯(lián)得表有上千萬得。所以,我并未看到這個(gè)增量加工帶來巨大性能提升得意義。第二主表得增量是通過一個(gè)指定得時(shí)間區(qū)間來識(shí)別近一個(gè)時(shí)間片段得,這種在集成得源是源系統(tǒng)得時(shí)候是可行得。但是這里剛好是一個(gè)不穩(wěn)定得備庫得備庫,所以,使用固定時(shí)間區(qū)間可能會(huì)因?yàn)閿?shù)據(jù)延遲導(dǎo)致未被識(shí)別為增量。

索性,我就直接改為全量加工了,這樣就沒問題了。但是這樣就無法識(shí)別出哪些數(shù)據(jù)是加工都得增量了,這就涉及到下面要提到得增量推送得問題。

2.4.增量推送邏輯

有兩種思路可以獲取需要推送得增量,一種是從原始增量開始就一直保留增量標(biāo)志字段,另一種是從最終結(jié)果中利用T和T+1兩個(gè)全量比對(duì)出增量。在上面提到得場景,我們就遇到了第壹個(gè)場景,我們需要在加工環(huán)節(jié)保持增量識(shí)別標(biāo)志,并對(duì)這個(gè)字段在關(guān)聯(lián)后得結(jié)果進(jìn)行計(jì)算。

2.4.1.增量標(biāo)志計(jì)算

增量標(biāo)志要用來計(jì)算,一定是可以計(jì)算得。在上一節(jié)我提到系統(tǒng)有延遲業(yè)務(wù)得數(shù)據(jù)時(shí)間是不可靠得了,那如何來判斷增量呢?我們得集成任務(wù)其實(shí)很難去從數(shù)據(jù)庫得備庫獲取可靠得時(shí)間戳,但是我們本次集成得增量數(shù)據(jù)一定是一個(gè)確定得增量集合,所以,這個(gè)ETL_DATE(一般是我們dataworks得bizdate或者yyyymmddhhmiss)就是我們?cè)贛axCompute批量做加工可用得增量時(shí)間戳。數(shù)據(jù)庫同步工具識(shí)別出來得數(shù)據(jù)得變化狀態(tài)有增、刪、改、主鍵更新(I、D、U、K)四種,我們是可以直接利用得。

所以,我們?cè)谶@里使用得邏輯如下:

select ...,case when a.etl_partition ='${ds}' then a.etl_partitionwhen b.etl_partition ='${ds}' then b.etl_partition...else a.etl_partition end as etl_date,case when a.etl_partition ='${ds}' then a.operationwhen b.etl_partition ='${ds}' then 'U'...else a.operation end as operationfrom tablea aleft join tableb on a.pk=b.pk...where ...;

所以這種方式是可以把增量狀態(tài)保持下去得,但是因?yàn)檫@個(gè)計(jì)算后得結(jié)果其實(shí)一次次得疊加后,可能就不知道對(duì)不對(duì)了。所以,在具體得業(yè)務(wù)場景還要具體得去看。

2.4.2.全字段比對(duì)

全字段比對(duì)是一種暴力得計(jì)算方法,不需要增量加工,我也可以計(jì)算出增量。并且這種計(jì)算結(jié)果還是真實(shí)可靠得,相對(duì)于一個(gè)經(jīng)過多層計(jì)算后得業(yè)務(wù)結(jié)果表來說,更是如此。

全字段比對(duì)邏輯如下:

一、T+1日表比T日表多得記錄,INSERT狀態(tài);

二、T日表比T +1日表多得記錄,DELETe狀態(tài);

三、T+1日表比T日表,關(guān)聯(lián)后相同主鍵得非主鍵字段值不一致得,UPDATE狀態(tài);

這個(gè)比對(duì)十分消耗計(jì)算資源,尤其是一些最細(xì)業(yè)務(wù)粒度得交易表、事件表。但是對(duì)一些用戶表這種表來說,問題倒是不大。比對(duì)邏輯如下:

-- Iselect a.*,'I' as operationfrom table1 aleft join table1 b on a.pk = b.pk and b.ds='${lastdate}'where a.ds='${ds}'and b.pk is null;-- Dselect a.*,'D' as operationfrom table1 aleft join table1 b on a.pk = b.pk and b.ds='${ds}'where a.ds='${lastdate}'and b.pk is null;-- Uselect a.*,'U' as operationfrom table1 ajoin table1 b on a.pk = b.pk and b.ds='${ds}'where a.ds='${lastdate}'and(coalesce(b.col,'')<>coalesce(b.col,'') -- 字符or coalesce(b.col,0)<>coalesce(b.col,0) -- 數(shù)值or coalesce(b.col,'0001-01-01')<>coalesce(b.col,'0001-01-01')) -- 日期;

全字段比對(duì)看起來其實(shí)并不優(yōu)美,實(shí)在是有點(diǎn)粗暴。當(dāng)然你也許會(huì)有更容易識(shí)別增量得方式,可以多試試,這將是你保底得方法。

3.實(shí)踐總結(jié)

通過上面得內(nèi)容,我們對(duì)增量加工得方法有了一定了解。希望我文中提到得方法能幫助大家在日后在項(xiàng)目中正確得使用增量加工得方法,并通過這個(gè)方法在部分場景獲得顯著得性能改進(jìn)。另外我還是要提到一點(diǎn),就是增量加工邏輯比全量加工更加復(fù)雜,并且還會(huì)遇到更為復(fù)雜得異常排查、補(bǔ)數(shù)據(jù)等維護(hù)等問題。大家在實(shí)際項(xiàng)目中,一定要權(quán)衡好利弊,再定奪方案。

原文鏈接:感謝分享click.aliyun感謝原創(chuàng)分享者/m/1000346940/

感謝為阿里云來自互聯(lián)網(wǎng)內(nèi)容,未經(jīng)允許不得感謝。

 
(文/微生興云)
打賞
免責(zé)聲明
本文為微生興云推薦作品?作者: 微生興云。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://m.bangpiao.com.cn/news/show-312666.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2023 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

客服001 客服002 客服003

工作時(shí)間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: 人人爽人人看 | 欧美性色黄在线视 | 一a一级片 | 国产精品成人一区二区1 | 欧美成人性色xxxxx视频大 | 成人性色大片 | 国产乡下三片在线观看64 | 动漫成年美女黄漫网站小视频 | 日韩视频欧美视频 | 天天干成人网 | 黄色片毛片 | 香蕉视频在线观 | 国内一区二区三区精品视频 | 国产一区二区三区不卡观 | 欧洲一级毛片免费 | 欧美激情人成日本在线视频 | 欧美日产国产亚洲综合图区一 | 欧美成人观看免费完全 | 久久综合丝袜长腿丝袜 | 国产免费高清在线精品一区 | 黑人与中国女一级毛片不卡 | 亚洲免费二区 | 日本aⅴ精品一区二区三区久久 | 国产旗袍丝袜在线观看视频 | 黄网页在线观看 | 男女午夜视频 | 老湿影院免费体验区 | 欧美三页 | 国产乡下三片 | 日日操天天操 | 免费看的黄色录像 | 日韩一级在线播放 | 成人污网站| 亚洲国产精品成人久久 | 男人边吃奶边爱边做视频刺激 | 免费看一毛一级毛片视频 | 色欲麻豆国产福利精品 | 亚洲国产成人在线观看 | 怡红院美国十次成人影院 | 欧美精彩狠狠色丁香婷婷 | 动漫美女胸被狂揉扒开吃奶动态图 |