成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分布式計(jì)算之?dāng)?shù)據(jù)質(zhì)量漫談

開發(fā) 開發(fā)工具 分布式
數(shù)據(jù)探查不止用在數(shù)據(jù)質(zhì)量領(lǐng)域,數(shù)倉開發(fā)、數(shù)據(jù)遷移等都需要對(duì)源數(shù)據(jù)進(jìn)行數(shù)據(jù)探查。數(shù)據(jù)倉庫的所有數(shù)據(jù)基礎(chǔ)都是源數(shù)據(jù)(ODS),在開發(fā)數(shù)倉之前,需要對(duì)源數(shù)據(jù)進(jìn)行探查,才能保證產(chǎn)出的數(shù)據(jù)倉庫的準(zhǔn)確性。

 [[442615]]

一 概述

1 數(shù)據(jù)質(zhì)量問題無處不在

基本上每個(gè)用數(shù)據(jù)的同學(xué),都遇到過以下類似的問題。

  • 表沒有按時(shí)產(chǎn)出,影響下游,嚴(yán)重的甚至可能影響線上效果。
  • 打點(diǎn)缺失,看了報(bào)表才發(fā)現(xiàn)數(shù)據(jù)對(duì)不上。
  • 數(shù)據(jù)統(tǒng)計(jì)出來,uv大于pv,很尷尬。
  • 數(shù)據(jù)產(chǎn)出暴增,本來1000萬的數(shù)據(jù)變成了3000萬。
  • 字段里面的枚舉值和注釋里面的對(duì)不上,沒人能解釋。
  • 某些維度缺失,沒法做進(jìn)一步的數(shù)據(jù)分析。
  • 做了一通分析,發(fā)現(xiàn)結(jié)果很離譜,一點(diǎn)點(diǎn)向前分析,發(fā)現(xiàn)打點(diǎn)有問題。
  • ……

以上都是數(shù)據(jù)質(zhì)量的問題。本文嘗試找到一種方法,能夠盡可能的發(fā)現(xiàn)數(shù)據(jù)質(zhì)量問題并解決之。

2 數(shù)據(jù)標(biāo)準(zhǔn)

談到數(shù)據(jù)質(zhì)量,就必須了解評(píng)價(jià)數(shù)據(jù)質(zhì)量的維度。DAMA UK 提出了數(shù)據(jù)質(zhì)量的六個(gè)核心維度,見圖1。

注:DAMA International (國際數(shù)據(jù)管理協(xié)會(huì))成立于1980年,是一個(gè)由技術(shù)和業(yè)務(wù)專業(yè)人員組成的國際性數(shù)據(jù)管理專業(yè)協(xié)會(huì),作為一個(gè)非營利的機(jī)構(gòu),獨(dú)立于任何廠商,旨在世界范圍內(nèi)推廣并促進(jìn)數(shù)據(jù)管理領(lǐng)域的概念和最佳實(shí)踐,為數(shù)字經(jīng)濟(jì)打下理論和實(shí)踐基礎(chǔ)。全球會(huì)員近萬人,在世界48個(gè)國家成立有分會(huì)。

