Presto數(shù)據(jù)模型

Presto采取三層表結(jié)構(gòu):

  1. catalog 對應某一類數(shù)據(jù)源,例如hive的數(shù)據(jù),或mysql的數(shù)據(jù)
  2. schema 對應mysql中的數(shù)據(jù)庫
  3. table 對應mysql中的表

image.png


Presto的存儲單元包括:

  1. Page: 多行數(shù)據(jù)的集合,包含多個列的數(shù)據(jù),內(nèi)部僅提供邏輯行,實際以列式存儲。
  2. Block:一列數(shù)據(jù),根據(jù)不同類型的數(shù)據(jù),通常采取不同的編碼方式,了解這些編碼方式,有助于自己的存儲系統(tǒng)對接presto。

Presto中不同類型的block:

  1. Array類型block,應用于固定寬度的類型,例如int,long,double。block由兩部分組成
    boolean valueIsNull[]表示每一行是否有值。
    T values[] 每一行的具體值。
  2. 可變寬度的block,應用于string類數(shù)據(jù),由三部分信息組成

Slice : 所有行的數(shù)據(jù)拼接起來的字符串。
int offsets[] :每一行數(shù)據(jù)的起始便宜位置。每一行的長度等于下一行的起始便宜減去當前行的起始便宜。
boolean valueIsNull[] 表示某一行是否有值。如果有某一行無值,那么這一行的便宜量等于上一行的偏移量。

  1. 固定寬度的string類型的block,所有行的數(shù)據(jù)拼接成一長串Slice,每一行的長度固定。

  2. 字典block:對于某些列,distinct值較少,適合使用字典保存。主要有兩部分組成:

字典,可以是任意一種類型的block(甚至可以嵌套一個字典block),block中的每一行按照順序排序編號。
int ids[] 表示每一行數(shù)據(jù)對應的value在字典中的編號。在查找時,首先找到某一行的id,然后到字典中獲取真實的值。

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

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