如何更新Apache Druid现有数据?新增字段填默认值返回null如何解决
问题根因
- 摄入时配置的维度字段默认值仅对配置生效后新摄入的数据生效,已经持久化存储在Segment中的历史数据不会被回溯修改,所以旧数据对应的该字段默认显示为null
- 如果新摄入的数据也为null,大概率是配置语法错误:
- 用
transform转换规则设置字段值时,表达式不需要写字段名赋值,直接返回值即可:比如给字符串类型的new_col设置默认值unknown,正确写法是"expression": "'unknown'",错误写法为"expression": "new_col = 'unknown'" - 需确认默认值类型和字段定义的类型匹配,比如LONG类型字段不要传入字符串格式的默认值,否则会解析失败显示为null
- 用
修复方案
- 若接受历史数据该字段为null,仅需新数据自动填充默认值:检查修正默认值配置语法即可,不需要额外操作
- 若需要全量历史数据都填充默认值:仅靠摄入时的默认值配置无法实现,需要对现有存量Segment执行重写(Reindex)任务:
- 重写任务的
transformSpec中添加新字段的转换规则,直接返回你要设置的默认值 - 提交重写任务后,Druid会重新生成所有存量Segment,把新字段的默认值写入对应位置
- 重写完成后,后续新摄入的数据保留默认值配置即可正常填充
- 重写任务的
内容的提问来源于stack exchange,提问作者EgorEna
相关产品推荐
相关产品推荐