圖1 數(shù)據(jù)質(zhì)量維度

  • 完整性Completeness:完整性是指數(shù)據(jù)信息信息是否存在缺失的狀況,常見數(shù)據(jù)表中行的缺失,字段的缺失,碼值的缺失。比如雖然整體pv是正確的,但在某個(gè)維度下,只有部分打點(diǎn),這就是存在完整性的問題。不完整的數(shù)據(jù)所能借鑒的價(jià)值就會(huì)大大降低,也是數(shù)據(jù)質(zhì)量問題最為基礎(chǔ)和常見的問題。常見統(tǒng)計(jì)sql:count( not null) / count(*)
  • 有效性Validity :有效性一般指范圍有效性、日期有效性、形式有效性等主要體現(xiàn)在數(shù)據(jù)記錄的規(guī)范和數(shù)據(jù)是否符合邏輯。規(guī)范指的是,一項(xiàng)數(shù)據(jù)存在它特定的格式,如:手機(jī)號(hào)碼一定是11位的數(shù)字;邏輯指的是,多項(xiàng)數(shù)據(jù)間存在著固定的邏輯關(guān)系,如:PV一定是大于等于UV的。
  • 準(zhǔn)確性Accuracy:準(zhǔn)確性是指數(shù)據(jù)記錄的信息是否存在異?;蝈e(cuò)誤。最為常見的數(shù)據(jù)準(zhǔn)確性錯(cuò)誤就如亂碼。其次,異常的大或者小的數(shù)據(jù)也是不符合條件的數(shù)據(jù)。準(zhǔn)確性可能存在于個(gè)別記錄,也可能存在于整個(gè)數(shù)據(jù)集,例如數(shù)量級(jí)記錄錯(cuò)誤。這類錯(cuò)誤則可以使用最大值和最小值的統(tǒng)計(jì)量去審核。
  • 及時(shí)性Timeliness:及時(shí)性是指數(shù)據(jù)從開始處理到可以查看的時(shí)間間隔。及時(shí)性對(duì)于數(shù)據(jù)分析本身的影響并不大,但如果數(shù)據(jù)建立的時(shí)間過長(zhǎng),就無法及時(shí)進(jìn)行數(shù)據(jù)分析,可能導(dǎo)致分析得出的結(jié)論失去了借鑒意義。比如:實(shí)時(shí)業(yè)務(wù)大盤數(shù)據(jù),及時(shí)反映業(yè)務(wù)關(guān)鍵指標(biāo)的情況,暴露業(yè)務(wù)指標(biāo)的異常波動(dòng),機(jī)動(dòng)響應(yīng)特殊突發(fā)情況都需要數(shù)據(jù)的及時(shí)更新和產(chǎn)出。某些情況下,數(shù)據(jù)并不是單純?yōu)榱朔治鲇枚蔷€上策略用,數(shù)據(jù)沒有及時(shí)產(chǎn)出會(huì)影響線上效果。
  • 一致性Consistency:一致性是指相同含義信息在多業(yè)務(wù)多場(chǎng)景是否具有一致性,一般情況下是指多源數(shù)據(jù)的數(shù)據(jù)模型不一致,例如:命名不一致、數(shù)據(jù)結(jié)構(gòu)不一致、約束規(guī)則不一致。數(shù)據(jù)實(shí)體不一致,例如:數(shù)據(jù)編碼不一致、命名及含義不一致、分類層次不一致、生命周期不一致等。
  • 唯一性Uniqueness: 在數(shù)據(jù)集中數(shù)據(jù)不重復(fù)的程度。唯一數(shù)據(jù)條數(shù),和總數(shù)據(jù)條數(shù)的百分比。比如 count(distinct business key) / count(*),一般用來驗(yàn)證主鍵唯一性。

3 數(shù)據(jù)的生命周期

 

圖2 數(shù)據(jù)生命周期

  • 數(shù)據(jù)接入:接入上游表輸入或者其它數(shù)據(jù)源的數(shù)據(jù)。
  • 數(shù)據(jù)加工:編寫sql生成目標(biāo)數(shù)據(jù)表。
  • 數(shù)據(jù)產(chǎn)出:定時(shí)調(diào)度任務(wù)生成數(shù)據(jù)表。
  • 數(shù)據(jù)應(yīng)用:下游數(shù)據(jù)分析、報(bào)表等應(yīng)用數(shù)據(jù)。

在上面任何一個(gè)環(huán)節(jié)中,都可能出現(xiàn)數(shù)據(jù)質(zhì)量的問題,提升數(shù)據(jù)質(zhì)量需要從數(shù)據(jù)接入、數(shù)據(jù)加工、數(shù)據(jù)產(chǎn)出、數(shù)據(jù)應(yīng)用、效果跟蹤等全流程進(jìn)行把控,全局觀很重要,不拘一點(diǎn),才能看的更全面。

二 如何解決數(shù)據(jù)質(zhì)量問題

數(shù)據(jù)質(zhì)量是數(shù)據(jù)的生命線,沒有高質(zhì)量的數(shù)據(jù),一切數(shù)據(jù)分析、數(shù)據(jù)挖掘、數(shù)據(jù)應(yīng)用的效果都會(huì)大打折扣,甚至出現(xiàn)完全錯(cuò)誤的結(jié)論,或者導(dǎo)致資損。然而數(shù)據(jù)質(zhì)量問題卻是廣泛存在的,且治理的難度很大,因?yàn)閿?shù)據(jù)的生產(chǎn)、加工、流轉(zhuǎn)、應(yīng)用涉及到業(yè)務(wù)運(yùn)營、生產(chǎn)系統(tǒng)、數(shù)據(jù)系統(tǒng)、數(shù)據(jù)產(chǎn)品等上下游鏈路幾十個(gè)環(huán)節(jié),每個(gè)環(huán)節(jié)都可能引入數(shù)據(jù)質(zhì)量問題。

集團(tuán)很多BU都有成體系的解決數(shù)據(jù)質(zhì)量的方案,集團(tuán)也有很多工具來解決數(shù)據(jù)質(zhì)量問題。本文不詳細(xì)介紹此類工具的使用,主要聚焦在數(shù)據(jù)開發(fā)過程中因?yàn)閿?shù)據(jù)研發(fā)同學(xué)經(jīng)驗(yàn)不足而導(dǎo)致的數(shù)據(jù)質(zhì)量問題。

 

