You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Druid中导入包含两位年份的日期数据?

处理方案

你可以通过以下三种方式解决该问题,按优先级从高到低排序:

  • 方式1:通过摄入规范的transformSpec自定义转换逻辑(最灵活)
    Druid的ingest spec原生支持transformSpec字段,可以在摄入阶段对原始字段做自定义处理,不需要依赖joda的自动pivot规则:
    1. 先将原始日期字段按字符串类型读取,不直接做时间解析
    2. 用表达式手动拆分日期的月、日、两位数年份,按你需要的pivot规则拼接出4位年份
    3. 把拼接完成的yyyy-MM-dd格式字符串转成Druid要求的时间类型
      举个固定pivot为2000年的配置示例:
"transformSpec": {
  "transforms": [
    {
      "type": "expression",
      "name": "__time",
      "expression": "timestamp_parse(concat('20', substring(original_dt, 7, 2), '-', substring(original_dt, 1, 2), '-', substring(original_dt, 4, 2)))"
    }
  ]
}

如果需要动态pivot,比如两位数年份小于70归为21世纪,大于等于70归为20世纪,表达式可以调整为:
timestamp_parse(concat(if(parse_long(substring(original_dt,7,2)) < 70, '20', '19'), substring(original_dt,7,2), '-', substring(original_dt,1,2), '-', substring(original_dt,4,2)))

  • 方式2:直接使用joda默认的MM/dd/yy格式(仅适合符合默认pivot规则的场景)
    joda的MM/dd/yy格式默认pivot year为1970,即两位数年份取值在7099时对应19701999年,取值在0069时对应20002069年。如果你的数据刚好符合该规则,不需要额外配置,直接在时间格式字段填MM/dd/yy即可。

  • 方式3:前置ETL预处理日期字段
    如果不想修改Druid的摄入配置,可以在数据导入Druid之前提前做清洗,把所有MM/dd/yy格式的日期转换成yyyy-MM-dd格式或者13位时间戳,再送入Druid摄入,这种方式兼容性最高,不需要适配Druid的内置规则。


内容的提问来源于stack exchange,提问作者Dan Prince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:57:01