Greenplum的DATE_PART时间差计算语句如何转换为HiveSQL写法
Greenplum 转 HiveSQL 等价写法说明
核心转换结果
原Greenplum语句逻辑为计算两个时间字段的差值总分钟数,等价HiveSQL写法如下:
-- 若ck_1、ck_2为纯时间字符串(格式如HH:mm:ss) floor((unix_timestamp(ck_2, 'HH:mm:ss') - unix_timestamp(ck_1, 'HH:mm:ss')) / 60) AS gap_1_2
若ck_1和ck_2本身是带日期的timestamp类型/标准日期时间字符串(格式如yyyy-MM-dd HH:mm:ss),可简化为:
floor((unix_timestamp(ck_2) - unix_timestamp(ck_1)) / 60) AS gap_1_2
逻辑说明
- 原Greenplum语句
DATE_PART('minute',ck_2::time - ck_1::time)的作用:将两个字段强制转换为时间类型,计算时间差后提取差值对应的总分钟数 - Hive中没有直接提取时间差分钟数的内置函数,通过
unix_timestamp将时间转换为秒级时间戳,两字段秒数差值除以60后向下取整,和原语句计算结果完全一致
边缘场景兼容
如果存在ck_2时间早于ck_1的场景,计算结果会返回负数,和原Greenplum语句默认行为一致;若需要返回非负结果,可在外层包裹abs()函数:
abs(floor((unix_timestamp(ck_2, 'HH:mm:ss') - unix_timestamp(ck_1, 'HH:mm:ss')) / 60)) AS gap_1_2
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