圖3 數(shù)據(jù)質(zhì)量解決方法

如圖3所示,我認(rèn)為有三種方法可以在一定程度上解決數(shù)據(jù)質(zhì)量的問題。

  • 數(shù)據(jù)探查
    • 發(fā)現(xiàn)完整性、一致性、有效性、準(zhǔn)確性、關(guān)聯(lián)性等問題
    • 解決的數(shù)據(jù)接入和數(shù)據(jù)產(chǎn)出階段的問題
  • 開發(fā)規(guī)范
    • 發(fā)現(xiàn)數(shù)據(jù)及時(shí)性、數(shù)據(jù)一致性、數(shù)據(jù)準(zhǔn)確性等問題
    • 解決數(shù)據(jù)產(chǎn)出階段的問題
  • 數(shù)據(jù)監(jiān)控
    • 避免一致性、準(zhǔn)確性等問題
    • 解決數(shù)據(jù)生產(chǎn)階段的問題

1 數(shù)據(jù)探查

數(shù)據(jù)探查的定義一般為:數(shù)據(jù)探查是探索源數(shù)據(jù)的過程,用來理解數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)內(nèi)容、數(shù)據(jù)關(guān)系以及為數(shù)據(jù)工程識(shí)別可能存在的問題。

數(shù)據(jù)探查不止用在數(shù)據(jù)質(zhì)量領(lǐng)域,數(shù)倉開發(fā)、數(shù)據(jù)遷移等都需要對(duì)源數(shù)據(jù)進(jìn)行數(shù)據(jù)探查。數(shù)據(jù)倉庫的所有數(shù)據(jù)基礎(chǔ)都是源數(shù)據(jù)(ODS),在開發(fā)數(shù)倉之前,需要對(duì)源數(shù)據(jù)進(jìn)行探查,才能保證產(chǎn)出的數(shù)據(jù)倉庫的準(zhǔn)確性。

題庫業(yè)務(wù)的數(shù)據(jù)缺少打點(diǎn),數(shù)據(jù)建設(shè)主要基于業(yè)務(wù)架構(gòu)的一些中間表和結(jié)果表,在開發(fā)前期,沒有意識(shí)到數(shù)據(jù)探查的重要性,導(dǎo)致數(shù)據(jù)的準(zhǔn)確性有嚴(yán)重問題,數(shù)據(jù)研發(fā)出現(xiàn)了大量的返工現(xiàn)象。

dataworks提供了數(shù)據(jù)探查的功能,可以統(tǒng)計(jì)基本信息、數(shù)據(jù)分布、topN、直方圖等。但我試了幾次一直是探查中,易用性還不是太好。

 

圖4 數(shù)據(jù)探查基本方法

上圖是數(shù)據(jù)探查的一些基本功能。

本部分介紹數(shù)據(jù)探查的一些常見方法,不成體系,只是開發(fā)過程中遇到的問題,供參考。

表探查

1)數(shù)據(jù)總量探查

數(shù)據(jù)總量探索是對(duì)ods的總體數(shù)據(jù)有初步認(rèn)知,可以通過數(shù)據(jù)地圖的分區(qū)信息確認(rèn),也可以通過寫sql計(jì)算。

數(shù)據(jù)總量探查時(shí)要探查每日增量數(shù)據(jù)總量、全量數(shù)據(jù)總量(如有需要)。

一般情況下,數(shù)據(jù)總量探查結(jié)果要與業(yè)務(wù)方或者上游數(shù)據(jù)提供方確認(rèn)是否符合預(yù)期。

2)數(shù)據(jù)產(chǎn)出時(shí)間和生命周期探查

在做數(shù)據(jù)探查時(shí),需要探查數(shù)據(jù)產(chǎn)出時(shí)間和生命周期,對(duì)后續(xù)的任務(wù)調(diào)度和補(bǔ)數(shù)據(jù)有一定的幫助。

列探查

1)數(shù)據(jù)分布探查

數(shù)據(jù)分布探查是數(shù)據(jù)探查中最重要的部分,可以探測(cè)不同維度下數(shù)據(jù)的分布情況。一般情況下,有如下寫法。

 

  1. SELECT  result          
  2. ,COUNT(*) 
  3. FROM    xxx.table_name 
  4. WHERE dt = 'xxxxx' 
  5. GROUP BY result ; 

 

2)枚舉值探查

