如何用Google Cloud 建立簡易數(shù)據(jù)處理流程

來源:知乎
作者:Lucy-Fintech
時(shí)間:2020-06-17
2709
針對不同的原始數(shù)據(jù)類型-批數(shù)據(jù)(Batch Data)或流數(shù)據(jù)(Streaming Data),處理數(shù)據(jù)的流程也會(huì)略有不同。本文通過一個(gè)簡單的例子,來介紹如何借助Google Cloud建立批數(shù)據(jù)處理流程。

針對不同的原始數(shù)據(jù)類型-批數(shù)據(jù)(Batch Data)或流數(shù)據(jù)(Streaming Data),處理數(shù)據(jù)的流程也會(huì)略有不同。本文通過一個(gè)簡單的例子,來介紹如何借助Google Cloud建立批數(shù)據(jù)處理流程。

01丨提出需求

假設(shè)我們想要建立一個(gè)數(shù)據(jù)集,其包含大陸兩大證券交易所(上海及深圳證券交易所)每日成交量排名前20的股票信息。

原始信息可以通過兩大證券交易所網(wǎng)站獲得:

https://www.sse.com.cn/market/stockdata/activity/main/

https://www.szse.cn/market/stock/active/actv/index.html

02丨分析需求

在實(shí)現(xiàn)代碼前,我們需要先對需求進(jìn)行分析,建立模型,并判斷需要實(shí)現(xiàn)的功能。

建模

一個(gè)典型的ETL(Extract,Transform,Load)數(shù)據(jù)流程大都由以下幾部分組成:

·原始數(shù)據(jù)存儲(chǔ)(download)從數(shù)據(jù)源(Vendor Source)下載數(shù)據(jù),并備份到自有存儲(chǔ)。自有存儲(chǔ)的好處是便于日后重新處理或查找,而不用擔(dān)心數(shù)據(jù)源的消失。

·原始數(shù)據(jù)變形(reshape)將不同數(shù)據(jù)格式統(tǒng)一,重新生成原始數(shù)據(jù)。不同數(shù)據(jù)提供商的數(shù)據(jù)保存格式往往不同(如csv,excel,xml等),將不同的數(shù)據(jù)格式進(jìn)行統(tǒng)一,能方便后續(xù)的數(shù)據(jù)處理。

·數(shù)據(jù)歸一(normalize)對變形后的數(shù)據(jù)進(jìn)行重新建模,在理想的數(shù)據(jù)模型(schema)下重新生成數(shù)據(jù)。不同數(shù)據(jù)源的數(shù)據(jù),其數(shù)據(jù)模型往往不盡相同,同時(shí)與我們最終想要得到的數(shù)據(jù)集模型也未必相同,所以我們需要對數(shù)據(jù)進(jìn)行歸一處理。

·數(shù)據(jù)整合(merge)對不同來源的相同數(shù)據(jù)進(jìn)行整合,生成最終數(shù)據(jù)集。對同一對象,不同的數(shù)據(jù)源可能會(huì)提供不同的數(shù)據(jù)。例如根據(jù)計(jì)算方法不同,不同數(shù)據(jù)提供商針對同一支證券會(huì)提供不同的的收盤價(jià)。我們需要將這些數(shù)據(jù)整合來生成最終的數(shù)據(jù)集。

分析

在本例中,數(shù)據(jù)源(Vendor Source)共有兩個(gè),上海證券交易所和深圳證券交易所。

上海證券交易所提供的數(shù)據(jù)存儲(chǔ)在html文件中,除了成交量的排名外還有成交金額等其他指標(biāo)排名。而深圳證券交易所提供的數(shù)據(jù)存儲(chǔ)在xlsx文件中,并僅有成交量的排名。

上海證券交易所提供的數(shù)據(jù)中除了股票代碼,股票簡稱,累計(jì)成交量外,還有價(jià)格信息(開盤,收盤,均價(jià))及幾個(gè)比率信息(振幅,換手率)等。而深圳證券交易所提供的數(shù)據(jù)除了股票代碼,股票簡稱,累計(jì)成交量外,也提供幾個(gè)價(jià)格信息。同時(shí)兩組數(shù)據(jù)的單位并不相同(上海證券交易所為萬股、萬元,深圳證券交易所為億股、億元)。

兩組數(shù)據(jù)互斥(mutually exclusive),所以假設(shè)如果沒有人為改寫(manual override)的需求,數(shù)據(jù)整合并不需要做什么。

根據(jù)上面的分析,我們確定數(shù)據(jù)流程中需要完成以下幾項(xiàng)任務(wù):

·下載html及xlsx文件。

·轉(zhuǎn)換html及xslx文件至同一格式。

·對兩組數(shù)據(jù)進(jìn)行重新建模,統(tǒng)一數(shù)據(jù)模型及單位。

·簡單數(shù)據(jù)整合并輸出數(shù)據(jù)集。

流程圖

根據(jù)上面的分析,我們可以建立以下流程圖:

v2-188d21fc8f246aeccf182cae7296d05b_720w.jpg

03丨實(shí)現(xiàn)需求

技術(shù)棧

在本例中,數(shù)據(jù)流程的實(shí)現(xiàn)需要用到Google Cloud中的以下幾個(gè)產(chǎn)品:

·Cloud Storage用來存儲(chǔ)原始數(shù)據(jù)文件。

