Presto采取三层表结构:
- catalog 对应某一类数据源,例如hive的数据,或mysql的数据
- schema 对应mysql中的数据库
- table 对应mysql中的表
Presto的存储单元包括:
- Page: 多行数据的集合,包含多个列的数据,内部仅提供逻辑行,实际以列式存储。
- Block:一列数据,根据不同类型的数据,通常采取不同的编码方式,了解这些编码方式,有助于自己的存储系统对接presto。
Presto中不同类型的block:
- Array类型block,应用于固定宽度的类型,例如int,long,double。block由两部分组成
boolean valueIsNull[]表示每一行是否有值。
T values[] 每一行的具体值。 - 可变宽度的block,应用于string类数据,由三部分信息组成
Slice : 所有行的数据拼接起来的字符串。
int offsets[] :每一行数据的起始便宜位置。每一行的长度等于下一行的起始便宜减去当前行的起始便宜。
boolean valueIsNull[] 表示某一行是否有值。如果有某一行无值,那么这一行的便宜量等于上一行的偏移量。
-
固定宽度的string类型的block,所有行的数据拼接成一长串Slice,每一行的长度固定。
-
字典block:对于某些列,distinct值较少,适合使用字典保存。主要有两部分组成:
字典,可以是任意一种类型的block(甚至可以嵌套一个字典block),block中的每一行按照顺序排序编号。
int ids[] 表示每一行数据对应的value在字典中的编号。在查找时,首先找到某一行的id,然后到字典中获取真实的值。
网友评论