如何在Druid中为INT和LONG类型字段导入null值
Druid导入JSON时保留INT/LONG类型的Null值配置方法
Druid默认会把数字类型的null转成0,要保留原始null值,得从解析配置和字段定义两处入手,具体步骤如下:
1. 开启解析器的Null值保留开关
不管用JSON还是其他格式的解析器,必须在parseSpec里设置keepNullColumns: true,确保Druid解析时不丢弃null字段。示例JSON解析配置片段:
"parseSpec": { "format": "json", "keepNullColumns": true, "timestampSpec": { "column": "event_time", "format": "yyyy-MM-dd HH:mm:ss" }, "dimensionsSpec": { "dimensions": ["user_id", "order_id"] } }
2. 字段类型与聚合器的正确配置
- 维度字段:如果是INT/LONG类型的维度,直接定义类型为
int或long即可,开启keepNullColumns后,null值会被正常存储,不会转为0。 - 指标字段:默认的
longSum/intSum这类聚合器会把null当0处理,要保留null的话,必须使用nullableLong或nullableInt类型的聚合器。示例metrics配置:
"metricsSpec": [ { "type": "nullableLong", "name": "user_id", "fieldName": "user_id" }, { "type": "nullableInt", "name": "product_num", "fieldName": "product_num" } ]
3. 验证配置是否生效
导入完成后,用Druid SQL查询验证:
SELECT user_id, product_num FROM your_datasource WHERE user_id IS NULL
如果能返回包含null值的记录,说明配置生效。
注意事项
- 低版本Druid(0.20之前)对nullable类型的支持有限,建议升级到0.20+版本以获得更好的兼容性。
- 部分聚合器(比如
count)仍会统计null值,需根据业务需求选择合适的聚合类型。
内容的提问来源于stack exchange,提问作者Rahul Kumar Gond
相关产品推荐
相关产品推荐

