国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

 [[442615]]

一 概述

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

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

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

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

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

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

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

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

  • 完整性Completeness:完整性是指數(shù)據(jù)信息信息是否存在缺失的狀況,常見(jiàn)數(shù)據(jù)表中行的缺失,字段的缺失,碼值的缺失。比如雖然整體pv是正確的,但在某個(gè)維度下,只有部分打點(diǎn),這就是存在完整性的問(wèn)題。不完整的數(shù)據(jù)所能借鑒的價(jià)值就會(huì)大大降低,也是數(shù)據(jù)質(zhì)量問(wèn)題最為基礎(chǔ)和常見(jiàn)的問(wèn)題。常見(jiàn)統(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ù)記錄的信息是否存在異常或錯(cuò)誤。最為常見(jiàn)的數(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ù)從開(kāi)始處理到可以查看的時(shí)間間隔。及時(shí)性對(duì)于數(shù)據(jù)分析本身的影響并不大,但如果數(shù)據(jù)建立的時(shí)間過(guò)長(zhǎng),就無(wú)法及時(shí)進(jìn)行數(shù)據(jù)分析,可能導(dǎo)致分析得出的結(jié)論失去了借鑒意義。比如:實(shí)時(shí)業(yè)務(wù)大盤(pán)數(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ù)沒(méi)有及時(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(*),一般用來(lái)驗(yàn)證主鍵唯一性。

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

 

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

  • 數(shù)據(jù)接入:接入上游表輸入或者其它數(shù)據(jù)源的數(shù)據(jù)。
  • 數(shù)據(jù)加工:編寫(xiě)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ì)量的問(wèn)題,提升數(shù)據(jù)質(zhì)量需要從數(shù)據(jù)接入、數(shù)據(jù)加工、數(shù)據(jù)產(chǎn)出、數(shù)據(jù)應(yīng)用、效果跟蹤等全流程進(jìn)行把控,全局觀很重要,不拘一點(diǎn),才能看的更全面。

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

表探查

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

數(shù)據(jù)總量探索是對(duì)ods的總體數(shù)據(jù)有初步認(rèn)知,可以通過(guò)數(shù)據(jù)地圖的分區(qū)信息確認(rèn),也可以通過(guò)寫(xiě)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ù)的分布情況。一般情況下,有如下寫(xiě)法。

 

  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' ; 

 

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

3)唯一值探查

某些情況下,上游生成某些字段唯一(不一定是主鍵),也需要對(duì)此類情況探查,不然做join時(shí)容易出現(xiàn)數(shù)據(jù)膨脹問(wèn)題。探查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ù)期。

在題庫(kù)業(yè)務(wù)中,出現(xiàn)過(guò)因?yàn)橄到y(tǒng)bug,下游表的join條件中,有3%左右的數(shù)據(jù)join不上,但因?yàn)榍捌跊](méi)有做此方面的數(shù)據(jù)探查,導(dǎo)致用了很久才發(fā)現(xiàn)此問(wè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)過(guò)濾條件不對(duì)

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

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

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

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

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

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

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

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

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

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

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

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

一般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ù)開(kāi)發(fā)規(guī)范

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

SQL編寫(xiě)問(wèn)題

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

此問(wèn)題往往發(fā)生在沒(méi)有對(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í)沒(méi)有寫(xiě)分區(qū)條件,導(dǎo)致多個(gè)分區(qū)同時(shí)計(jì)算,出現(xiàn)數(shù)據(jù)爆炸。

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

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

此問(wèn)題也是常見(jiàn)問(wèn)題,因?yàn)閷?xiě)錯(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條件中,那么沒(méi)有join上的數(shù)據(jù)會(huì)被過(guò)濾掉。

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

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

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

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

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

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

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

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

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

6)枚舉值問(wèn)題

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

常見(jiàn)的寫(xiě)法是在sql中寫(xiě)case when。

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

推薦通過(guò)與碼表join的方法解決此問(wèn)題。

性能問(wèn)題

1)join on where順序的性能問(wèn)題

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

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

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

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

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

2)小維表 map join

在Hive中

