數(shù)據(jù)探索平臺(tái)設(shè)計(jì)-“CheckStyle”

導(dǎo)讀

在產(chǎn)品的龐大家族中阱佛,有一類(lèi)很重要的產(chǎn)品台丛,他就是工具產(chǎn)品耍缴,工具產(chǎn)品具備強(qiáng)服務(wù)性,并且使用場(chǎng)景時(shí)效性極強(qiáng)挽霉,高效便捷的工具極大的方便了我們的生活防嗡。

隨著大數(shù)據(jù)時(shí)代的帶來(lái),在工具產(chǎn)品中又衍生出了數(shù)據(jù)工具產(chǎn)品侠坎,隨著數(shù)據(jù)的增長(zhǎng)蚁趁,數(shù)據(jù)的價(jià)值也亟待我們?nèi)ネ诰颍鞔蠊菊诜e極挖掘數(shù)據(jù)價(jià)值实胸,并組建自己的數(shù)據(jù)團(tuán)隊(duì)他嫡,包括數(shù)據(jù)分析師、數(shù)據(jù)科學(xué)家庐完、數(shù)據(jù)產(chǎn)品經(jīng)理钢属、數(shù)據(jù)工程師等等,在這樣的契機(jī)下门躯,數(shù)據(jù)探索平臺(tái)應(yīng)運(yùn)而生淆党,作為一款數(shù)據(jù)工具產(chǎn)品,數(shù)據(jù)探索平臺(tái)支持?jǐn)?shù)據(jù)開(kāi)放和探索,賦能業(yè)務(wù)團(tuán)隊(duì)以及合作伙伴染乌。支持?jǐn)?shù)據(jù)分析師山孔、數(shù)據(jù)科學(xué)家和數(shù)據(jù)工程師等數(shù)據(jù)團(tuán)隊(duì)成員,用他們習(xí)慣和擅長(zhǎng)的工具荷憋,協(xié)同進(jìn)行數(shù)據(jù)科學(xué)項(xiàng)目饱须。

數(shù)據(jù)工具產(chǎn)品很重要,與此同時(shí)台谊,這方面的人才卻很稀缺。數(shù)據(jù)工具產(chǎn)品經(jīng)理不僅僅要求傳統(tǒng)產(chǎn)品經(jīng)理的基本能力譬挚,還對(duì)技術(shù)背景和大數(shù)據(jù)架構(gòu)有一定要求锅铅,這里我們不妨看一下業(yè)界領(lǐng)先數(shù)據(jù)產(chǎn)品阿里云對(duì)數(shù)據(jù)產(chǎn)品經(jīng)理的要求:

阿里云-高級(jí)數(shù)據(jù)產(chǎn)品經(jīng)理

級(jí)別:P7\P8 地點(diǎn):北京、杭州 均可 負(fù)責(zé)ApsaraDB數(shù)據(jù)庫(kù)產(chǎn)品設(shè)計(jì)减宣,ApsaraDB數(shù)據(jù)庫(kù)服務(wù)是阿里云核心的數(shù)據(jù)類(lèi)的產(chǎn)品盐须,是阿里云最為重要的PASS平臺(tái)之一。 工作內(nèi)容: 1. 完成市場(chǎng)調(diào)研與競(jìng)爭(zhēng)對(duì)手分析漆腌,準(zhǔn)確定義數(shù)據(jù)庫(kù)/大數(shù)據(jù)具有市場(chǎng)競(jìng)爭(zhēng)力的產(chǎn)品 2. 規(guī)劃產(chǎn)品的生命周期和交付形態(tài)贼邓,對(duì)項(xiàng)目結(jié)果負(fù)責(zé) 3. 關(guān)注用戶(hù)體驗(yàn)負(fù)責(zé),產(chǎn)出安全闷尿、穩(wěn)定塑径、易用的產(chǎn)品 4. 組織研發(fā)、測(cè)試填具、運(yùn)維统舀、運(yùn)營(yíng)的高效溝通 5. 支持業(yè)務(wù)團(tuán)隊(duì)完成營(yíng)收目標(biāo) 要求: 1. 計(jì)算機(jī)科學(xué)領(lǐng)域(CS)學(xué)士或碩士學(xué)位 2. 對(duì)大數(shù)據(jù)架構(gòu)基本了解,有一定的大數(shù)據(jù)架構(gòu)經(jīng)驗(yàn) 3. 了解以下Hadoop\Spark\HBase\MongoDB\Redis優(yōu)先 4. 了解數(shù)據(jù)庫(kù)基本理論劳景、大數(shù)據(jù)基本理論誉简、云計(jì)算 5. 程序員/DBA出身優(yōu)先 6. 了解大數(shù)據(jù)方案優(yōu)先

