場(chǎng)景還原
不知道你是否在寫離線代碼時(shí)遇到過(guò)以下幾種情況:
-
相同的業(yè)務(wù)代碼邏輯分散在各個(gè)地方,需要維護(hù)多份相似功能代碼;
-
存在多張相同結(jié)構(gòu)的表輸入,需要經(jīng)過(guò)相同或相似的邏輯計(jì)算加工,并輸出給下游表;
-
有一個(gè)計(jì)算邏輯非常復(fù)雜,需要經(jīng)過(guò)多個(gè)子流程或多個(gè)節(jié)點(diǎn)處理,如何理清楚這些這些節(jié)點(diǎn)的邏輯和層次關(guān)系?
這里舉幾個(gè)場(chǎng)景,好讓你更形象地理解。
-
在某個(gè)系統(tǒng)中,數(shù)據(jù)分大促活動(dòng)數(shù)據(jù)和日常數(shù)據(jù)。大促活動(dòng)數(shù)據(jù)優(yōu)先級(jí)較高,需要每小時(shí)地調(diào)度計(jì)算,日常數(shù)據(jù)優(yōu)先級(jí)較低,只需要天級(jí)調(diào)度。PS:在這個(gè)場(chǎng)景中,我們處理這些數(shù)據(jù)的邏輯高度地相似甚至相同,并且輸入表和輸出表的schema也是一樣的,唯一不同的是調(diào)度周期。
-
在某系統(tǒng)中需要統(tǒng)計(jì)分析不同維度下的銷售數(shù)據(jù),比如城市、省份、時(shí)間段(天、周、月)、區(qū)域等等
-
某平臺(tái)需要給多個(gè)業(yè)務(wù)輸出數(shù)據(jù),希望不同業(yè)務(wù)間的數(shù)據(jù)做隔離,一個(gè)業(yè)務(wù)只能讀取本業(yè)務(wù)范圍內(nèi)的數(shù)據(jù)。
不知道現(xiàn)在有沒(méi)有體感了,如果有了,請(qǐng)繼續(xù)往下看。
解決思路
其實(shí)以上問(wèn)題歸根結(jié)底,我們需要有一套代碼模板來(lái)實(shí)現(xiàn)代碼的復(fù)用,我們可以通過(guò)參數(shù)的控制實(shí)現(xiàn)差異化的功能。
開(kāi)始,筆者想到的是通過(guò)Java后臺(tái)來(lái)生成這套模板代碼,然后在ODPS 上創(chuàng)建Python腳本,通過(guò)Http請(qǐng)求Java后臺(tái)的服務(wù),以動(dòng)態(tài)腳本的方式離線調(diào)度執(zhí)行。
但很快發(fā)現(xiàn)這種方式存在諸多問(wèn)題:
-
代碼在JAVA側(cè),JAVA側(cè)拼接SQL極易出錯(cuò),需要經(jīng)常發(fā)布JAVA應(yīng)用來(lái)實(shí)現(xiàn)某個(gè)離線小功能的迭代,并且離線代碼侵入后臺(tái)系統(tǒng)本身也不太合理。
-
SQL是動(dòng)態(tài)生成的,缺少代碼格式化,只能通過(guò)運(yùn)行日志找到實(shí)際運(yùn)行的代碼,可讀性差。
-
代碼存在兩個(gè)系統(tǒng)中,較為黑盒,代碼測(cè)試和debug都較為困難。
最后,在翻閱ODPS的官方文檔后發(fā)現(xiàn),其實(shí)這些問(wèn)題ODPS平臺(tái)上已經(jīng)具備相應(yīng)的解決方案了——ODPS組件。
初識(shí)ODPS組件
============
? ?組件的定義
組件是一種帶有多個(gè)輸入?yún)?shù)和輸出參數(shù)的SQL代碼過(guò)程模板, SQL代碼的處理過(guò)程一般是引入一到多個(gè)源數(shù)據(jù)表,通過(guò)過(guò)濾,連接,聚合等操作,加工出新的業(yè)務(wù)需要的目標(biāo)表。
****? ?組件的價(jià)值
如上,在實(shí)際業(yè)務(wù)實(shí)踐中,有大量的SQL代碼過(guò)程很類似,過(guò)程中輸入的表和輸出的表的結(jié)構(gòu)是一樣的或者是類型兼容的,僅僅是名字不同而已。這個(gè)時(shí)候組件的開(kāi)發(fā)者就可以將這樣的一個(gè) SQL 過(guò)程抽象成為一個(gè)SQL組件節(jié)點(diǎn),將里面可變的輸入表抽象成輸入?yún)?shù),把里面可變的輸出表抽象成輸出參數(shù),就可以實(shí)現(xiàn) SQL 代碼的復(fù)用。
組件的使用者在使用 SQL 組件節(jié)點(diǎn)的時(shí)候,只要從組件列表中選擇和自己業(yè)務(wù)處理過(guò)程類似的組件,為這些組件配置上自己業(yè)務(wù)中特定的 輸入表和輸出表,不用再重復(fù)復(fù)制代碼,就可以直接生成新的組件 SQL 節(jié)點(diǎn) 從而極大提高了開(kāi)發(fā)效率,避免了重復(fù)開(kāi)發(fā)。
SQL 組件節(jié)點(diǎn)生成后的發(fā)布,調(diào)度的操作方法都和普通的 SQL 節(jié)點(diǎn)的操作方式是一樣的。
? ?組件的結(jié)構(gòu)
一個(gè)組件就像一個(gè)函數(shù)的定義一樣,由輸入?yún)?shù),輸出參數(shù)和組件代碼過(guò)程構(gòu)成。
組件的輸入?yún)?shù)
組件的輸入?yún)?shù)具有參數(shù)名,參數(shù)類型,參數(shù)描述,參數(shù)定義等屬性, 參數(shù)類型有兩種:一個(gè)是表類型 table,一種是字符串類型 string。
???表類型的參數(shù)
指定組件過(guò)程中要引用到的表,在使用組件的時(shí)候,組件的使用者可以為該參數(shù)填入其特定業(yè)務(wù)需要的表。
???字符串類型的參數(shù)
指定組件過(guò)程中需要變化的控制參數(shù),比如指定過(guò)程的結(jié)果表只輸出每個(gè)區(qū)域的頭 N 個(gè)城市的銷售額,這個(gè) n 是 1 還是 3 就可以通過(guò)字符串類型的參數(shù)進(jìn)行控制;另一個(gè)例子,要指定過(guò)程的結(jié)果表輸出那個(gè)省份的銷售總額,可以設(shè)置一個(gè)省份字符串參數(shù),指定不同的省份,就能獲得指定省份的銷售數(shù)據(jù)。
???組件的輸出參數(shù)
組件的輸出參數(shù)具有參數(shù)名,參數(shù)類型,參數(shù)描述,參數(shù)定義等屬性,參數(shù)類型只有一種:表類型 table。字符串類型的輸出參數(shù)沒(méi)有邏輯意義。
???組件的過(guò)程體
在過(guò)程體中參數(shù)的引用格式為:@@{參數(shù)名}
過(guò)程體通過(guò)編寫抽象的sql 加工過(guò)程,將指定的輸入表按照輸入?yún)?shù)進(jìn)行控制加工出有業(yè)務(wù)價(jià)值的輸出表。
PS:其實(shí)作為碼農(nóng),我們能很好地理解組件的概念,因?yàn)榧词鼓銢](méi)寫過(guò)ODPS代碼,不知道ODPS的組件,但你一定在你曾經(jīng)用過(guò)的語(yǔ)言里找到類似的概念,例如,前端領(lǐng)域中的UI組件,移動(dòng)Android開(kāi)發(fā)中的組件,Java開(kāi)發(fā)中的各種框架,Jar包等等都是一些組件。
===
牛刀小試
========
作為初識(shí)ODPS組件的小白,我們先嘗試寫一個(gè)helloword,實(shí)現(xiàn)從一張大表中按業(yè)務(wù)拆分出多張子表,分別給到各自業(yè)務(wù)各自的表。
?? 創(chuàng)建組件
過(guò)程體開(kāi)發(fā)
PS: 組件過(guò)程的開(kāi)發(fā)具有一定的技巧,組件過(guò)程的代碼需要巧妙的利用輸入?yún)?shù)和輸出參數(shù),使得組件過(guò)程能夠在使用的時(shí)刻填入不同的輸入?yún)?shù)和輸出參數(shù)也能生成正確的可運(yùn)行的sql代碼。
填寫輸入輸出參數(shù)
調(diào)試&運(yùn)行
在做完以上兩步后,我們可以直接在組件開(kāi)發(fā)的界面點(diǎn)擊運(yùn)行,輸入測(cè)試的參數(shù)進(jìn)行調(diào)試運(yùn)行。
發(fā)布
組件具有版本號(hào)的功能,每次發(fā)布,版本號(hào)會(huì)自增,后面組件使用的地方會(huì)用到。
? ?組件引用
在數(shù)據(jù)開(kāi)發(fā)頁(yè)面,在文件夾目錄先右鍵選擇創(chuàng)建SQL組件節(jié)點(diǎn)。
使用組件節(jié)點(diǎn)與SQL節(jié)點(diǎn),大部分開(kāi)發(fā)使用習(xí)慣都是一樣的,包括調(diào)度配置也都一樣,唯獨(dú)不同的是組件節(jié)點(diǎn)關(guān)聯(lián)了一個(gè)組件,如果需要更新節(jié)點(diǎn),需要先更新組件的代碼,然后更新節(jié)點(diǎn)的代碼版本。
進(jìn)階使用
========
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開(kāi)發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/strong>