枚舉值探查是上面數(shù)據(jù)分布探查的一種特例,探查某些維度的枚舉值是否合理。一般情況下sql如下。

 

  1. SELECT  DISTINCT result 
  2. FROM    xxx.table_name 
  3. WHERE dt = 'xxxxx' ; 

 

這種探查,可以探查出很多問題,比如上游生成某枚舉值只有0和1,但探查的時(shí)候探查出為空等。

3)唯一值探查

某些情況下,上游生成某些字段唯一(不一定是主鍵),也需要對(duì)此類情況探查,不然做join時(shí)容易出現(xiàn)數(shù)據(jù)膨脹問題。探查sql一般如下。

 

  1. SELECT  COUNT(item_id)          
  2. ,COUNT(DISTINCT item_id) 
  3. FROM    xxx.table_name 
  4. WHERE   dt = 'xxxxx' ; 

 

4)極值&異常值探查

對(duì)于某些數(shù)值類的值,必要情況下可以做一下極值探查,比如求最大值、最小值、平均值。這樣可以盡快發(fā)現(xiàn)源數(shù)據(jù)中的臟數(shù)據(jù)。

對(duì)于異常值也要探查一下,比如0、null、空字符串等。

列間探查

1)關(guān)聯(lián)字段探查

通常情況下,一張表中不同字段直接有關(guān)聯(lián)關(guān)系。比如曝光字段和曝光時(shí)長(zhǎng)之間有關(guān)聯(lián)關(guān)系,有曝光的一定有曝光時(shí)長(zhǎng),或者曝光時(shí)長(zhǎng)大于0的情況下一定有曝光。

或者uv一定大于pv,這種方法可以對(duì)dws表進(jìn)行驗(yàn)證。

表間探查

1)join條件探查

此種情況屬于跨表探查。不同的表在做join時(shí),除了探查join條件是否成功,還需要探查join得到的數(shù)量是否符合預(yù)期。

在題庫業(yè)務(wù)中,出現(xiàn)過因?yàn)橄到y(tǒng)bug,下游表的join條件中,有3%左右的數(shù)據(jù)join不上,但因?yàn)榍捌跊]有做此方面的數(shù)據(jù)探查,導(dǎo)致用了很久才發(fā)現(xiàn)此問題。

還有一種情況是業(yè)務(wù)上兩張表必須join上,比如消費(fèi)表所有的用戶都應(yīng)該出現(xiàn)在用戶表,或者所有內(nèi)容都應(yīng)該出現(xiàn)在內(nèi)容維表等。

一般sql如下:

 

  1. SELECT  count(DISTINCT a.itemid) 
  2. FROM    xxx.yyy_log a 
  3. LEFT JOIN ( 
  4. SELECT  itemid                
  5. FROM    xxx.zzzz                
  6. WHERE   ds = '20210916'            
  7.  ) b 
  8. ON a.itemid = b.itemid 
  9. WHERE   a.dt = '20210916' 
  10. AND     b.itemid IS NULL ; 

 

業(yè)務(wù)探查

1)過濾條件不對(duì)

在某些情況下,需要從海量數(shù)據(jù)中,通過某些過濾條件撈出所需數(shù)據(jù)。比如客戶端打點(diǎn)的規(guī)范是一致的,不同的端的用戶日志都在一張表中,如果只分析某種數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行過濾。

此過濾條件一般由業(yè)務(wù)方同學(xué)提供,在數(shù)據(jù)探查階段要先做條件過濾,與業(yè)務(wù)方同學(xué)溝通過濾之后的數(shù)據(jù)是否符合預(yù)期。

2)業(yè)務(wù)上數(shù)據(jù)重復(fù)問題

屬于表唯一性探查。此問題與唯一值的現(xiàn)象類似,都是數(shù)據(jù)有重復(fù)。

不同之后在于,某些情況下,雖然數(shù)據(jù)提供方稱了某些列唯一,但在某些業(yè)務(wù)場(chǎng)景下,數(shù)據(jù)就是不唯一的。比如題庫的某業(yè)務(wù)中,業(yè)務(wù)方開始說不同線索得到的q_id不一致,然而q_id來自u(píng)rl,在業(yè)務(wù)上url確實(shí)存在重復(fù)的情況,所以q_id有重復(fù)的情況。

但在另一種數(shù)據(jù)重復(fù)的問題往往不是業(yè)務(wù)如此,而是系統(tǒng)bug導(dǎo)致的。比如某種業(yè)務(wù)中,一本書理論上處理完之后不應(yīng)該再次處理,但系統(tǒng)的bug導(dǎo)致出現(xiàn)一本書被處理多次的情況。