數(shù)據(jù)工具產(chǎn)品很重要,數(shù)據(jù)工具產(chǎn)品人才很稀缺盟广,自然闷串,數(shù)據(jù)工具產(chǎn)品文章也很少。

基于此筋量,結(jié)合自己的數(shù)據(jù)產(chǎn)品經(jīng)驗(yàn)烹吵,簡(jiǎn)單談一下數(shù)據(jù)探索平臺(tái)設(shè)計(jì)中的一個(gè)Feature,“CheckStyle”毛甲,和大家探討年叮,希望起到拋磚引玉的效果。

核心觀(guān)點(diǎn)

因?yàn)橛脩?hù)編寫(xiě)的代碼可能存在質(zhì)量差玻募、性能低只损、不規(guī)范、語(yǔ)法錯(cuò)誤等問(wèn)題。CheckStyle將使用我們TD的規(guī)則庫(kù)跃惫,通過(guò)平臺(tái)和流程來(lái)保障代碼質(zhì)量叮叹,希望能盡早、盡快爆存、無(wú)感解決故障隱患蛉顽,以節(jié)約時(shí)間,提高效率先较,降低出錯(cuò)率携冤。

短期內(nèi)會(huì)通過(guò)代碼樣例,API半自動(dòng)化實(shí)現(xiàn)闲勺,不斷完善曾棕,最終實(shí)現(xiàn)自動(dòng)化。

同時(shí)在一定程度也可以提升用戶(hù)的技能菜循,這也是平臺(tái)“自動(dòng)化”的重要一步翘地。

正文

為什么想到設(shè)計(jì)“CheckStyle”這個(gè)Feature呢?
昨天和一位數(shù)據(jù)分析師同學(xué)閑聊癌幕,聽(tīng)到她隨口吐槽一件工作中的小事衙耕,見(jiàn)微知著,聊一下數(shù)據(jù)探索中的“CheckStyle”需求勺远,和大家一起探討哈橙喘。

對(duì)話(huà)大意:

“最近咋樣啊”省略N個(gè)字。

進(jìn)入正題胶逢,

分析師:“實(shí)習(xí)生寫(xiě)的SQL真是令人痛心渴杆,一堆錯(cuò)∠芩”

權(quán):“一堆錯(cuò)磁奖?規(guī)范問(wèn)題?語(yǔ)法問(wèn)題某筐?業(yè)務(wù)問(wèn)題比搭?性能問(wèn)題?或者南誊,都有身诺?”

分析師:“都有,畢竟是實(shí)習(xí)生抄囚∶股模”

果斷先diss她幾句,招人時(shí)咋不想清楚幔托,有經(jīng)驗(yàn)的好一點(diǎn)穴亏,沒(méi)經(jīng)驗(yàn)的就要做好培養(yǎng)的準(zhǔn)備蜂挪,而且必然是一段時(shí)間細(xì)致的培養(yǎng),答復(fù)嗓化,雖然她也做了準(zhǔn)備棠涮,但確實(shí)需要時(shí)間。

權(quán):“那你現(xiàn)在咋辦”

分析師:“能咋辦刺覆,遇到問(wèn)題解決問(wèn)題严肪,一個(gè)個(gè)看唄∏迹”

權(quán):“那個(gè)人力量有限啊驳糯,你時(shí)間有限,而且我們也只能說(shuō)熟練使用SQL氢橙,不能說(shuō)精通结窘,大多數(shù)場(chǎng)景能搞定,遇到一些問(wèn)題也需要查充蓝,這種事最好交給機(jī)器做,產(chǎn)品化喉磁∥焦叮”

分析師:“有意思,說(shuō)說(shuō)看协怒±员海”

權(quán):“我想想,寫(xiě)篇文章總結(jié)一下孕暇,大家一起探討吧仑撞。”

對(duì)話(huà)基本結(jié)束妖滔。

一段簡(jiǎn)短的對(duì)話(huà)隧哮,一件工作中的常見(jiàn)的小事,但可以挖掘的點(diǎn)很多座舍。

下面說(shuō)一下我的想法沮翔,“CheckStyle”。

一曲秉、“CheckStyle”是什么采蚀?

背景:

工作中類(lèi)似的問(wèn)題太多了,用戶(hù)編寫(xiě)的代碼可能存在質(zhì)量差承二、性能低榆鼠、不規(guī)范、語(yǔ)法錯(cuò)誤等問(wèn)題亥鸠。

這里的用戶(hù)包括:咨詢(xún)妆够、分析師、工程師、科學(xué)家等

這里的代碼包括:SQL责静、Python袁滥、Scala、R等

這么一說(shuō)大家感受可能不深灾螃。

我們?cè)賮?lái)看幾個(gè)鮮活的例子题翻,看一線(xiàn)中的具體場(chǎng)景:

1.前段時(shí)間一位數(shù)據(jù)科學(xué)家同學(xué)因?yàn)檩敵鰯?shù)據(jù)集目錄命名不規(guī)范,導(dǎo)致和DSS的時(shí)間分區(qū)功能沖突腰鬼。

數(shù)據(jù)科學(xué)家在我們印象中已經(jīng)比較專(zhuān)業(yè)了嵌赠,但依然有可能發(fā)生偏差。

其實(shí)“是人就可能會(huì)出錯(cuò)”熄赡,因此需要相應(yīng)的規(guī)則和流程來(lái)約束姜挺,減少出錯(cuò)率。


image.png

2.前天看到一篇Python性能提升的文章彼硫,大意如下:

Python 是機(jī)器學(xué)習(xí)領(lǐng)域內(nèi)的首選編程語(yǔ)言炊豪,它易于使用,也有很多出色的庫(kù)來(lái)幫助你更快處理數(shù)據(jù)拧篮。但當(dāng)我們面臨大量數(shù)據(jù)時(shí)词渤,一些問(wèn)題就會(huì)顯現(xiàn),因?yàn)樵谶@樣的量級(jí)上串绩,工作進(jìn)程中加入任何額外的計(jì)算都需要時(shí)刻注意保持效率缺虐。

在默認(rèn)情況下,Python程序是單個(gè)進(jìn)程礁凡,使用單 CPU 核心執(zhí)行高氮。而大多數(shù)當(dāng)代機(jī)器學(xué)習(xí)硬件都至少搭載了雙核處理器。這意味著如果沒(méi)有進(jìn)行優(yōu)化顷牌,在數(shù)據(jù)預(yù)處理的時(shí)候會(huì)出現(xiàn)「一核有難九核圍觀(guān)」的情況剪芍,超過(guò) 50% 的算力都會(huì)被浪費(fèi)。在當(dāng)前四核處理器(英特爾酷睿i5)和6核處理器(英特爾酷睿i7)大行其道的時(shí)候窟蓝,這種情況會(huì)變得更加明顯紊浩。

幸運(yùn)的是,Python庫(kù)中內(nèi)建了一些隱藏的特性疗锐,可以讓我們充分利用所有CPU核心的能力坊谁。通過(guò)使用Python的concurrent.futures模塊,我們只需要3行代碼就可以讓一個(gè)普通的程序轉(zhuǎn)換成適用于多核處理器并行處理的程序滑臊。

with concurrent.futures.ProcessPoolExecutor() as executor:
image_files = glob.glob("*.jpg")
executor.map(load_and_resize, image_files)

測(cè)例是將1000張圖片被傳遞到深度神經(jīng)網(wǎng)絡(luò)之前將其調(diào)整為600×600像素分辨率的形式口芍。

優(yōu)化前在酷睿 i7-8700k 6核CPU上,運(yùn)行時(shí)間為7.9864秒雇卷,在這樣高端CPU上鬓椭,這種速度讓人難以接受颠猴,優(yōu)化后運(yùn)行時(shí)間降到1.14265秒,速度提升了近6倍小染!

看完之后確實(shí)是拍手稱(chēng)快翘瓮,又get了一項(xiàng)新技能,使用Python的concurrent.futures模塊做性能優(yōu)化裤翩,節(jié)約時(shí)間资盅,提升效率。

同時(shí)想到之前我想落地線(xiàn)下消費(fèi)標(biāo)簽使用的一份poiid數(shù)據(jù)集踊赠,代碼早早的寫(xiě)好呵扛,然而排隊(duì)等待集群資源運(yùn)行就等了1天。

查了一下原因筐带,也沒(méi)有大任務(wù)阻塞集群今穿,確實(shí)是大家的任務(wù)很多,一個(gè)接一個(gè)伦籍。

