hive和presto的SQL对比

目录

概念

优势

Hive和Presto的语法(SQL)对比

NOT操作

JSON解析

日期加法

时间处理

获取数组长度

Lateral View / Cross Join

String数据类型

Mod运算符

正则表达式

数组定义

日期差异

数据类型转换

presto比spark执行更快的原因


概念

Presto(或PrestoDB)

Presto是一个开源的分布式SQL查询引擎,设计初衷是为了快速分析任何规模的数据。其基于内存运算,减少不必要的硬盘IO,并采用Master-Slave架构,Presto自带的监控功能可以查看执行的完整SQL。Presto在内存管理、查询优化、并发处理、数据源支持和社区支持等方面有显著优势。

优势

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

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

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

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

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

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

Hive和Presto的语法(SQL)对比

NOT操作
  • Hive
    SELECT !(rank2_home_days1 >= 2 AND rank2_home_num1 >= 3);
  • Presto
    SELECT NOT(rank2_home_days1 >= 2 AND rank2_home_num1 >= 3);

JSON解析
  • 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));

时间处理
  • Hive
    SELECT to_date(from_unixtime(UNIX_TIMESTAMP('20200110', 'yyyyMMdd')));
  • Presto
    SELECT format_datetime(date_parse('20200110', '%Y%m%d'), 'yyyy-MM-dd');

获取数组长度
  • Hive
    SELECT size(split(user_ids, ',')) FROM test_tb;
  • Presto
    SELECT cardinality(split(user_ids, ',')) FROM test_tb;

Lateral View / Cross Join
  • Hive
    SELECT student, score FROM tests LATERAL VIEW explode(split(scores, ',')) t AS score;
  • Presto
    SELECT student, score FROM tests CROSS JOIN UNNEST(split(scores, ',')) AS t (score);

String数据类型
  • Presto
    SELECT CAST(1 AS VARCHAR);

Mod运算符
  • Presto
    SELECT MOD(1, 2); -- 不支持 `1 % 2`

正则表达式
  • Presto
    SELECT regexp_like(map['field'], '.*');

数组定义
  • Presto
    SELECT ARRAY [1, 2];

日期差异
  • 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的性能更优。

Presto的架构相对简单,采用主从式架构,主节点(Coordinator)负责SQL的优化和执行计划分配,同时负责整个集群的内存管理。一个Coordinator可以执行SQL解析、计划、调度以及一组执行物理计划的工作者(Worker)。如果一个查询需要消耗100GB的内存,这超过了整个集群的内存,那么Presto的Coordinator会直接卡掉这个查询,防止内存溢出。

相对而言,Spark在核心之间有更多层次,集群中的每个计算节点的Executor进程中进行内存管理。因此,在特定条件下,Presto能表现出更快的执行速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值