欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的

這篇文章將為大家詳細(xì)講解有關(guān)大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蘭西企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都做網(wǎng)站蘭西網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

大數(shù)據(jù)存儲(chǔ)格式-parquet

為什么需要列式存儲(chǔ)

首先我們從關(guān)系數(shù)據(jù)庫(kù)入手,來(lái)看關(guān)系數(shù)據(jù)庫(kù)的一些常見(jiàn)查詢。對(duì)于關(guān)系數(shù)據(jù)庫(kù)而言,我們常見(jiàn)的查詢一般有詳情查詢或者統(tǒng)計(jì)分組,但是如果是大數(shù)據(jù)量的情況下,關(guān)系數(shù)據(jù)庫(kù)是不能很好的支持統(tǒng)計(jì)類的查詢,所以一般關(guān)系數(shù)據(jù)庫(kù)多有于對(duì)OLTP業(yè)務(wù),那么常見(jiàn)的大數(shù)據(jù)的查詢有個(gè)特點(diǎn),由于數(shù)據(jù)量很大,獲取具體的詳情數(shù)據(jù)意義不大,所以基本都是統(tǒng)計(jì)類的查詢,如:select count(1) cnt,ip from access_log group by ip,查詢每個(gè)ip的訪問(wèn)次數(shù)。當(dāng)然也可能有查詢?cè)敿?xì)做深度的數(shù)據(jù)分析。

對(duì)于查詢速度當(dāng)然是越快越好,我們可以從以下幾個(gè)方面來(lái)提高這個(gè)系統(tǒng)的查詢速度(當(dāng)然緩存不在考慮的范疇內(nèi)),1.查詢系統(tǒng)框架的優(yōu)化,這里可能包含了(執(zhí)行計(jì)劃啊,分布式計(jì)算等等等),2.底層文件存儲(chǔ)格式的優(yōu)化,盡量減少IO.3.當(dāng)然還有索引技術(shù).

針對(duì)上面的sql:select count(1) cnt,ip from access_log group by ip

我們假設(shè)access_log的格式如下: <code> access_log{ string ip; string access_time; ............(其他N個(gè)屬性)

} </code>

如果是行存儲(chǔ):

大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的

我們需要讀取一行的所有數(shù)據(jù),然后獲取其中的ip字段,在做分組統(tǒng)計(jì)。增加的磁盤的IO,同時(shí)也增加了計(jì)算壓力.

如果是列存儲(chǔ)會(huì)如何: 大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的

對(duì)于上面的統(tǒng)計(jì),我們只需要讀取IP就可以,讀取不需要的列信息,這就是列存儲(chǔ)對(duì)于大數(shù)據(jù)的統(tǒng)計(jì)類查詢的優(yōu)點(diǎn)所在,當(dāng)然除此之外大數(shù)據(jù)本身的稀疏性,采用列式可能更好的去優(yōu)化存儲(chǔ)結(jié)構(gòu),減少存儲(chǔ)空間.

parquet介紹