想要解決蓝晒,從供需兩端考慮,

供給端帖鸦,擴(kuò)展集群資源芝薇,這個(gè)我們正在做,升級(jí)到新集群富蓄。

需求端,大家任務(wù)多慢逾,集群資源有限立倍,必然存在矛盾,這時(shí)可以評(píng)估任務(wù)的優(yōu)先級(jí)侣滩,保證緊急任務(wù)優(yōu)先處理口注,另一方面,總體任務(wù)數(shù)量和順序優(yōu)化后君珠,我們也可以對(duì)單個(gè)任務(wù)的運(yùn)行時(shí)間和效率進(jìn)行優(yōu)化寝志,優(yōu)化代碼,做性能提升策添,從而提升整體運(yùn)行效率材部。

要想優(yōu)化代碼,做性能提升:

會(huì)對(duì)用戶(hù)有更高的技能要求唯竹,督促用戶(hù)自我提高乐导,在這方面TDU有也相關(guān)技能課幫助提高,但畢竟術(shù)業(yè)有專(zhuān)攻浸颓,是不是應(yīng)該降低用戶(hù)的技術(shù)門(mén)檻物臂,讓其更專(zhuān)注于在具體業(yè)務(wù)和場(chǎng)景中探索數(shù)據(jù)價(jià)值旺拉。

學(xué)習(xí)需要時(shí)間,且學(xué)無(wú)止境棵磷,不建議讓用戶(hù)承載過(guò)多的負(fù)擔(dān)蛾狗。

因此,代碼性能提升我可能更傾向于平臺(tái)側(cè)智能管理仪媒,平臺(tái)自動(dòng)優(yōu)化提升性能沉桌,并info給用戶(hù)相關(guān)建議,感興趣的用戶(hù)可以參考info自我提升规丽,進(jìn)一步學(xué)習(xí)并反饋規(guī)則給TD規(guī)則庫(kù)蒲牧,形成閉環(huán)不斷優(yōu)化。不感興趣的用戶(hù)可以直接忽略?xún)?yōu)化info專(zhuān)注業(yè)務(wù)赌莺,平臺(tái)自動(dòng)優(yōu)化運(yùn)行冰抢,做到無(wú)感體驗(yàn),不知不覺(jué)中提升整個(gè)集群任務(wù)的運(yùn)行效率艘狭。

未來(lái)趨勢(shì)也應(yīng)該是朝“自動(dòng)化”方向走挎扰。

現(xiàn)在我們Data ATM數(shù)據(jù)提取平臺(tái)的運(yùn)行機(jī)制類(lèi)似,前端展示極簡(jiǎn)的界面巢音,用戶(hù)拖過(guò)簡(jiǎn)單拖拽完成任務(wù)的輸入輸出遵倦,后端是將用戶(hù)選擇的模塊轉(zhuǎn)化為SQL在提交到GP網(wǎng)關(guān)。

即降低用戶(hù)的技術(shù)門(mén)檻官撼,讓其更專(zhuān)注于在具體業(yè)務(wù)和場(chǎng)景中探索數(shù)據(jù)價(jià)值梧躺。

以計(jì)算2018年9月APP活躍設(shè)備數(shù)統(tǒng)計(jì)為例:

在用戶(hù)操作層面,用戶(hù)可以感知的就是簡(jiǎn)單拖拽活躍設(shè)備和篩選設(shè)備統(tǒng)計(jì)兩個(gè)功能模塊傲绣,然后選擇時(shí)間2018-09掠哥,僅此而已,完成數(shù)據(jù)提取秃诵。

大大降低用戶(hù)的操作門(mén)檻续搀,這也是我們數(shù)據(jù)提取平臺(tái)的初衷,讓業(yè)務(wù)人員(銷(xiāo)售菠净、咨詢(xún)等)在不懂SQL等語(yǔ)言時(shí)也能通過(guò)簡(jiǎn)單拖拽完成數(shù)據(jù)提取禁舷,讓其更專(zhuān)注于在具體業(yè)務(wù)和場(chǎng)景中探索數(shù)據(jù)價(jià)值。

數(shù)據(jù)提取平臺(tái)毅往,作為一款數(shù)據(jù)產(chǎn)品牵咙,簡(jiǎn)單易用的背后是什么?

還是看這個(gè)例子:

作業(yè)轉(zhuǎn)化為SQL語(yǔ)句攀唯,然后提交到GP網(wǎng)關(guān)霜大,SQL語(yǔ)句大致如下:

