查询hive catalog表 bigint类型在where条件中无法进行判断

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】bigint类型时间戳在where条件中无法进行有效判断
【背景】根据时间范围筛选符合该时间段的订单数据
【业务影响】如果用户只存在一条记录,使用该判断无法获取结果。SQL执行结果0条
【是否存算分离】
【StarRocks版本】3.2.8
【集群规模】3FE + 3BE
【机器信息】CPU虚拟核/内存/网卡,32C/128G
【联系方式】StarRocks社区群5-月升;个人邮箱:18406505214@163.com
【附件】
执行SQL:
SELECT
f_uid
,cast(f_trade_time/1000000 AS BIGINT)
,from_unixtime(cast(f_trade_time/1000000/1000 AS BIGINT), ‘yyyy-MM-dd HH:mm:ss’) AS f_trade_at
FROM hive_catalog.database.table
WHERE dt = ‘2024-08-26’
– AND cast(f_trade_time/1000000 AS BIGINT) >= 1724601644598
– AND cast(f_trade_time/1000000 AS BIGINT) <= 1724601644598
and from_unixtime(cast(f_trade_time/1000000/1000 AS BIGINT), ‘yyyy-MM-dd HH:mm:ss’) >= ‘2024-08-26 00:00:44’
and from_unixtime(cast(f_trade_time/1000000/1000 AS BIGINT), ‘yyyy-MM-dd HH:mm:ss’) <= ‘2024-08-26 00:00:44’
and f_uid = XXXXXXX
limit 10;

使用bigint时间戳,查询无符合条件的数据

使用时间,则存在符合条件的结果

发一下两种情况下的 explain costs +sql 执行计划

bigint时间戳查询.sql (4.1 KB) 时间查询.sql (4.3 KB)

f_trade_time 字段是什么数据类型的

19位纳秒级别的bigint的数值


这里在做比较计算的时候 是转成 double 比较的,double 会有精度问题,执行计划中可以看到f_trade_time 是跟 1724601644598000130 进行比较的,可以用 decimal 指定精度