Presto采取三層表結(jié)構(gòu):
- catalog 對應某一類數(shù)據(jù)源,例如hive的數(shù)據(jù),或mysql的數(shù)據(jù)
- schema 對應mysql中的數(shù)據(jù)庫
- table 對應mysql中的表

image.png
Presto的存儲單元包括:
- Page: 多行數(shù)據(jù)的集合,包含多個列的數(shù)據(jù),內(nèi)部僅提供邏輯行,實際以列式存儲。
- Block:一列數(shù)據(jù),根據(jù)不同類型的數(shù)據(jù),通常采取不同的編碼方式,了解這些編碼方式,有助于自己的存儲系統(tǒng)對接presto。
Presto中不同類型的block:
- Array類型block,應用于固定寬度的類型,例如int,long,double。block由兩部分組成
boolean valueIsNull[]表示每一行是否有值。
T values[] 每一行的具體值。 - 可變寬度的block,應用于string類數(shù)據(jù),由三部分信息組成
Slice : 所有行的數(shù)據(jù)拼接起來的字符串。
int offsets[] :每一行數(shù)據(jù)的起始便宜位置。每一行的長度等于下一行的起始便宜減去當前行的起始便宜。
boolean valueIsNull[] 表示某一行是否有值。如果有某一行無值,那么這一行的便宜量等于上一行的偏移量。
固定寬度的string類型的block,所有行的數(shù)據(jù)拼接成一長串Slice,每一行的長度固定。
字典block:對于某些列,distinct值較少,適合使用字典保存。主要有兩部分組成:
字典,可以是任意一種類型的block(甚至可以嵌套一個字典block),block中的每一行按照順序排序編號。
int ids[] 表示每一行數(shù)據(jù)對應的value在字典中的編號。在查找時,首先找到某一行的id,然后到字典中獲取真實的值。