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

如何高效地以毫秒精度查询Apache Druid的__time字段?

问题解答

1. 毫秒精度过滤__time列且不牺牲查询效率

针对字符串时间解析被截断到秒级导致过滤不准确的问题,有两种高效解决方案:

  • 使用ANSI TIMESTAMP字面量
    直接用TIMESTAMP '时间字符串'格式替代纯字符串字面量,Druid会保留毫秒精度解析时间,同时能直接利用__time字段的索引,不会损失查询效率:

    SELECT *
    FROM my_table
    WHERE __time >= TIMESTAMP '2023-10-19T09:29:58.613Z'
      AND __time <= TIMESTAMP '2023-10-19T09:30:13.613Z'
      AND my_string_field = 'value'
    
  • 基于毫秒数值对比
    将目标时间转换为毫秒级时间戳(比如2023-10-19T09:29:58.613Z对应1697700598613),通过TIMESTAMP_TO_MILLIS(__time)与数值对比。Druid对这类基于索引字段的表达式有优化,不会触发全表扫描:

    SELECT *
    FROM my_table
    WHERE TIMESTAMP_TO_MILLIS(__time) >= 1697700598613
      AND TIMESTAMP_TO_MILLIS(__time) <= 1697700613613
      AND my_string_field = 'value'
    

2. MILLIS_TO_TIMESTAMP的异常行为

你遇到的MILLIS_TO_TIMESTAMP(1697794200930)返回秒级截断结果的问题,是Druid的已知bug,该问题在25.0.0版本中已被修复。升级到该版本及以上后,直接传入毫秒数值调用MILLIS_TO_TIMESTAMP会正确保留毫秒精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:34