SQL学习笔记(十一)Hive SQL和Presto SQL对比

时间转换

注意此处的"timestamp"指'2020-07-20 10:58:59'这种格式,timestamp才是指'1595932031'这种格式,日期格式指2021-08-28

获取当前时间

Hive Presto
sysdate() localtimestamp

"timestamp"转日期

Hive Presto
to_date('2021-08-28 14:00:00')/get_date('2021-08-28 14:00:00') format_datetime(cast('2015-11-11 10:00:00' as timestamp), 'yyyy-MM-dd')
  • unix_timestamp('2021-08-28 10:00:00')的结果是1630116000;
  • cast('2021-08-28 10:00:00' as timestamp)的结果是2021-08-28 10:00:00.0;大家timestamp的格式不一样

以上转换后的结果为:'2021-08-28'

timestamp转"timestamp"

Hive Presto
from_unixtime(1630130400,'yyyy-MM-dd HH:mm:ss') from_unixtime(1630130400,'yyyy-MM-dd HH:mm:ss')
  • Hive的from_unixtime()如果不加'yyyy-MM-dd HH:mm:ss'同样可以返回到秒的结果;如果只需要格式化到小时、分钟等的话只给出到对应位置的格式化参数即可
  • Presto的from_unixtime()不需要使用格式化参数来指定格式化的位数而且其中的类型必须是数值型,如果不是需要先使用cast转为数值型才可,或者会报错,默认返回到毫秒经度。如果需要指定返回的精度配合format_datetime使用即可。也就是Presto必须依靠format_datetime来返回指定精度,这一点Hive不需要
select format_datetime(from_unixtime(1630130400),'yyyy-MM-dd HH:mm:ss')

参考

上一篇:大数据面试通关手册 | Presto原理&调优&面试&实战


下一篇:UVA 11774 - Doom's Day(规律)