SELECT a.offsetid, UNNEST_2D_1D(a.app_active) AS active

FROM device_app_active_monthly a, (

    SELECT partitionid::BIGINT * 10000000 + RB_ITERATE(bitmap) AS offsetid

    FROM bitmap_rexxx

    WHERE keyid = 123

) b

WHERE a.monthid BETWEEN '201809' AND '201809'

AND a.offsetid = b.offsetid;

我們做了什么?

(1)模塊的封裝革答,對(duì)應(yīng)底層數(shù)據(jù)集战坤,如活躍設(shè)備模塊對(duì)應(yīng)device_app_active系列數(shù)據(jù)集曙强;

(2)選項(xiàng)的封裝,對(duì)應(yīng)底層數(shù)據(jù)集相應(yīng)字段途茫,如2018-09時(shí)間對(duì)應(yīng)數(shù)據(jù)集的monthid碟嘴;

(3)作業(yè)的封裝,將作業(yè)所有條件轉(zhuǎn)化為SQL語(yǔ)句囊卜;

(4)UDF的定義娜扇,復(fù)雜操作通過(guò)UDF實(shí)現(xiàn)并優(yōu)化;

(5)數(shù)據(jù)結(jié)構(gòu)的定義栅组,使用Bitmap雀瓢,大大提升計(jì)算效率;

(6)數(shù)據(jù)庫(kù)選型玉掸,使用GP刃麸,提升整體效率。

等等~

好的工具司浪,真正讓用戶(hù)易用泊业,易用背后的邏輯我們沉淀,我們做的多啊易,用戶(hù)想的少吁伺。用戶(hù)專(zhuān)注于數(shù)據(jù)業(yè)務(wù),讓業(yè)務(wù)方和工具平臺(tái)都發(fā)揮最大的價(jià)值租谈。

image.png

發(fā)生上述這些問(wèn)題篮奄,有些可能是初出茅廬不諳世事的實(shí)習(xí)生,無(wú)經(jīng)驗(yàn)割去,技能上的短板窟却、未養(yǎng)成好的規(guī)范,

也可能是現(xiàn)在玩轉(zhuǎn)業(yè)務(wù)劫拗,熟練SQL的高級(jí)數(shù)據(jù)分析師间校,畢竟學(xué)海無(wú)涯矾克,技能上的盲點(diǎn)永遠(yuǎn)存在页慷。

還可能是用戶(hù)有相關(guān)經(jīng)驗(yàn),但就是百密一疏胁附,或者寫(xiě)代碼一時(shí)隨意酒繁。

但最終結(jié)果將會(huì)因?yàn)橐蝗耸韬鲈斐烧麄€(gè)集群任務(wù)隊(duì)列效率低下,或者之后運(yùn)用時(shí)出現(xiàn)意想不到的錯(cuò)誤控妻。

相關(guān)問(wèn)題還是需要嚴(yán)格的約束州袒,從平臺(tái)和流程層面管控。

將數(shù)據(jù)探索任務(wù)中遇到的各種問(wèn)題整理后弓候,結(jié)合開(kāi)源規(guī)范郎哭,一起作為我們TD的規(guī)則庫(kù)他匪。

綜上在此嚴(yán)格定義一下CheckStyle:

CheckStyle將使用我們TD的規(guī)則庫(kù),通過(guò)平臺(tái)和流程來(lái)保障代碼質(zhì)量夸研,希望能盡早邦蜜、盡快、無(wú)感解決故障隱患亥至,以節(jié)約時(shí)間悼沈,提高效率,降低出錯(cuò)率姐扮。

短期內(nèi)會(huì)通過(guò)代碼樣例絮供,API半自動(dòng)化實(shí)現(xiàn),不斷完善茶敏,最終實(shí)現(xiàn)自動(dòng)化壤靶。

二、為什么要做“CheckStyle”睡榆?

在說(shuō)完什么是CheckStyle后萍肆,再來(lái)說(shuō)為什么要做CheckStyle就很清晰了。

動(dòng)力:

因?yàn)橛脩?hù)編寫(xiě)的代碼可能存在質(zhì)量差胀屿、性能低塘揣、不規(guī)范、語(yǔ)法錯(cuò)誤等問(wèn)題宿崭,通過(guò)CheckStyle可以盡早亲铡、盡快、無(wú)感解決故障隱患葡兑,以節(jié)約時(shí)間奖蔓,提高效率,降低出錯(cuò)率讹堤。