Spring全套教學(xué)資料
Spring是Java程序員的《葵花寶典》,其中提供的各種大招,能簡(jiǎn)化我們的開(kāi)發(fā),大大提升開(kāi)發(fā)效率!目前99%的公司使用了Spring,大家可以去各大招聘網(wǎng)站看一下,Spring算是必備技能,所以一定要掌握。
目錄:
部分內(nèi)容:
Spring源碼
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手寫實(shí)現(xiàn) IoC 和 AOP(自定義Spring框架)
- 第四部分 Spring IOC 高級(jí)應(yīng)用
基礎(chǔ)特性
高級(jí)特性 - 第五部分 Spring IOC源碼深度剖析
設(shè)計(jì)優(yōu)雅
設(shè)計(jì)模式
注意:原則、方法和技巧 - 第六部分 Spring AOP 應(yīng)用
聲明事務(wù)控制 - 第七部分 Spring AOP源碼深度剖析
必要的筆記、必要的圖、通俗易懂的語(yǔ)言化解知識(shí)難點(diǎn)
腳手框架:SpringBoot技術(shù)
它的目標(biāo)是簡(jiǎn)化Spring應(yīng)用和服務(wù)的創(chuàng)建、開(kāi)發(fā)與部署,簡(jiǎn)化了配置文件,使用嵌入式web服務(wù)器,含有諸多開(kāi)箱即用的微服務(wù)功能,可以和spring cloud聯(lián)合部署。
Spring Boot的核心思想是約定大于配置,應(yīng)用只需要很少的配置即可,簡(jiǎn)化了應(yīng)用開(kāi)發(fā)模式。
- SpringBoot入門
- 配置文件
- 日志
- Web開(kāi)發(fā)
- Docker
- SpringBoot與數(shù)據(jù)訪問(wèn)
- 啟動(dòng)配置原理
- 自定義starter
微服務(wù)架構(gòu):Spring Cloud Alibaba
同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務(wù)解決方案,包含開(kāi)發(fā)分布式應(yīng)用微服務(wù)的必需組件,方便開(kāi)發(fā)者通過(guò) Spring Cloud 編程模型輕松使用這些組件來(lái)開(kāi)發(fā)分布式應(yīng)用服務(wù)。
- 微服務(wù)架構(gòu)介紹
- Spring Cloud Alibaba介紹
- 微服務(wù)環(huán)境搭建
- 服務(wù)治理
- 服務(wù)容錯(cuò)
- 服務(wù)網(wǎng)關(guān)
- 鏈路追蹤
- ZipKin集成及數(shù)據(jù)持久化
- 消息驅(qū)動(dòng)
- 短信服務(wù)
- Nacos Confifig—服務(wù)配置
- Seata—分布式事務(wù)
- Dubbo—rpc通信
Spring MVC
目錄:
部分內(nèi)容:
《互聯(lián)網(wǎng)大廠面試真題解析、進(jìn)階開(kāi)發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實(shí)戰(zhàn)項(xiàng)目源碼講義》點(diǎn)擊傳送門即可獲??!
[外鏈圖片轉(zhuǎn)存中…(img-oMRpfL1o-1713710074339)]
Spring MVC
目錄:
[外鏈圖片轉(zhuǎn)存中…(img-kjRT6HxX-1713710074340)]
[外鏈圖片轉(zhuǎn)存中…(img-iDewIqJH-1713710074340)]
[外鏈圖片轉(zhuǎn)存中…(img-xzBXfc9o-1713710074340)]
部分內(nèi)容:
[外鏈圖片轉(zhuǎn)存中…(img-XXpkvjhq-1713710074340)]
[外鏈圖片轉(zhuǎn)存中…(img-zz8Kb2nP-1713710074340)]文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-860790.html
《互聯(lián)網(wǎng)大廠面試真題解析、進(jìn)階開(kāi)發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實(shí)戰(zhàn)項(xiàng)目源碼講義》點(diǎn)擊傳送門即可獲??!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-860790.html
到了這里,關(guān)于數(shù)據(jù)倉(cāng)庫(kù)解決方案——ODPS組件化改造之路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!