對(duì)于第一種情況,我們?cè)诮r(shí)要考慮業(yè)務(wù)復(fù)雜性;而第二種情況,我們要做的是找到有效的數(shù)據(jù),去掉臟數(shù)據(jù)。

3)數(shù)據(jù)漏斗問題

數(shù)據(jù)鏈路中數(shù)據(jù)漏斗是很關(guān)鍵的數(shù)據(jù),在做初步數(shù)據(jù)探查時(shí),也需要關(guān)注數(shù)據(jù)漏斗。每一層數(shù)據(jù)丟棄的數(shù)量(比例)都要和業(yè)務(wù)方確認(rèn)。

比如某一個(gè)入庫流的處理數(shù)據(jù)數(shù)量和入庫數(shù)量對(duì)比,或者入庫數(shù)量和入索引數(shù)量等,如果比例出現(xiàn)了很大的問題,需要找上游業(yè)務(wù)方修正。

4)業(yè)務(wù)上數(shù)據(jù)分布不合理

“刷子用戶”的發(fā)現(xiàn)就是一種常見的數(shù)據(jù)分布不合理,比如某個(gè)user的一天的pv在5000以上,我們大概率懷疑是刷子用戶,要把這些用戶從統(tǒng)計(jì)中剔除,并要找到數(shù)據(jù)上游過濾掉類似用戶。

一般sql如下:

 

  1. SELECT  userid          
  2. ,count(*) AS cnt 
  3. FROM    xxx.yyyy_log 
  4. WHERE   dt = '20210913' 
  5. GROUP BY userid 
  6. HAVING  cnt > 5000 ; 

 

2 數(shù)據(jù)開發(fā)規(guī)范

上面描述了很多數(shù)據(jù)探查問題,如果認(rèn)真的做了數(shù)據(jù)探查,可以避免很多數(shù)據(jù)質(zhì)量問題。本部分描述在數(shù)據(jù)開發(fā)環(huán)節(jié)中開發(fā)同學(xué)因?yàn)榻?jīng)驗(yàn)等原因?qū)е碌臄?shù)據(jù)質(zhì)量問題。

SQL編寫問題

1)笛卡爾積導(dǎo)致數(shù)據(jù)膨脹

此問題往往發(fā)生在沒有對(duì)join條件進(jìn)行唯一性檢查的情況下。因?yàn)橛疫厰?shù)據(jù)不唯一,發(fā)生笛卡爾積,導(dǎo)致數(shù)據(jù)膨脹。如果是某些超大表,除了數(shù)據(jù)結(jié)果不對(duì)之外,會(huì)產(chǎn)生計(jì)算和存儲(chǔ)的浪費(fèi)。

還有一種情況,在單一分區(qū)中數(shù)據(jù)是唯一的,但join時(shí)沒有寫分區(qū)條件,導(dǎo)致多個(gè)分區(qū)同時(shí)計(jì)算,出現(xiàn)數(shù)據(jù)爆炸。

這個(gè)問題很多同學(xué)在開發(fā)中遇到了多次,一定要注意。

2)join on where順序?qū)е陆Y(jié)果錯(cuò)誤

此問題也是常見問題,因?yàn)閷戝e(cuò)了on和where的順序,導(dǎo)致結(jié)果不符合預(yù)期。錯(cuò)誤case如下。

 

  1. SELECT  COUNT(*) 
  2. FROM    xxx a 
  3. LEFT JOIN yyy b 
  4. ON      a.id = b.item_id 
  5. WHERE   a.dt = '${bizdate}' 
  6. AND     b.dt = '${bizdate}' ; 

 

在上面的sql中,因?yàn)閎.dt在where條件中,那么沒有join上的數(shù)據(jù)會(huì)被過濾掉。

3)inner join和outer join用錯(cuò)問題

此問題偶發(fā),往往是開發(fā)同學(xué)沒有理解業(yè)務(wù)或者typo,導(dǎo)致結(jié)果不符合預(yù)期。

寫完sql一定要檢查,如果有可能請(qǐng)別的同學(xué)review sql。

4)時(shí)間分區(qū)加引號(hào)

一般情況下,分區(qū)都是string數(shù)據(jù)類型,但在寫sql時(shí),分區(qū)不寫引號(hào)也可以查詢出正確的數(shù)據(jù),導(dǎo)致有些同學(xué)不習(xí)慣在分區(qū)上加引號(hào)。

但某些情況下,如果沒有加引號(hào),查詢的數(shù)據(jù)是錯(cuò)誤的。所以一定要在時(shí)間分區(qū)上加引號(hào)。

5)表循環(huán)依賴問題