同時(shí)在一定程度也可以提升用戶(hù)的技能吆鹤,完善我們TD規(guī)則庫(kù)。

這也是平臺(tái)“自動(dòng)化”的重要一步洲守。

阻力:

代碼樣例的梳理和準(zhǔn)備

規(guī)則庫(kù)的制定疑务,包括常見(jiàn)問(wèn)題和開(kāi)源規(guī)范的梳理;

產(chǎn)品研發(fā)側(cè)的設(shè)計(jì)和研發(fā)梗醇,DataCloud已經(jīng)停止迭代知允,綜合考慮DSS需求池和研發(fā)資源的現(xiàn)狀,現(xiàn)在有支持新集群等緊急需求在做叙谨,本需求相對(duì)而言?xún)?yōu)先級(jí)低一些温鸽,可以后續(xù)排期考慮。具體研發(fā)細(xì)節(jié)可以一起討論手负。

三涤垫、怎么做“CheckStyle”姑尺?

我們不妨參考借鑒一下同行,挑選國(guó)內(nèi)外的兩款優(yōu)秀競(jìng)品蝠猬,這里選擇國(guó)外的Dataiku DSS和國(guó)內(nèi)的阿里云數(shù)加:

1. Dataiku DSS 實(shí)踐

Dataiku DSS還處于一個(gè)相對(duì)早期的狀態(tài)股缸,在“CheckStyle”這一塊的實(shí)踐主要是Validate和code samples:

Validate功能會(huì)檢查查詢(xún)語(yǔ)法錯(cuò)誤和Schema的一致性問(wèn)題。

code samples功能則是插入代碼樣例吱雏,供用戶(hù)參考編輯敦姻。

image.png

2. 阿里云數(shù)加 實(shí)踐

我和阿里云的同學(xué)們溝通過(guò),確實(shí)是踩過(guò)了很多坑歧杏,在推廣過(guò)程中碰到大量的SQL優(yōu)化問(wèn)題镰惦,我們的結(jié)論也一致,無(wú)論是通過(guò)培訓(xùn)還是其他方式犬绒,其實(shí)都遠(yuǎn)沒(méi)有系統(tǒng)固化規(guī)則更好旺入,用系統(tǒng)流程化的方式解決問(wèn)題是平臺(tái)能夠規(guī)模化的核心要素凯力。

數(shù)加也確實(shí)走在行業(yè)的前列茵瘾,基于IntelliJ IDEA開(kāi)發(fā)插件MaxCompute Studio,MaxCompute 編譯器是新一代的SQL引擎咐鹤,顯著提升了SQL語(yǔ)言編譯過(guò)程的易用性與語(yǔ)言的表達(dá)能力拗秘。

定制化開(kāi)發(fā),更加靈活祈惶,功能強(qiáng)大雕旨。

本篇主要介紹以下兩點(diǎn):

(a)MaxCompute Studio會(huì)對(duì)代碼進(jìn)行靜態(tài)編譯檢查并給出修改建議,同時(shí)有計(jì)算健康分體系捧请,提交有錯(cuò)誤的腳本會(huì)被扣計(jì)算健康分凡涩,導(dǎo)致以后提交任務(wù)的優(yōu)先級(jí)被下調(diào)。

(b)使用MaxCompute SQL疹蛉,規(guī)范代碼活箕,預(yù)防預(yù)期外的錯(cuò)誤,并對(duì)代碼運(yùn)算效率進(jìn)行優(yōu)化可款。

2.1 MaxCompute Studio

image.png

如上圖育韩,靜態(tài)編譯發(fā)現(xiàn)第一個(gè) insert 語(yǔ)句中的UDF wm_concat函數(shù)參數(shù)錯(cuò)誤。

image.png

如上圖筑舅,鼠標(biāo)停止在錯(cuò)誤或者警告上座慰,會(huì)直接提示具體錯(cuò)誤或者警告信息陨舱。如果不修改錯(cuò)誤翠拣,直接提交,會(huì)被 MaxCompute Studio 阻攔游盲。

修改完畢后误墓,再次提交蛮粮,便可以順暢運(yùn)行。

2.2 MaxCompute SQL

基于SQL谜慌,使用MaxCompute SQL然想,規(guī)范代碼,預(yù)防預(yù)期外的錯(cuò)誤欣范,并對(duì)代碼運(yùn)算效率進(jìn)行優(yōu)化:

(a)代碼規(guī)范变泄,如別名,即子查詢(xún)必須要有別名恼琼。建議查詢(xún)都帶別名妨蛹。

(b)預(yù)防預(yù)期外的錯(cuò)誤,如精度問(wèn)題晴竞,Double 類(lèi)型因?yàn)榇嬖诰葐?wèn)題蛙卤,不建議在關(guān)聯(lián)時(shí)候進(jìn)行直接等號(hào)關(guān)聯(lián)兩個(gè) Double 字段。一個(gè)比較推薦的做法是把兩個(gè)數(shù)做下減法噩死,如果差距小于一個(gè)預(yù)設(shè)的值就認(rèn)為是相同颤难,比如 abs(a1- a2) < 0.000000001。

(c)代碼優(yōu)化已维,如分區(qū)裁剪行嗤,對(duì)分區(qū)列指定過(guò)濾條件,使得 SQL 執(zhí)行時(shí)只用讀取表的部分分區(qū)數(shù)據(jù)垛耳,避免全表掃描引起的數(shù)據(jù)錯(cuò)誤及資源浪費(fèi)昂验。

3.TD 實(shí)踐

具體落地可以先從SQL語(yǔ)言及相關(guān)用戶(hù)入手,后期視情況慢慢推廣:

1.代碼樣例的準(zhǔn)備艾扮,結(jié)合日常工作中的常見(jiàn)作業(yè)既琴,總結(jié)提煉幾套常見(jiàn)的代碼樣例和常用語(yǔ)法。

2.規(guī)則庫(kù)的制定泡嘴,包括常見(jiàn)問(wèn)題和開(kāi)源規(guī)范的梳理甫恩,目前規(guī)則可以分為以下幾類(lèi):

(1)語(yǔ)法類(lèi)規(guī)則,如類(lèi)方法的歸屬問(wèn)題酌予,主要由編譯器處理磺箕;

(2)規(guī)范類(lèi)規(guī)則,如表抛虫、目錄的命名規(guī)范松靡,注釋等,不斷總結(jié)+借鑒開(kāi)源規(guī)范建椰;

(3)質(zhì)量類(lèi)規(guī)則雕欺,如參數(shù)檢查、分母0、NULL值等屠列,不斷總結(jié)+借鑒開(kāi)源規(guī)范啦逆;

(4)性能類(lèi)規(guī)則,如并行計(jì)算笛洛、分區(qū)夏志、重復(fù)計(jì)算、大表裁剪等苛让,不斷總結(jié)+借鑒開(kāi)源規(guī)范沟蔑;

(5)其他規(guī)則~

image.png

3.產(chǎn)品研發(fā)側(cè)的設(shè)計(jì)和研發(fā),整體流程:

(1)平臺(tái)側(cè)配置好規(guī)則庫(kù)狱杰,

(2)用戶(hù)提交代碼后溉贿,結(jié)合規(guī)則庫(kù)進(jìn)行校驗(yàn),

(2.1)平臺(tái)可以自動(dòng)化處理重要缺陷浦旱,顯示相關(guān)info宇色,任務(wù)提交運(yùn)行,

(2.1.1)感興趣的用戶(hù)可以參考info自我提升颁湖,進(jìn)一步學(xué)習(xí)并反饋規(guī)則給TD規(guī)則庫(kù)宣蠕,形成閉環(huán)不斷優(yōu)化,

(2.1.2)不感興趣的用戶(hù)可以直接忽略?xún)?yōu)化info甥捺,專(zhuān)注業(yè)務(wù)抢蚀,做到無(wú)感體驗(yàn),相關(guān)info記錄留存镰禾,供資深分析師總結(jié)規(guī)則并反饋規(guī)則給TD規(guī)則庫(kù)皿曲,形成閉環(huán)不斷優(yōu)化,

(2.2)平臺(tái)無(wú)法自動(dòng)化處理重要缺陷吴侦,顯示更改tip屋休,任務(wù)被阻斷,

用戶(hù)可以結(jié)合更改tip备韧,并可請(qǐng)教資深的分析師一起協(xié)助修改劫樟,修復(fù)代碼后才可提交,并在此檢驗(yàn)規(guī)則织堂,同時(shí)將規(guī)則反饋給TD規(guī)則庫(kù)叠艳,形成閉環(huán)不斷優(yōu)化,

(3)完成任務(wù)提交易阳,不知不覺(jué)中提升整個(gè)集群任務(wù)的運(yùn)行效率附较,最終實(shí)現(xiàn)盡早、盡快潦俺、無(wú)感解決故障隱患拒课,以節(jié)約時(shí)間徐勃,提高效率,降低出錯(cuò)率捕发。

