如何(高效)查询 Apache Druid 的 __time 毫秒精度?

问题描述 投票:0回答:1

这是我在 Druid 的 Web GUI 中运行的

Apache Druid
查询:

SELECT *
FROM my_table
WHERE __time >= '2023-10-19T09:29:58.613Z'
and __time <= '2023-10-19T09:30:13.613Z'
and my_string_field = 'value'

它返回一条记录,其中

__time
字段中的值是 2023-10-19T09:29:58.040Z,小于我的查询中设置的下限。原因似乎是字符串在解析为
Druid
的时间格式时会被截断为秒。我认为是这样,因为查询
SELECT TIME_PARSE('2023-10-19T09:29:58.613Z')
结果是
2023-10-19T09:29:58.000Z
。那么如何精确过滤列
__time
达到毫秒精度(而不牺牲索引字段搜索的效率)?

我不明白的另一件事是,如果我在查询中添加一个字段

TIMESTAMP_TO_MILLIS(__time) as tms
,它会导致
1697794200930
__time
,即
2023-10-20T09:30:00.930Z
,如果我添加
MILLIS_TO_TIMESTAMP(TIMESTAMP_TO_MILLIS(__time)) as mls
,我会返回
2023-10-20T09:30:00.930Z
,但是当我添加
MILLIS_TO_TIMESTAMP(1697794200930) as mls_2
时,我得到
2023-10-20T09:30:00.000Z
而不是
2023-10-20T09:30:00.930Z
(它被截断为秒)。

更新:

我发现

MILLIS_TO_TIMESTAMP
的行为是一个bug,并且已在版本
25.0.0
中修复。

sql indexing time bigdata druid
1个回答
0
投票

原来这是一个错误,并且已修复。我在本地安装了版本

27.0.0
,并且
TIME_PARSE
现在返回毫秒,并且过滤似乎也考虑了毫秒。

© www.soinside.com 2019 - 2024. All rights reserved.