在開發(fā)時(shí),偶爾會(huì)出現(xiàn)三個(gè)表相互依賴的問題,這種情況比較少見,而且在數(shù)據(jù)開發(fā)階段不容易發(fā)現(xiàn),只有再提交任務(wù)之后才會(huì)發(fā)現(xiàn)。

要避免這種情況,需要明確一些開發(fā)規(guī)范。比如維表和明細(xì)表都要從ods表中查得,不能維表和明細(xì)表直接互相依賴。對(duì)于某些復(fù)雜的邏輯,可以通過中間表的形式實(shí)現(xiàn)重用。

6)枚舉值問題

在做etl時(shí),需要把某些枚舉值轉(zhuǎn)化成字符串,比如1轉(zhuǎn)成是、0轉(zhuǎn)成否等。

常見的寫法是在sql中寫case when。

但對(duì)于某種一直增長(zhǎng)的枚舉值,這種方法不合適,否則增加一種編碼就要改一次sql,而且容易出現(xiàn)sql膨脹的問題。

推薦通過與碼表join的方法解決此問題。

性能問題

1)join on where順序的性能問題

上面提到過join的on和where執(zhí)行順序的問題,這也關(guān)系到j(luò)oin的性能問題。因?yàn)槭窍萶n后where,建議先把數(shù)據(jù)量縮小再做join,這也可以提升性能。

(1) 如果是對(duì)左表(a)字段過濾數(shù)據(jù),則可以直接寫在where后面,此時(shí)執(zhí)行的順序是:先對(duì)a表的where條件過濾數(shù)據(jù)然后再join b 表;

(2) 如果是對(duì)右表(b)字段過濾數(shù)據(jù),則應(yīng)該寫在on 條件后面或者單獨(dú)寫個(gè)子查詢嵌套進(jìn)去,這樣才能實(shí)現(xiàn)先過濾b表數(shù)據(jù)再進(jìn)行join 操作;

如果直接把b表過濾條件放在where后面,執(zhí)行順序是:先對(duì)a表數(shù)據(jù)過濾,然后和b表全部數(shù)據(jù)關(guān)聯(lián)之后,在reduce 階段才會(huì)對(duì)b表過濾條件進(jìn)行過濾數(shù)據(jù),此時(shí)如果b表數(shù)據(jù)量很大的話,效率就會(huì)很低。因此對(duì)于應(yīng)該在map 階段盡可能對(duì)右表進(jìn)行數(shù)據(jù)過濾。

我一般對(duì)右表做一個(gè)子查詢。

2)小維表 map join

在Hive中

若所有表中只有一張小表,那可在最大的表通過Mapper的時(shí)候?qū)⑿”硗耆诺絻?nèi)存中,Hive可以在map端執(zhí)行連接過程,稱為map-side join,這是因?yàn)镠ive可以和內(nèi)存的小表逐一匹配,從而省略掉常規(guī)連接所需的reduce過程。即使對(duì)于很小的數(shù)據(jù)集,這個(gè)優(yōu)化也明顯地要快于常規(guī)的連接操作。其不僅減少了reduce過程,而且有時(shí)還可以同時(shí)減少M(fèi)ap過程的執(zhí)行步驟。參考文末鏈接一。

在MaxCompute中

mapjoin在Map階段執(zhí)行表連接,而非等到Reduce階段才執(zhí)行表連接,可以縮短大量數(shù)據(jù)傳輸時(shí)間,提升系統(tǒng)資源利用率,從而起到優(yōu)化作業(yè)的作用。

在對(duì)大表和一個(gè)或多個(gè)小表執(zhí)行join操作時(shí),mapjoin會(huì)將您指定的小表全部加載到執(zhí)行join操作的程序的內(nèi)存中,在Map階段完成表連接從而加快join的執(zhí)行速度。

文檔中給的例子如下:

 

  1. select /*+ mapjoin(a) */ 
  2. a.shop_name, 
  3. a.total_price, 
  4. b.total_price 
  5. from sale_detail_sj a join sale_detail b 
  6. on a.total_price < b.total_price or a.total_price + b.total_price < 500; 

 

參考文末鏈接二。

3)超大維表 hash clustering

在互聯(lián)網(wǎng)大數(shù)據(jù)場(chǎng)景中,一致性維表的數(shù)據(jù)量都比較大,有的甚至到幾億甚至十億的量級(jí),在這個(gè)數(shù)據(jù)量級(jí)下做join,會(huì)這種任務(wù)往往耗時(shí)非常長(zhǎng),有些任務(wù)甚至需要耗費(fèi)一天的時(shí)間才能產(chǎn)出。