若所有表中只有一張小表,那可在最大的表通過(guò)Mapper的時(shí)候?qū)⑿”硗耆诺絻?nèi)存中,Hive可以在map端執(zhí)行連接過(guò)程,稱為map-side join,這是因?yàn)镠ive可以和內(nèi)存的小表逐一匹配,從而省略掉常規(guī)連接所需的reduce過(guò)程。即使對(duì)于很小的數(shù)據(jù)集,這個(gè)優(yōu)化也明顯地要快于常規(guī)的連接操作。其不僅減少了reduce過(guò)程,而且有時(shí)還可以同時(shí)減少M(fèi)ap過(guò)程的執(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ù)目不能無(wú)限增長(zhǎng),否則會(huì)由于shuffle規(guī)模太大造成集群壓力過(guò)大,另外內(nèi)存的資源也是有限的,所以調(diào)整參數(shù)也只是犧牲資源換取時(shí)間,治標(biāo)不治本。

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

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

參考文末鏈接三。

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

Hive/MaxCompute在執(zhí)行MapReduce任務(wù)時(shí)經(jīng)常會(huì)碰到數(shù)據(jù)傾斜的問(wèn)題,表現(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)行不完。

常見(jià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)品來(lái)解決問(wè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)出,如果沒(méi)有產(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ù)。通過(guò)DQC,我們能夠在數(shù)據(jù)生產(chǎn)加工鏈路上監(jiān)控業(yè)務(wù)數(shù)據(jù)的異常性,如有問(wèn)題第一時(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ī)則配置
  • 通過(guò)定時(shí)的調(diào)度任務(wù)觸發(fā)檢查任務(wù)執(zhí)行
  • 基于任務(wù)配置,獲取樣本數(shù)據(jù)
  • 基于計(jì)算返回檢驗(yàn)結(jié)果
  • 調(diào)度根據(jù)檢驗(yàn)結(jié)果,決定是否阻斷干預(yù)(強(qiáng)依賴、弱依賴)

不過(guò)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開(kāi)源數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))
  • Deequ(Amazon開(kāi)源數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))
  • DataMan(美團(tuán)點(diǎn)評(píng)數(shù)據(jù)質(zhì)量監(jiān)控平臺(tái))

三 后記

解決數(shù)據(jù)質(zhì)量問(wèn)題沒(méi)有銀彈,數(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ì)量問(wèn)題和處理方法,也希望與對(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é)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2024-03-01 09:53:34

2017-09-01 05:35:58

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

2022-03-11 10:03:40

分布式鎖并發(fā)

2022-03-07 08:14:27

并發(fā)分布式

2018-07-17 08:14:22

分布式分布式鎖方位

2017-09-26 15:24:48

分布式集群均衡

2012-09-19 14:09:20

Hadoop開(kāi)源

2013-03-26 13:43:08

Java分布式計(jì)算

2022-04-07 18:41:31

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

2018-03-06 16:24:14

數(shù)據(jù)分布式計(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)分布式

2019-06-19 15:40:06

分布式鎖RedisJava
點(diǎn)贊
收藏

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

