前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hivesql和prestosql对比

hivesql和prestosql对比

作者头像
用户1217611
发布2023-03-06 17:00:42
7160
发布2023-03-06 17:00:42
举报
文章被收录于专栏:文渊之博文渊之博

背景

  最近很多时候需要将hivesql转化为prestosql ,这里面有很多不能直接复用需要调整func甚至改用其他逻辑。

为了后续方便查询,后面将总结以下经常用到的sql记录下来方便后续使用。

  1. 爆炸函数实现
代码语言:javascript
复制
hive:SELECT student,score FROM tests LATERAL VIEW explode(scores)t AS score
presto:SELECT student,score FROM tests cross join unnest(scores)ast (score)
  1. map查询
代码语言:javascript
复制
presto:element_at(a,'aa')
hive: a['aa']
  1. json解析
代码语言:javascript
复制
presto: json_extract_scalar(param, '$.tab')
hive: get_json_object(param, '$.tab')
  1. grouping sets
代码语言:javascript
复制
hive:group by date,name grouping sets((date),(date,name),(name))
presto :group by grouping sets((date),(date,name),(name))
  1. 行转列
代码语言:javascript
复制
--presto
select array_join(array_distinct(array_agg(name)),',')
--hive
select concat_ws(',',collect_set(cast(name as string)))
  1. 时间差计算
代码语言:javascript
复制
Presto:select date_diff('day', cast('2020-07-23 15:01:13' as timestamp), cast('2020-07-24 11:42:58' as timestamp))

Hive:select datediff('2020-07-24 11:42:58','2020-07-23 15:01:13');
  1. 同比环比
代码语言:javascript
复制
--presto 同环比时间获取公式

SELECT

  CAST('2020-12-12' AS TIMESTAMP) AS "当天",

  date_add('day', - 1, CAST('2020-12-12' AS TIMESTAMP)) AS "昨天",

  date_trunc('month', CAST('2020-12-12' AS TIMESTAMP)) AS "当月第一天",

  date_add('month', - 12, date_trunc('month', CAST('2020-12-12' AS TIMESTAMP))) AS "去年当月第一天",
  date_add('month', - 1, date_trunc('month', CAST('2020-12-12' AS TIMESTAMP))) AS "上第一天",
  
  date_add('month', - 12, CAST('2020-12-12' AS TIMESTAMP)) AS "去年当月当天",
  date_add('day',(DAY(CAST('2020-12-12' AS TIMESTAMP))-1),date_add('month', - 1, date_trunc('month', CAST('2020-12-12' AS TIMESTAMP)))) as "上月第一天至环比相同天数"
--hive
SELECT

  '2020-12-12'  AS "当天",

  date_add('2020-12-12' , - 1) AS "昨天",

  TRUNC('2020-12-12', 'MM')  AS "当月第一天",

  add_months(TRUNC('2020-12-12', 'MM'), - 12) AS "去年当月第一天",

  add_months(TRUNC('2020-12-12', 'MM'), - 1) AS "上月第一天",

  add_months('2020-12-12', - 12)  AS "去年当月当天",

  date_add(add_months(TRUNC('2020-12-12', 'MM'), - 1),day('2020-12-12')-1)  as "上月第一天至环比相同天数"

待续...

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档