segment part-2

This commit is contained in:
liujianhuan 2020-04-02 17:40:03 +08:00
parent 3eff1a45df
commit 999018a093
1 changed files with 43 additions and 1 deletions

View File

@ -66,4 +66,46 @@ dimension列是不同的因为它们支持过滤和聚合操作所以每
Multi-value column has multiple non-zero entries
```
请注意列数据和Ke$ha位图中第二行的更改。如果一行中的某一列有多个值则其在“列数据”中的条目是一个数组。此外在“列数据”中有n个值的行在位图中将有n个非零值项。
请注意列数据和Ke$ha位图中第二行的更改。如果一行中的某一列有多个值则其在“列数据”中的条目是一个数组。此外在“列数据”中有n个值的行在位图中将有n个非零值项。
### SQL兼容的空值处理
默认情况下Druid字符串维度列可以使用 `""` 或者 `null` ,数值列和指标列则不能表示为 `null`,而是将 `null` 强制为 `0`。但是Druid还提供了一个与SQL兼容的空值处理模式必须在系统级别通过 `Druid.generic.useDefaultValueForNull` 启用, 当设置为 `false`此设置将允许Druid在接收数据时创建的段中字符串列区分 `""``null` ,数值列区分 `null``0`
在这种模式下,字符串维度列不包含额外的列结构,只是为 `null` 保留额外的字典条目。但是,数值列将与一个附加位图一起存储在段中,该位图标识哪些行是 `null` 值。除了略微增加段大小之外,由于需要检查 `null` 的位图SQL兼容的空值处理在查询时也会导致性能损失此性能开销仅对实际包含`null`列的场景中存在。
### 命名规则
段标识符通常使用数据源时间区间的开始时间ISO 8601格式时间区间的结束时间ISO 8601格式和版本来构造。如果数据被额外的分片后超出了时间范围则段标识符还将包含分区号。
一个示例段标识符可以是:
`数据源名称_开始时间_结束时间_版本号_分区号`
### 段的组成
在底层,一个段由以下几个文件组成:
* `version.bin`
4个字节以整数表示当前段版本。 例如对于v9段版本为0x0、0x0、0x0、0x9
* `meta.smoosh`
一个包含其他 `smoosh` 文件内容的元数据文件
* `XXXXX.smoosh`
这些文件中有一些是串联的二进制数据
`smoosh` 文件代表 "smooshed" 在一起的多个文件以减少必须打开用来容纳数据的文件描述符的数量它们是最大为2GB的文件以匹配Java中内存映射的ByteBuffer的限制。`smoosh` 文件为数据中的每个列提供单独的文件,并在 `index.drd` 文件提供有关该段的额外元数据。
还有一个称为 `__time` 的特殊列,它表示该段的时间列。希望随着代码的发展,这种特殊性将越来越少,但就目前而言,它就像我妈妈一直告诉我的那样特殊。
在代码库中,段具有内部格式版本。当前的句段格式版本为 `v9`
### 列的格式
### 切分数据以创建段
#### 数据分片
### Schema更改
### 替换段
### 段之间的不同schemas