分享

Hive与Presto的区别

问题导读

1.Hive与presto主要区别有哪些?
2.语法差异有哪些?
3.规则差异有哪些?

1.Hive与Presto语法差异
1.hive
必须用union all 而Presto必须用union

2.时间戳转日期:Presto:
写法一:format_datetime(cast(flag_time as timestamp),'yyyyMMdd')
写法二:date_format(borrow_time,'%Y%m%d')
等于某个时间:format_datetime(cast(flag_time as timestamp),'yyyyMMdd')=’20171231’
在某段时期内:date_format(borrow_time,'%Y%m%d') between '20171226' and '20171231'
Hive:
to_date(flag_time)

3、时间偏移
Presto:
带杠日期 log_date=cast ((date '2017-12-31' - interval '1' day) as varchar)
不带杠日期 format_datetime(parse_datetime(cast(( date '2017-12-30' + interval '1' day) as varchar),'yyyy-MM-dd'),'yyyyMMdd')
当前日期的前30天
format_datetime(parse_datetime(cast((current_date - interval '30' day) as varchar),'yyyy-MM-dd'),'yyyyMMdd')
Hive:
不带杠日期get_dt_date(‘20171231’,-1)
带杠日期 get_date(‘2017-12-31’,-1)

4、运算符
Presto中运算符两边的数据类型必须一致,否则就会报错

这种情况常见于两表关联中的on语句如:a.user_id=b.user_id
其中a.user_id为bigint,而b.user_id为varchar
解决办法:
1.on cast(a.user_id as bigint)=cast(b.user_id as bigint)
2. on cast(a.user_id as varchar)=b.user_id
而Hive不存在这种问题

5. 不支持隐式转换,要求什么格式的参数,就一定得是什么格式的参数

1.png
2.png


2. 规则差异
1、左连接、全连接
Presto中多字段关联的时候,只把所有表格中符合条件的数据取出来
单字段关联跟Hive规则一致
Hive中不管多少字段关联,左连接最终取的数据是最左边的表,全连接则是所有表中的数据

2、union all
Presto用union all的时候字段可能存在不一致的情况
Hive用union all的时候必须严格保持字段一致(包括顺序),否则会抛出nullpointerexception null异常

3、建中间表
Presto执行完drop table语句 表以后该表就实时被删除了
Hive执行完 drop table语句,但是后面创建table的语句没执行完,该表仍然在库里




获取更多资源:
领取100本书+1T资源
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26480

大数据5个项目视频
http://www.aboutyun.com/forum.php?mod=viewthread&tid=25235

名企资源、名企面试题、最新BAT面试题、专题面试题等资源汇总
https://www.aboutyun.com/forum.php?mod=viewthread&tid=27732



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条