從長(zhǎng)遠(yuǎn)考慮,將自研和借鑒市場(chǎng)上的SQL Studio很魂,定制化開(kāi)發(fā)扎酷,更加靈活。

image.png

綜合考慮DSS需求池和研發(fā)資源的現(xiàn)狀遏匆,短期內(nèi)可能還是:

1.準(zhǔn)備代碼樣例法挨,

2.在實(shí)戰(zhàn)中總結(jié)規(guī)則,結(jié)合開(kāi)源規(guī)范不斷完善規(guī)則庫(kù)幅聘,

3.對(duì)用戶(hù)進(jìn)行規(guī)則庫(kù)和代碼樣例的相關(guān)培訓(xùn)凡纳,并結(jié)合TDU的優(yōu)質(zhì)教育資源,進(jìn)行專(zhuān)項(xiàng)技能提升帝蒿,

備注:相關(guān)培訓(xùn)可以視用戶(hù)的興趣和時(shí)間酌情參與,但最好有幾位資深分析師全程深入學(xué)習(xí),以備在關(guān)鍵時(shí)刻提供相關(guān)指導(dǎo)姆蘸。

4.同時(shí)根據(jù)規(guī)則在平臺(tái)側(cè)封裝相關(guān)API供用戶(hù)使用祝蝠,并逐漸嘗試自動(dòng)化處理。

最后绣张,引用曾鳴老師的一段話(huà)答渔,“未來(lái)創(chuàng)業(yè)很重要的一個(gè)方向就是把傳統(tǒng)上大家認(rèn)為必須由人來(lái)做的服務(wù),把它中間越來(lái)越多的環(huán)節(jié)拆解侥涵,變成可以在線(xiàn)化沼撕、機(jī)器化、智能化完成的任務(wù)芜飘∥癫颍”
個(gè)人認(rèn)為,這也是數(shù)據(jù)工具產(chǎn)品的發(fā)展方向嗦明,復(fù)雜工作簡(jiǎn)單化冲呢,簡(jiǎn)單工作智能化。

以上便是我關(guān)于“CheckStyle”的初步想法招狸,歡迎大家一起探討敬拓。

個(gè)人簡(jiǎn)介:

楚權(quán)(MR.Quan),東北大學(xué)2016屆畢業(yè)生裙戏,TalkingData高級(jí)數(shù)據(jù)產(chǎn)品經(jīng)理乘凸,熱愛(ài)數(shù)據(jù)&產(chǎn)品&技術(shù),不斷挑戰(zhàn)自我累榜。

歡迎交流:

wechat:663512441

簡(jiǎn)書(shū):Mr_Quan营勤,http://www.reibang.com/u/efd08a03829f

woshipm:Mr.Quan灵嫌,http://www.woshipm.com/u/216162

PMCAFF:楚權(quán),https://www.pmcaff.com/user/profile/260103

產(chǎn)品壹佰:楚權(quán)葛作,http://www.chanpin100.com/profile/me

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寿羞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赂蠢,更是在濱河造成了極大的恐慌绪穆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱岂,死亡現(xiàn)場(chǎng)離奇詭異玖院,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)第岖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)难菌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蔑滓,你說(shuō)我怎么就攤上這事郊酒。” “怎么了键袱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵猎塞,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我杠纵,道長(zhǎng)荠耽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任比藻,我火速辦了婚禮铝量,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘银亲。我一直安慰自己慢叨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布务蝠。 她就那樣靜靜地躺著拍谐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馏段。 梳的紋絲不亂的頭發(fā)上轩拨,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音院喜,去河邊找鬼亡蓉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喷舀,可吹牛的內(nèi)容都是我干的砍濒。 我是一名探鬼主播淋肾,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼爸邢!你這毒婦竟也來(lái)了樊卓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杠河,失蹤者是張志新(化名)和其女友劉穎碌尔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體感猛,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡七扰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年奢赂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陪白。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膳灶,死狀恐怖咱士,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轧钓,我是刑警寧澤序厉,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站毕箍,受9級(jí)特大地震影響弛房,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜而柑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一文捶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媒咳,春花似錦粹排、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至妙同,卻和暖如春射富,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粥帚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工辉浦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茎辐。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓宪郊,卻偏偏與公主長(zhǎng)得像掂恕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弛槐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容