4.2.4 聚合模型的导入更新¶
这篇文档主要介绍 Doris 聚合模型上基于导入的更新。
1 所有列更新¶
使用 Doris 支持的 Stream Load , Broker Load , Routine Load , Insert Into 等导入方式,往聚合模型( Agg 模型)中进行数据导入时,都会将新的值与旧的聚合值,根据列的聚合函数产出新的聚合值,这个值可能是插入时产出,也可能是异步 Compaction 时产出,但是用户查询时,都会得到一样的返回值。
2 聚合模型的部分列更新¶
Aggregate 表主要在预聚合场景使用而非数据更新的场景使用,但也可以通过将聚合函数设置为 REPLACE_IF_NOT_NULL 来实现部分列更新效果。
2.1 建表¶
将需要进行列更新的字段对应的聚合函数设置为 REPLACE_IF_NOT_NULL
| SQL | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
2.2 数据写入¶
无论是 Stream Load 、 Broker Load 、 Routine Load 还是 INSERT INTO ,直接写入要更新的字段的数据即可
示例
与前面例子相同,对应的 Stream Load 命令为(不需要额外的 header ):
| Bash | |
|---|---|
1 2 3 4 5 | |
对应的 INSERT INTO 语句为(不需要额外设置 session variable ):
| SQL | |
|---|---|
1 | |
3 部分列更新使用注意¶
Aggregate Key 模型在写入过程中不做任何额外处理,所以写入性能不受影响,与普通的数据导入相同。但是在查询时进行聚合的代价较大,典型的聚合查询性能相比 Unique Key 模型的 Merge-on-Write 实现会有 5-10 倍的下降。
用户无法通过将某个字段由非 NULL 设置为 NULL ,写入的 NULL 值在 REPLACE_IF_NOT_NULL 聚合函数的处理中会自动忽略。