Presto数据模型

2020-06-18  本文已影响0人  liuzx32

Presto采取三层表结构:

  1. catalog 对应某一类数据源,例如hive的数据,或mysql的数据
  2. schema 对应mysql中的数据库
  3. table 对应mysql中的表

image.png


Presto的存储单元包括:

  1. Page: 多行数据的集合,包含多个列的数据,内部仅提供逻辑行,实际以列式存储。
  2. Block:一列数据,根据不同类型的数据,通常采取不同的编码方式,了解这些编码方式,有助于自己的存储系统对接presto。

Presto中不同类型的block:

  1. Array类型block,应用于固定宽度的类型,例如int,long,double。block由两部分组成
    boolean valueIsNull[]表示每一行是否有值。
    T values[] 每一行的具体值。
  2. 可变宽度的block,应用于string类数据,由三部分信息组成

Slice : 所有行的数据拼接起来的字符串。
int offsets[] :每一行数据的起始便宜位置。每一行的长度等于下一行的起始便宜减去当前行的起始便宜。
boolean valueIsNull[] 表示某一行是否有值。如果有某一行无值,那么这一行的便宜量等于上一行的偏移量。

  1. 固定宽度的string类型的block,所有行的数据拼接成一长串Slice,每一行的长度固定。

  2. 字典block:对于某些列,distinct值较少,适合使用字典保存。主要有两部分组成:

字典,可以是任意一种类型的block(甚至可以嵌套一个字典block),block中的每一行按照顺序排序编号。
int ids[] 表示每一行数据对应的value在字典中的编号。在查找时,首先找到某一行的id,然后到字典中获取真实的值。

上一篇下一篇

猜你喜欢

热点阅读