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

能否以时间为维度创建Druid Lookup?无需新增小时维度可行吗?

无需新增小时维度也能实现基于时间的Lookup

当然可以不用在数据源里新增小时维度!你完全可以通过内置的日期时间表达式,直接从现有时间字段(比如时间戳、datetime类型字段)中提取或计算出一天中的时间区间/小时值,把它作为Lookup的输入维度。

给你举两个实用的例子:

1. 从时间戳提取小时并映射为时间段

假设你的数据源里有一个event_timestamp字段(格式为标准时间戳或datetime),可以直接用函数提取小时,再映射成你需要的时段名称:

{
  "type":"lookup",
  "dimension": "HOUR(event_timestamp)", // 直接通过表达式提取小时值,无需新增维度
  "outputName":"time_of_day",
  "outputType": "STRING",
  "retainMissingValue":true,
  "lookup":{
    "type": "map",
    "map": {
      "0": "凌晨",
      "1": "凌晨",
      "2": "凌晨",
      "3": "凌晨",
      "4": "凌晨",
      "5": "凌晨",
      "6": "凌晨",
      "7": "上午",
      "8": "上午",
      // ... 依次补全9-12为上午,13-18为下午,19-23为晚上
      "23": "晚上"
    },
    "isOneToOne":true
  }
}

如果想按区间批量映射(比如0-6点统一为凌晨),可以先对小时做分组计算,再映射:

{
  "type":"lookup",
  "dimension": "CASE WHEN HOUR(event_timestamp) BETWEEN 0 AND 6 THEN '0-6' WHEN HOUR(event_timestamp) BETWEEN 7 AND 12 THEN '7-12' WHEN HOUR(event_timestamp) BETWEEN 13 AND 18 THEN '13-18' ELSE '19-23' END",
  "outputName":"time_of_day",
  "outputType": "STRING",
  "retainMissingValue":true,
  "lookup":{
    "type": "map",
    "map": {
      "0-6": "凌晨",
      "7-12": "上午",
      "13-18": "下午",
      "19-23": "晚上"
    },
    "isOneToOne":false // 多对一映射,设为false
  }
}

2. 基于现有小时数值字段的映射

如果你的数据源里已经有了event_hour(0-23的数值字段),那直接用这个字段作为Lookup的维度就行,甚至不需要额外计算:

{
  "type":"lookup",
  "dimension": "event_hour",
  "outputName":"time_slot",
  "outputType": "STRING",
  "retainMissingValue":true,
  "lookup":{
    "type": "map",
    "map": {
      "0-6": "凌晨",
      "7-12": "上午",
      "13-18": "下午",
      "19-23": "晚上"
    },
    "isOneToOne":false
  }
}

核心逻辑就是:借助平台的日期时间处理函数,从已有时间字段中动态生成你需要的时间维度值,完全不需要修改数据源去新增字段。这样既灵活又能保持数据源的简洁性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:40