parquet是twitter在2013年開源的數(shù)據(jù)結(jié)構(gòu),google的Dremel: [Interactive Analysis of Web-Scale Datasets http://research.google.com/pubs/pub36632.html](Interactive Analysis of Web-Scale Datasets http://research.google.com/pubs/pub36632.html "Interactive Analysis of Web-Scale Datasets http://research.google.com/pubs/pub36632.html").這個(gè)大數(shù)據(jù)查詢利器的paper里面,其實(shí)主要也是在闡述底層文件存儲(chǔ)格式。

Parquet支持復(fù)雜嵌套的數(shù)據(jù)結(jié)構(gòu)組成,并使用重復(fù)級(jí)別/定義級(jí)別(repetition/definition level )的方法來(lái)對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行編碼,嵌套的方式其實(shí)可以避免了大數(shù)據(jù)的join問(wèn)題.

Parquet支持對(duì)某一列數(shù)據(jù)進(jìn)行壓縮,支持任意開發(fā)語(yǔ)言的讀寫操作.目前是apache的頂級(jí)項(xiàng)目.

parquet文件格式分析

首先來(lái)看一下如何定義一個(gè)parquet的文件格式,這里也是采用類似PB的格式定義 這里采用了班級(jí)信息來(lái)作為示例,有多個(gè)班級(jí),每一個(gè)班級(jí)有個(gè)master,有多個(gè)學(xué)生(可以無(wú)),每個(gè)學(xué)生有名稱和多個(gè)愛(ài)好,還有每一門可課程的成績(jī)以及課程名稱. schema定義: <code> message classroom{ required string master; repeated group students{ required string name; repeated string hobbys; repeated group coursescore{ required string name; optional string score; } } } </code> required 表示必填 repeated 表示可以有任意個(gè) optional 0 or 1 對(duì)于數(shù)據(jù)可以關(guān)系可以分為Map以及List,如果為L(zhǎng)ist可以采用repeated,Map采用group 關(guān)鍵字修飾.

這里我們來(lái)定義一組數(shù)據(jù):

<code> { master:"jack", student: name:"tom" student: name:"joy", hobbys:"basketball", hobbys:"football", coursescore: name:"math", coursescore: name:"chinese", score:100 } { master:"BoBo" } </code>

兩個(gè)班級(jí)一個(gè)有學(xué)生一個(gè)沒(méi)有,一個(gè)學(xué)生有愛(ài)好有課程,一個(gè)什么也沒(méi)有. 我們先來(lái)看看如何存儲(chǔ).

存儲(chǔ)

依據(jù)上面定義的schema,可以先轉(zhuǎn)化為一個(gè)tree表示結(jié)構(gòu)

大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的

只有樹的根節(jié)點(diǎn)是需要實(shí)際存儲(chǔ)的數(shù)據(jù)節(jié)點(diǎn),其余的只是關(guān)系的一種維系。 下圖展示了其嵌套關(guān)系

大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的

實(shí)際存儲(chǔ)也是這樣,每一列存儲(chǔ)了所有的數(shù)據(jù)信息。是不是存儲(chǔ)很容易。

讀取

既然所有的同一類的數(shù)據(jù)存儲(chǔ)在一起,那么數(shù)據(jù)如何還原為原來(lái)的數(shù)據(jù)。這里引入了parquet的元數(shù)據(jù)信息,如何還原數(shù)據(jù)需要 Repetition Level以及Definition Level這兩個(gè)元數(shù)據(jù)信息。

首先我們需要知道哪些數(shù)據(jù)是一組的,其實(shí)還需要知道數(shù)據(jù)和數(shù)據(jù)之間的層級(jí)關(guān)系,OK。這兩個(gè)元數(shù)據(jù)信息可以幫我們搞的.(當(dāng)然也是存儲(chǔ)的時(shí)候?qū)懭氲脑獢?shù)據(jù)信息)

Repetition Level是記錄該列的值是在哪一個(gè)級(jí)別上重復(fù)的。

用剛才的兩個(gè)classroom信息來(lái)舉例: 對(duì)于兩個(gè)classroom的master來(lái)說(shuō),由于都是獨(dú)立的沒(méi)有直接關(guān)系,所以他們的Repetition level是0

Jack 0

BoBO 0

對(duì)于jack的學(xué)生tom,joy來(lái)說(shuō),tom是第一個(gè)學(xué)生,所以level是0,而joy平級(jí),所以是1.

<table> <tr><td>master</td><td>Repetition Level</td><tr> <tr><td>Jack</td><td>0</td><tr> <tr><td>BoBo</td><td>0</td><tr> </table>

<table> <tr><td>student.name</td><td>Repetition Level</td><tr> <tr><td>tom</td><td>0</td><tr> <tr><td>joy</td><td>1</td><tr> <tr><td>null</td><td>2</td><tr> </table>

<table> <tr><td>student.coursescore.score</td><td>Repetition Level</td><tr> <tr><td>null</td><td>0</td><tr> <tr><td>null</td><td>2</td><tr> <tr><td>100</td><td>1</td><tr> </table>

基于Repetition level是可以把原有的數(shù)據(jù)分好類,但是我們現(xiàn)在我們還不知道一條記錄到什么位置STOP,以及數(shù)據(jù)之前的關(guān)系,這個(gè)時(shí)候在引入Definition Level。

這個(gè)時(shí)候在引入Definition Level 是定義的深度,用來(lái)記錄該列是否是虛擬出來(lái)的。所以對(duì)于非NULL的記錄,是沒(méi)有意義的,其值必然為相同。同樣舉個(gè)例子。 比如對(duì)于master來(lái)說(shuō)深度就是0,因?yàn)槭莚equired。

<table> <tr><td>master</td><td>Definition Level</td><tr> <tr><td>Jack</td><td>0</td><tr> <tr><td>BoBo</td><td>0</td><tr> </table>

<table> <tr><td>student.name</td><td>Definition Level</td><tr> <tr><td>tom</td><td>1</td><tr> <tr><td>joy</td><td>2</td><tr> <tr><td>null</td><td>1</td><tr> <table> 通過(guò)Definition Level可以還原數(shù)據(jù)的嵌套關(guān)系。

關(guān)于大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

新聞標(biāo)題:大數(shù)據(jù)存儲(chǔ)格式parquet是怎樣的
瀏覽路徑:http://www.chinadenli.net/article36/pejcpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站外貿(mào)網(wǎng)站建設(shè)網(wǎng)站維護(hù)小程序開發(fā)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司