Delta的真正用處和價(jià)值,你可知道

前言

應(yīng)該說(shuō),Delta是最近幾年Databricks開源的最有價(jià)值的東西。Databricks這幾年對(duì)外致力于AI,對(duì)內(nèi)則努力給客戶提供一站式分析處理平臺(tái)。這個(gè)一站式的核心是,內(nèi)核包含了流和批的真正統(tǒng)一,那什么才是真正的流和批的統(tǒng)一呢?

  1. 引擎內(nèi)核統(tǒng)一

  2. API統(tǒng)一

  3. 數(shù)據(jù)存儲(chǔ)統(tǒng)一

其中1,2兩點(diǎn)Spark開源項(xiàng)目已經(jīng)完成,而第三個(gè),其實(shí)一直是沒有一個(gè)好的開源項(xiàng)目完成的。功能上雖然很早就實(shí)現(xiàn)了,但是一直在DB內(nèi)部作為商業(yè)產(chǎn)品databricks runtime的一部分來(lái)使用。

數(shù)據(jù)存儲(chǔ)統(tǒng)一

不得不說(shuō),其實(shí)之前我們已經(jīng)使用Parquet實(shí)現(xiàn)了統(tǒng)一,但這僅僅是格式上的統(tǒng)一,因?yàn)槟阄ㄒ荒茏龅降氖牵毫鲗懭氲臄?shù)據(jù),批可以讀。但是用過(guò)的人才知道真正的痛。對(duì)一個(gè)數(shù)據(jù)而言,我們不可避免會(huì)遇到如下問題:

  1. 并發(fā)寫

  2. 一寫多讀

  3. 多版本管理

在沒有delta之前,一個(gè)文件如果在寫,此時(shí)其無(wú)論批或者流讀和寫都會(huì)存在問題。簡(jiǎn)直沒辦法忍。比如你要更新一個(gè)數(shù)據(jù),這個(gè)時(shí)候讀也受到影響,還怎么對(duì)外提供服務(wù)?當(dāng)然,你可能總有辦法繞過(guò)去,但骨子里還是因?yàn)閿?shù)據(jù)沒辦法得到真正的統(tǒng)一。

另外就是一個(gè)很常用的場(chǎng)景,就是可能有流,有批都會(huì)往一個(gè)表寫入數(shù)據(jù),然后流實(shí)時(shí)讀?。▓?chǎng)景是實(shí)時(shí)報(bào)表)。這個(gè)之前也是做不到的。 有了Delta,這些都可以做了

實(shí)際場(chǎng)景演示下

MLSQL 1.3.0-SNAPHOT已經(jīng)升級(jí)支持Spark 2.4.2,并且支持Delta。 下面我們用MLSQL Stack演示下如何使用Delta.

set rawText='''
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":0.0},
{"content":"Spark是一個(gè)好的語(yǔ)言","label":1.0}
{"content":"MLSQL語(yǔ)言","label":0.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":0.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":1.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":0.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":0.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":1.0}
{"content":"Spark好的語(yǔ)言","label":0.0}
{"content":"MLSQL是一個(gè)好的語(yǔ)言","label":0.0}
''';

load jsonStr.`rawText` as orginal_text_corpus;

save append orginal_text_corpus as delta.`/tmp/delta/table1`;
load delta.`/tmp/delta/table1` as output;

這里,我們?nèi)斯ぴ炝艘恍?shù)據(jù),用delta格式寫入。

接著,我們啟動(dòng)一個(gè)流式程序讀取delta表的新增數(shù)據(jù):

-- the stream name, should be uniq.
set streamName="streamExample";

-- load data as table
load rate.`/tmp/delta/table1` as datasource;

select *  from datasource 
as table21;

-- output the the result to console.
save append table21  
as console.`` 
options mode="Append"
and duration="15"
and checkpointLocation="/tmp/cpl4";

注意,這里用的rate而不是delta。 其實(shí)本質(zhì)上他們是一致的,只是為了方便程序區(qū)分是流和批。

不時(shí)點(diǎn)擊下寫入delta的腳本,這樣產(chǎn)生新的數(shù)據(jù),然后通過(guò)下面命令查看流程序的情況:

!show "progress/streamExample";
在這里插入圖片描述

總結(jié)

Delta為我們帶來(lái)了一個(gè)流和批真正可以共用,并且可以并發(fā)讀寫的格式,除此之外,還做了大量的性能提升(包括提供新的索引),一個(gè)真正的數(shù)據(jù)湖便這么產(chǎn)生了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容