hive和presto的SQL对比

Presto是一个设计用于快速分析大规模数据的开源SQL查询引擎,它具有内存管理优化、查询优化和并发处理能力。与Hive相比,Presto的语法有所不同,并且在某些场景下执行速度更快,尤其是在数据量适中和查询逻辑简单的条件下。其架构简单,避免了内存溢出问题,而Spark由于有更多的中间层,可能在特定情况下执行效率较低。
摘要由CSDN通过智能技术生成

目录

概念

优势

hive和presto的语法对比

presto比spark执行更快的原因


概念

Presto(或PrestoDB)

是一个开放源代码的分布式SQL查询引擎,它是从头开始设计的,可以针对任何大小的数据进行快速分析查询。

Presto是基于内存运算,减少没必要的硬盘IO

Master-Slave的架构

presto自带的监控可以查看执行的完整sql

优势

  1. 内存管理:Presto使用内存管理技术来减少GC的开销,从而提高性能。Presto使用的内存管理技术是基于内存池的,可以更好地管理内存的分配和释放。

  2. 查询优化:Presto使用了一系列的查询优化技术,如谓词下推、列裁剪、分区裁剪等,可以减少数据的传输和处理,从而提高查询性能。

  3. 并发处理:Presto使用了多线程和协程技术来实现并发处理,可以更好地利用CPU资源,提高查询性能。

  4. 数据源支持:Presto支持多种数据源,包括Hadoop、Cassandra、MySQL、PostgreSQL等,可以更好地满足不同的数据处理需求。

  5. 社区支持:Presto有一个活跃的社区,不断地更新和维护代码,修复bug和增加新功能,保证了Presto的稳定性和可靠性。

总的来说,Presto在内存管理、查询优化、并发处理、数据源支持和社区支持等方面都有优势

hive和presto的语法对比

--Hive
select !(rank2_home_days1 >= 2 and rank2_home_num1 >= 3));
--Presto
select not(rank2_home_days1 >= 2 and rank2_home_num1 >= 3));
​
--Hive
select get_json_object(json, '$.book');
--Presto
select json_extract_scalar(json, '$.book');
​
--hive
select date_add('2020-07-24 11:42:58', 1)
--Presto
select date_add('day', 1, cast('2020-07-24 11:42:58' as timestamp))   date_sub用不了
​
--时间处理
--hive
select to_date(from_unixtime(UNIX_TIMESTAMP('20200110','yyyyMMdd')));
--presto
select (format_datetime(date_parse('20200110','%Y%m%d'),'yyyy-MM-dd') ;
        
--获取数组长度
--hive size函数
select size(split(user_ids,',')) from test_tb
-- presto
select cardinality(split(user_ids,',')) from test_tb
​
--Hive
select student, score from tests lateral view explode(split(scores, ',')) t as score;
--Presto
select student, score from tests cross json unnest(split(scores, ',') as t (score);
​
--hive
select to_date(from_unixtime(UNIX_TIMESTAMP('20200110','yyyyMMdd')));
--presto
select (format_datetime(date_parse('20200110','%Y%m%d'),'yyyy-MM-dd') ;
​
--Presto不支持String数据类型
select cast(1 as varchar)
​
--Presto不支持’%’运算符
select mod(1, 2)---select 1 % 2
​
--Presto不支持regexp、rlike语法
select regexp_like(map['field'], '.*')
        --select map['field'] rlike '.*'
        --select map['field'] regexp '.*'
​
--数组定义方式
select array [1, 2]
​
--datediff:
--hive
select datediff('2018-09-07','2018-09-05');
--Presto
select date_diff('day',cast('2018-09-05' as date),cast('2018-09-07' as date))
​
--数据类型
--Hive
SELECT CAST('2022-01-01' AS DATE);
--Presto
SELECT DATE '2022-01-01';

presto比spark执行更快的原因

一般来说,很难说Presto肯定比Spark SQL更快或更慢.这实际上取决于正在执行的查询类型,环境和引擎调整参数

在数据量不超过限制以及逻辑简单的情况下,presto是更快的

resto架构相当简单。主从式,主节点是coordinator负责SQL的优化和执行计划分配,同时还负责整个集群的内存管理;一个协调器,可以执行SQL解析,计划,调度和一组执行物理计划的工作人员。

假如一个Query需要消耗100GB的内存,这就超过了整个集群的内存了,那么Presto的coordinator就直接卡掉这个查询,防止内存溢出

Spark核心之间有更多层,集群中的每个计算节点的Executor进程中进行内存管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值