在這種情況下,為了縮短執(zhí)行時(shí)間,通??梢哉{(diào)大join階段的instance數(shù)目,增加join階段的內(nèi)存減少spill等,但是instance的數(shù)目不能無限增長(zhǎng),否則會(huì)由于shuffle規(guī)模太大造成集群壓力過大,另外內(nèi)存的資源也是有限的,所以調(diào)整參數(shù)也只是犧牲資源換取時(shí)間,治標(biāo)不治本。

Hash clustering,簡(jiǎn)而言之,就是將數(shù)據(jù)提前進(jìn)行shuffle和排序,在使用數(shù)據(jù)的過程中,讀取數(shù)據(jù)后直接參與計(jì)算。這種模式非常適合產(chǎn)出后后續(xù)節(jié)點(diǎn)多次按照相同key進(jìn)行join或者聚合的場(chǎng)景。

Hash clustering是內(nèi)置在MaxCompute中,不用顯示的指定,很方便。

參考文末鏈接三。

4) 數(shù)據(jù)傾斜問題

Hive/MaxCompute在執(zhí)行MapReduce任務(wù)時(shí)經(jīng)常會(huì)碰到數(shù)據(jù)傾斜的問題,表現(xiàn)為一個(gè)或者幾個(gè)reduce節(jié)點(diǎn)運(yùn)行很慢,延長(zhǎng)了整個(gè)任務(wù)完成的時(shí)間,這是由于某些key的條數(shù)比其他key多很多,這些Key所在的reduce節(jié)點(diǎn)所處理的數(shù)據(jù)量比其他節(jié)點(diǎn)就大很多,從而導(dǎo)致某幾個(gè)節(jié)點(diǎn)遲遲運(yùn)行不完。

常見的情況比如join的分布不均勻,group by的時(shí)候不均勻等。

具體的解決方法可以參考文末鏈接四。

3 數(shù)據(jù)監(jiān)控

提交數(shù)據(jù)任務(wù)后,如何能正確及時(shí)的監(jiān)控任務(wù)也是非常重要的。在數(shù)據(jù)監(jiān)控方面,集團(tuán)提供了很多強(qiáng)大的產(chǎn)品來解決問題,簡(jiǎn)單介紹如下。

數(shù)據(jù)及時(shí)性監(jiān)控(摩薩德)

摩薩德監(jiān)控是對(duì)任務(wù)運(yùn)行狀態(tài)的監(jiān)控,包括任務(wù)運(yùn)行出錯(cuò)、未按規(guī)定時(shí)間運(yùn)行。摩薩德是對(duì)任務(wù)的監(jiān)控,因此特別適合監(jiān)控?cái)?shù)據(jù)產(chǎn)出的實(shí)時(shí)性。比如某些表需要在幾點(diǎn)產(chǎn)出,如果沒有產(chǎn)出則報(bào)警等。當(dāng)前摩薩德只能在Dataworks使用。

數(shù)據(jù)產(chǎn)出監(jiān)控(DQC)

不同于摩薩德對(duì)任務(wù)的監(jiān)控,DQC監(jiān)控是對(duì)表和字段的監(jiān)控,是任務(wù)運(yùn)行后觸發(fā)監(jiān)控條件從而觸發(fā)報(bào)警。

數(shù)據(jù)質(zhì)量中心(DQC,Data Quality Center)是集團(tuán)推出的數(shù)據(jù)質(zhì)量解決方案,它可以提供整個(gè)數(shù)據(jù)的生命周期內(nèi)的全鏈路數(shù)據(jù)質(zhì)量保障服務(wù)。通過DQC,我們能夠在數(shù)據(jù)生產(chǎn)加工鏈路上監(jiān)控業(yè)務(wù)數(shù)據(jù)的異常性,如有問題第一時(shí)間發(fā)現(xiàn),并自動(dòng)阻斷異常數(shù)據(jù)對(duì)下游的影響,保障數(shù)據(jù)的準(zhǔn)確性。

DQC可以做以下監(jiān)控

  • 數(shù)據(jù)產(chǎn)出行數(shù)波動(dòng)監(jiān)控
  • 業(yè)務(wù)主鍵唯一性監(jiān)控
  • 關(guān)鍵字段空值監(jiān)控
  • 匯總數(shù)據(jù)合理性監(jiān)控

DQC的流程如下:

  • 用戶進(jìn)行規(guī)則配置
  • 通過定時(shí)的調(diào)度任務(wù)觸發(fā)檢查任務(wù)執(zhí)行
  • 基于任務(wù)配置,獲取樣本數(shù)據(jù)
  • 基于計(jì)算返回檢驗(yàn)結(jié)果
  • 調(diào)度根據(jù)檢驗(yàn)結(jié)果,決定是否阻斷干預(yù)(強(qiáng)依賴、弱依賴)

