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
聚合函数的处理中会自动忽略。