# 4. Nested Columnar Storage


## 4.1 Repetition and Definition Levels
- 单独的 values 无法反映 record 的结构
- 比如给出两个 values,无法分辨是两个不同的 record,还是相同 record 的两个重复 values
### Repetition levels
- 路径上有多少个 field 是 repeated 的(比如为 2),则 repetition level 的范围为 $[0, 2]$
- 0 表示是 new record 的起始
- r1 的第二个 Name 中不包含 Code values,但需要添加 NULL,避免接下来的 code (en-gb) 被认为是 第二个 Name 的
### Definition levels
- 路径上可能有多个 field 是可以不定义的即 **undefined**(声明为 optional 或者 repeated)
- 如 Name.Language.Country 三个级别都可以为 NULL,则 definition level 最大为 3
- 问题:当发现一个 NULL 值时,如何确定是哪个级别导致的
- 为 value 存储 definition level:路径上不为空的 field 个数(只统计 optional 或者 repeated fields)
- 非 NULL values 的 d 等于路径上的 max definition level
- 即 d 小于 max definition level 的都为 NULL 值
### Encoding
- values 如果永远是 defined 的,则可以不存储 definition level
- 类似地,repetition levels 也可以不存储,例如 definition level 0 蕴含了 repetition level 为 0
- 只使用必要的 bits,例如 maximum definition level 是 3, 则每个 definition level 使用 2 个 bits 表示
## 4.2 Splitting Records into Columns
- repetition and definition levels may need to be computed even if field values are missing
- 用 NULL 占位