之前从性能、字段类型转换、日期格式转换、解析url这四个方面做了对比:
hive和presto的常规操作-sql语句(一)_半边诗人的博客-CSDN博客工作中常常会遇到同样的代码需要hive和presto的自如切换场景,常见的sql语句又没有很了熟于心时,一份常用函数参照表便显得无比重要,安排!!!(如有疑问,烦请私信,向各位大佬学习 mo bai~)本文我们从性能、字段类型转换、日期格式转换、解析url,这4个方面看他们的区别:hivepresto性能本质区别一个查询转化为多个MapReduce后,一个接一个执行。执行中间结果通过磁盘的读写进行同步。通过一个定制的查https://blog.csdn.net/weixin_44411175/article/details/121021848
实际使用中还有很多不足,仍在不断补充中~~~
| hive | presto | |
|---|---|---|
| 日期相关 | weekofyear(cast( from_unixtime(cast( start_ts as bigint),'yyyy-MM-dd') as date)) | -- 选取一个周一,与当前日期的天数差,除以7,向上取整 ceiling(date_diff('day',cast('2020-12-28' as date),cast(date_time as date))/7) week ---直接使用presto内置函数 week(cast(date_time as date)) week |
| 解析json | get_json_object(json,'$.value') | json_extract_scalar(json,'$.action_type') json_extract(json,'$.value') |
| 列转行 | lateral view explode (split(vid_s,'##')) vid_1 as vid 其中:split(vid_s,'##')是需要转置的列 vid_1是需要转置的列的新命名 vid 是转置后的新列 | cross join unnest (split(vid_s,'##')) as t (vid) 其中:(split(vid_s,'##')) 是需要转置的列 (vid) 是转置后的新列 |
| 长度 | size() | cardinality() |
| 字符串拼接 | --自由拼接 concat(string1,'-',string2) -- 按分隔符拼接 concat_ws('-',string1,string2) | -- 自由拼接 concat(string1,'-',string) |