亚洲国产一区自拍| 国产欧美一区二区精品忘忧草| 三上悠亚在线观看二区| 久久久久久久久久久久久9999| 国产国语**毛片高清视频| 国产亚洲亚洲国产一二区| 顶级嫩模精品视频在线看| 亚洲精品一区二三区不卡| 韩日午夜在线资源一区二区| 日本视频在线观看| 午夜亚洲福利| 国产精一区二区三区| 日韩电影大片中文字幕| a天堂资源在线观看| 国产精品亚洲成在人线| 久草在线资源视频| 婷婷综合福利| 91麻豆一二三四在线| 欧美成人一品| 日韩精品视频在线| 轻轻色免费在线视频| 中文字幕中文乱码欧美一区二区| 欧美精品日韩三级| 日本a口亚洲| 综合伊人久久| 免费看av成人| 视频在线91| 国产精品成人播放| 一区二区免费在线观看| 日韩电影网1区2区| 日韩欧美电影一区| 欧美日韩一区二区视频在线观看 | 秋霞国产精品| 欧美成免费一区二区视频| japanese国产精品| 欧美性一二三区| 欧洲精品国产| 午夜av成人| 国产一区二区三区在线视频| 久久久久久香蕉| 欧美日韩国产欧| 成人免费在线看片| 亚洲电影二区| 色88888久久久久久影院野外| 色播五月综合| 亚洲+小说+欧美+激情+另类| 日韩一区二区免费在线电影| 免费看国产曰批40分钟| 在线免费观看日本欧美爱情大片| 亚洲色图15p| 色网站在线免费观看| 国产黄人亚洲片| 51国偷自产一区二区三区| 欧美日韩国产网站| 午夜精品一区二区三区在线| 国产私拍精品| 久久精品人人做| 美乳视频一区二区| 国产精品网址| 亚洲国产小视频| 亚洲视频自拍| 欧美sss在线视频| 欧美性大战久久| 伊人久久国产| 欧美亚洲精品一区| 美女搞黄视频在线观看| 精品久久久久久久久久久久| 成年人午夜视频在线观看 | 日本视频在线| 亚洲午夜未满十八勿入免费观看全集 | 日韩理论片中文av| 一区二区三区四区视频在线 | mm131国产精品| 福利一区在线观看| 久久另类ts人妖一区二区| 国产精品一区二区在线看| 色婷婷av金发美女在线播放| 亚洲高清一二三区| 成人在线视频成人| 亚洲视频一二区| 国产激情在线视频| 天天综合网天天综合色| 新版的欧美在线视频| 日韩一区二区在线观看| 91成人福利| 欧美动漫一区二区| 一区av在线播放| 校园春色影音先锋| 亚洲欧美日韩视频一区| 欧美人与性动交α欧美精品图片| 精品久久久一区二区| 中文字幕乱码在线播放| 91久久精品视频| 天堂美国久久| 国产精品视频免费观看www| 日韩免费一级| 色天天综合狠狠色| **欧美日韩在线观看| 亚洲精品一区中文| 综合亚洲自拍| www.69av| 成人一区二区三区| 求av网址在线观看| 欧美一级夜夜爽| 七七久久电影网| 成人动漫网站在线观看| 希岛爱理一区二区三区| 亚洲va电影大全| 国产精品日韩欧美综合| 国产另类ts人妖一区二区| 国产精品一区二区三区四区色| 久久综合免费视频| 日本韩国欧美一区二区三区| 免费一二一二在线视频| 成人有码视频在线播放| 偷窥国产亚洲免费视频| 国产精品99久久免费| 国产区视频在线观看| 粉嫩绯色av一区二区在线观看| 日韩专区在线| www.成人av| 日本一区福利在线| 一卡二卡三卡视频| av一区二区三区黑人| 欧美日韩国产精品激情在线播放| 在线精品视频在线观看高清| 91精品国产自产在线观看永久∴| 国产中文精品久高清在线不| 亚洲免费高清视频在线| 国产精品无码免费专区午夜| 在线视频你懂得一区| 欧美特黄aaaaaaaa大片| xxxx性欧美| 人人干视频在线| av一区二区三区| 精品欧美日韩精品| 人人妻人人澡人人爽欧美一区| 精品国精品国产尤物美女| 女人让男人操自己视频在线观看| 久久久久久亚洲精品不卡4k岛国| 欧美日韩一级大片网址| 玛雅亚洲电影| 亚洲国产精品一区在线观看不卡| 国产成人av自拍| 日韩在线短视频| 热久久99这里有精品| 欧美二区视频| 中文字字幕在线中文乱码电影| 青青青国产精品一区二区| 99精品视频免费观看| 日韩一本精品| 久久蜜桃一区二区| 两个人看的免费完整在线观看| 国产成人精彩在线视频九色| 日韩在线一二三区| 123区在线| 韩国精品久久久999| 国产精品一卡二卡在线观看| 99人久久精品视频最新地址| 免费看黄色一级大片| 欧美在线国产| 国产乱理伦片a级在线观看| 91免费版黄色| 欧美福利视频一区| 日韩美女在线| 国产日韩一区二区在线| 欧美国产日产韩国视频| 亚洲网站啪啪| 国产传媒久久久| 最近中文字幕mv在线一区二区三区四区| av电影天堂一区二区在线| 欧美日韩破处| 岛国在线视频| 精品国偷自产一区二区三区| 韩国福利视频一区| 色婷婷激情综合| 亚洲影视资源| 久久午夜剧场| 亚洲天堂成人在线视频| 91丨porny丨户外露出| 日本在线免费中文字幕| 亚洲激情图片| 九色精品免费永久在线| 欧美视频福利| 碰碰在线视频| 亚洲欧美自偷自拍另类| caoporen国产精品| 国产亚洲精品一区二555| 亚洲精品欧美激情| 欧美aaa大片视频一二区| wwwwww99| 日韩欧美色电影| 97久久超碰国产精品电影| 国产区在线观看| 国产精品免费视频xxxx| 日韩一区二区三区电影| 91丨porny丨国产| 亚洲精品孕妇| 水莓100在线视频| 国产91精品黑色丝袜高跟鞋|