工作中常常会遇到同样的代码需要hive和presto的自如切换场景,常见的sql语句又没有很了熟于心时,一份常用函数参照表便显得无比重要,安排!!!
(如有疑问,烦请私信,向各位大佬学习 mo bai~)
本文我们从性能、字段类型转换、日期格式转换、解析url,这4个方面看他们的区别:
| hive | presto | ||
|---|---|---|---|
| 性能 | 本质区别 | 一个查询转化为多个MapReduce后,一个接一个执行。执行中间结果通过磁盘的读写进行同步。 | 通过一个定制的查询和执行引擎完成,所有查询在内存中完成(这是其性能很高的一个主要原因) |
| 运行速度 | 较慢,磁盘上读写 | 更快,但基于内存的多张表关联操作容易引起内存溢出错误 | |
| 适合场景 | 适合海量级别的数据的计算 | 合在单次扫描级别gb、tb级别的数据 | |
| 字段类型转换 | 转字符串 | cast(cols_1 as string) | cast(cols_1 as varchar) |
| 日期格式转化 | 10位时间戳转时间 | date_format(from_unixtime(ts),'yyyy-MM-dd HH:mm:ss') | date_format(from_unixtime(ts),'%Y-%m-%d %H:%i:%s') |
| 13位时间戳转时间 | date_format(from_unixtime( cast(ts/1000 as bigint), 'yyyy-MM-dd HH:mm:ss')) | date_format(from_unixtime( cast(ts/1000 as bigint)),'%Y-%m-%d %H:%i:%s') | |
| 字符串转日期格式 | date_format(time,'yyyy-MM-dd HH:mm:ss') | date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') | |
| 提取年、月、日、小时、秒 | ---年 | ---年 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%Y') ---月 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%m') ---日 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%d') ---时 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%H') ---分 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%i') ---秒 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s'),'%s') | |
| 时间加、时间减 | --- 日期加 select date_add('2021-08-16',74) select date_sub('2021-08-16',-74) | --- 分钟加 date_format(DATE_PARSE(time,'%Y-%m-%d %H:%i:%s') + interval '30' minute,'%H') | |
| --- 日期减 select date_sub('2021-10-29',74) select date_add('2021-10-29',-74) | --- 分钟减 date_format(current_date - interval '1' day,'%d') | ||
| 时间差 | --- 日期差 SELECT datediff('2021-10-29','2021-08-16') | --- 小时差‘hour’、日期差'day'、月份差‘month’、年差’year‘ date_diff('hour',DATE_PARSE(time1,'%Y-%m-%d %H:%i:%s'),DATE_PARSE(time2,'%Y-%m-%d %H:%i:%s')) | |
| 解析url | |||
| 解析参数 param | url_extract_parameter(uri,'param') | parse_url(uri,'QUERY','param') | |
| 解析路径 path | url_extract_path(uri) | parse_url(uri,'PATH') |