·Cloud Function用來下載數(shù)據(jù)文件,觸發(fā)文件存儲(chǔ)后的各項(xiàng)變形。

·Cloud Scheduler用來定時(shí)執(zhí)行Cloud Function。

·Dataflow用來執(zhí)行數(shù)據(jù)變形,歸一以及整合。Big Query用來存儲(chǔ)變形后,歸一后,以及整合后的數(shù)據(jù)。

原始數(shù)據(jù)存儲(chǔ)

上海證券交易所主板成交量前20的數(shù)據(jù)并沒有提供文件下載鏈接,所以我們只能存儲(chǔ)整個(gè)活躍股排名前20的html頁面。

數(shù)據(jù)下載及存儲(chǔ)可以通過Cloud Function,Cloud Scheduler和Cloud Storage來實(shí)現(xiàn)

Cloud Function偽代碼如下:

v2-7e2212e566d0d92c08a1ff5ebd1f8806_720w.jpg

通過Cloud Scheduler定時(shí)調(diào)用上面的Cloud Function,下載每日的數(shù)據(jù)信息,并將最終的html文件存儲(chǔ)在Cloud Storage中。

深圳證券交易所主板成交量前20的數(shù)據(jù)提供xlsx格式下載。同上,我們依舊可以通過Cloud Function,Cloud Scheduler和Cloud Storage來實(shí)現(xiàn)

Cloud Function偽代碼如下:

v2-fa0ca25c53abaae5f2d4b6a804c66294_720w.jpg

原始數(shù)據(jù)變形,歸一以及整合

在原始文件下載后,我們需要對原始數(shù)據(jù)進(jìn)行變形,歸一以及整合。這些變形都可以通過Dataflow來實(shí)現(xiàn)。每一個(gè)數(shù)據(jù)源,我們都需要進(jìn)行變形及歸一操作,而整合只需要對所有數(shù)據(jù)進(jìn)行統(tǒng)一處理便可。

針對上海證券交易所數(shù)據(jù)的變形、歸一的偽代碼如下:

v2-7349a65fe2a6fc496d56db900243ae3b_720w.jpg

針對深圳證券交易所數(shù)據(jù)的變形、歸一與上面類似。

之后,我們可以通過Cloud Function來建立觸發(fā)機(jī)制(trigger),每當(dāng)原始數(shù)據(jù)文件被下載到Google Cloud Storage后,上面的Dataflow流程便會(huì)被自動(dòng)調(diào)用。

因?yàn)楸纠袛?shù)據(jù)互斥,數(shù)據(jù)整合僅僅是簡單的合并,所以整合部分的偽代碼便略過了。

最后,整個(gè)流程中生成的各種數(shù)據(jù)會(huì)被存儲(chǔ)到Big Query的各個(gè)表格中:

v2-f06f46e32da598f50c0e9a7dd3ddcdb6_720w.jpg

main_board_trading_volume_top_20中存儲(chǔ)的數(shù)據(jù)便是我們需要的數(shù)據(jù)集。

04丨寫在最后

如果要將上面所建立的數(shù)據(jù)流程應(yīng)用到正式的生產(chǎn)環(huán)境(Production Environment)中,其實(shí)還有大量的問題需要解決,以下僅列出幾個(gè)例子:

·技術(shù)棧的選取隨著各種技術(shù)的不斷發(fā)展,我們往往有不同的選擇來實(shí)現(xiàn)同一功能。如存儲(chǔ)數(shù)據(jù)我們可以用Big Query,也可以用RDBMS,NoSQL等。選取的技術(shù)棧是否合適,是我們需要仔細(xì)考慮的問題。

·代碼復(fù)用(Code Reusability)處理簡單數(shù)據(jù)的數(shù)據(jù)流程大都大同小異。為了能減少后期維護(hù)成本,以及提高代碼復(fù)用,這些數(shù)據(jù)流程往往是通過一個(gè)共同的數(shù)據(jù)流程框架來實(shí)現(xiàn),而不是成百上千個(gè)獨(dú)立的小程序,所以上面示例中存在的大量重復(fù)代碼,在正式生產(chǎn)環(huán)境中并不常見。

·證券標(biāo)識(shí)(Security ID)統(tǒng)一一個(gè)量化交易系統(tǒng)的搭建,往往需要數(shù)十乃至上百個(gè)數(shù)據(jù)集的協(xié)作。同一支證券,在不同數(shù)據(jù)集中往往擁有不同的標(biāo)示(如Ticker,SEDOL,ISIN,CUSIP等)。為了能將新的數(shù)據(jù)集導(dǎo)入現(xiàn)有平臺(tái),我們需要解決證券標(biāo)識(shí)的統(tǒng)一問題。

·流程的可靠性(Pipeline Reliability)及錯(cuò)誤處理(Error Handling)一個(gè)流程的可靠性會(huì)極大地影響后期的維護(hù)成本。上面的例子中,一個(gè)常見的改動(dòng)(文件地址更新,不完整文件,數(shù)據(jù)錯(cuò)誤,數(shù)據(jù)模型更改)便會(huì)使整個(gè)數(shù)據(jù)流程出錯(cuò)。我們需要盡可能的完善錯(cuò)誤處理機(jī)制,來盡可能的減少后期維護(hù)需求。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
版權(quán)說明:本文內(nèi)容來自于知乎,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號(hào)登錄/注冊
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家