Druid数据摄入时将长整型毫秒级时间戳转换为Timestamp类型
在Druid摄入阶段将毫秒级时间戳转换为Timestamp类型的解决方案
1. 核心转换方法:使用from_millis函数
Druid的数学表达式中内置了from_millis函数,可直接将长整型毫秒时间戳转换为Timestamp类型,是最高效的转换方式。
单字段转换示例
在摄入规范的transformSpec中配置转换规则:
"transformSpec": { "transforms": [ { "type": "expression", "name": "转换后的时间字段名", "expression": "from_millis(原始毫秒时间戳字段名)" } ] }
比如原始字段为event_time_ms,要生成event_time Timestamp字段:
"transformSpec": { "transforms": [ { "type": "expression", "name": "event_time", "expression": "from_millis(event_time_ms)" } ] }
2. 多时间戳字段批量转换
如果存在多个毫秒时间戳字段(如create_time_ms、update_time_ms),只需在transforms数组中添加多条规则:
"transformSpec": { "transforms": [ { "type": "expression", "name": "create_time", "expression": "from_millis(create_time_ms)" }, { "type": "expression", "name": "update_time", "expression": "from_millis(update_time_ms)" } ] }
3. 特殊场景处理
- 原始时间戳是字符串格式的数字:先转成长整型再转换
"expression": "from_millis(cast(字符串格式时间戳字段 as long))" - 需输出指定格式的时间字符串:可搭配
timestamp_format函数二次处理"expression": "timestamp_format(from_millis(event_time_ms), 'yyyy-MM-dd HH:mm:ss')"
4. 常见错误排查
- 确认函数拼写:Druid函数采用下划线命名,是
from_millis而非驼峰式fromMillis - 检查字段类型:原始字段必须是长整型或可转成长整型的字符串,否则会转换失败
- 规范结构位置:
transformSpec需放在dataSchema下,与parser、metricsSpec同级
完整摄入规范片段示例
"dataSchema": { "dataSource": "your_datasource", "parser": { "type": "json", "parseSpec": { "format": "json", "timestampSpec": { "column": "event_time", "format": "iso" }, "dimensionsSpec": { "dimensions": ["create_time", "update_time", "user_id"] } } }, "transformSpec": { "transforms": [ { "type": "expression", "name": "event_time", "expression": "from_millis(event_time_ms)" }, { "type": "expression", "name": "create_time", "expression": "from_millis(create_time_ms)" } ] }, "metricsSpec": [ {"type": "count", "name": "event_count"} ] }
内容的提问来源于stack exchange,提问作者Rahul Kumar Gond
相关产品推荐
相关产品推荐