不過DQC雖然很強(qiáng)大,但其配置還是很繁瑣的,而且要設(shè)置波動(dòng)規(guī)則,需要較長(zhǎng)時(shí)間觀測(cè),表和字段多的時(shí)候配置工作特別大。有團(tuán)隊(duì)研究了Auto-DQC,可以自動(dòng)化監(jiān)控DQC配置。

其它數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái)

其它值得關(guān)注的數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái)包括

  • Apache Griffin(Ebay開源數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))
  • Deequ(Amazon開源數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))
  • DataMan(美團(tuán)點(diǎn)評(píng)數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))

三 后記

解決數(shù)據(jù)質(zhì)量問題沒有銀彈,數(shù)據(jù)質(zhì)量管理不單純是一個(gè)概念,也不單純是一項(xiàng)技術(shù)、也不單純是一個(gè)系統(tǒng),更不單純是一套管理流程,數(shù)據(jù)質(zhì)量管理是一個(gè)集方法論、技術(shù)、業(yè)務(wù)和管理為一體的解決方案。本文簡(jiǎn)單總結(jié)了我們當(dāng)前遇到的數(shù)據(jù)質(zhì)量問題和處理方法,也希望與對(duì)數(shù)據(jù)質(zhì)量敢興趣的同學(xué)多多交流。

文中部分技術(shù)和解決已經(jīng)在uc和夸克業(yè)務(wù)上踐行,大幅提升了業(yè)務(wù)的數(shù)據(jù)質(zhì)量,拿到較好結(jié)果。

鏈接一:https://developer.aliyun.com/article/67300

鏈接二:https://help.aliyun.com/document_detail/73785.html

鏈接三:

https://developer.aliyun.com/article/665154

https://developer.aliyun.com/article/665246

鏈接四:https://developer.aliyun.com/article/60908

【本文為51CTO專欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

 

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2024-03-01 09:53:34

2017-09-01 05:35:58

分布式計(jì)算存儲(chǔ)

2022-03-07 08:14:27

并發(fā)分布式

2022-03-11 10:03:40

分布式鎖并發(fā)

2018-07-17 08:14:22

分布式分布式鎖方位

2017-09-26 15:24:48

分布式集群均衡

2012-09-19 14:09:20

Hadoop開源

2013-03-26 13:43:08

Java分布式計(jì)算

2018-03-06 16:24:14

數(shù)據(jù)分布式計(jì)算

2022-04-07 18:41:31

云計(jì)算數(shù)據(jù)治理

2025-06-13 07:30:51

2021-04-15 11:04:13

云計(jì)算分布式邊緣計(jì)算邊緣計(jì)算

2022-03-06 21:43:05

Citus架構(gòu)PostgreSQL

2019-02-13 13:41:07

MemCache分布式HashMap

2019-09-26 15:43:52

Hadoop集群防火墻

2018-08-24 07:03:45

分布式系統(tǒng)數(shù)據(jù)分片元數(shù)據(jù)

2021-06-01 05:51:37

云計(jì)算并行計(jì)算分布式計(jì)算

2010-04-02 10:26:14

云計(jì)算

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2021-11-08 10:52:02

數(shù)據(jù)庫分布式技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜视频免费在线 | 美国黄色毛片 | 中文字幕日韩欧美一区二区三区 | 91影片| 毛片网站在线观看 | 国产精品美女久久久久久免费 | 网站国产 | 中日字幕大片在线播放 | 日本国产一区二区 | 在线视频国产一区 | 欧美日本亚洲 | 国产精品美女久久久久aⅴ国产馆 | 亚洲不卡在线观看 | 日韩欧美在 | 亚洲啊v在线 | 国产精品久久久久久久毛片 | 久久精品国产一区二区电影 | 2022精品国偷自产免费观看 | 免费国产成人av | 在线一区二区观看 | 伊人久久综合 | 国产成人在线视频播放 | 亚洲第一福利网 | 午夜欧美一区二区三区在线播放 | 韩日精品一区 | 国产 日韩 欧美 在线 | 亚洲国产欧美一区二区三区久久 | 天堂久久网 | 射欧美 | 国产精品99一区二区 | 免费观看一级黄色录像 | 欧美一区2区三区4区公司 | 日日骚av| 亚洲一区二区三区四区av | 亚洲欧美男人天堂 | 欧美日韩亚洲国产 | 伊人网站视频 | 久久久91精品国产一区二区三区 | 成人国产精品免费观看视频 | 欧美久久一区二区三区 | 日韩一区二区在线视频 |