Presto 与 Hive 简单对比
作者头像
  • 中睿天下
  • 2019-11-01 07:06:51 6

presto简介

Presto是一款分布式SQL交互式查询引擎,其查询效率比Hive高出5至10倍,支持多种数据源的秒级查询。

Presto采用基于内存的查询方式,这使得它的查询速度更快。除了基于内存,Presto还应用了向量计算、动态编译执行计划优化的ORC和Parquet Reader技术,从而进一步优化查询速度。

Presto与Hive的对比

Presto和Hive适用于不同的应用场景。尽管Presto查询速度快,但并非适用于所有查询场景。

例如,在进行多张大表的关联查询时,由于Presto需要将数据加载到内存中,如果查询时间超过几分钟,则会影响集群性能。这违背了Presto交互式查询的初衷,即实现接近实时的查询与返回。因此,Presto不适合进行多表关联操作或ETL操作,这种情况下应使用Hive。

此外,Hive只能查询HDFS,而Presto支持MySQL、PostgreSQL、Kafka和Redis等多种数据源。总体而言,Presto是一种多数据源查询的利器。

结合实际业务场景,Presto适用的场景包括:

  1. 在数据仓库的前两层,Presto可用于验证数据和查询数据;
  2. 在业务人员和数据分析师操作生成好的理想表时,使用Presto可以显著提升用户体验。

Presto不应被用作ETL工具或进行多表关联查询,而更适合进行单表查询操作。

Presto的应用

Presto的官方文档非常详细,相信结合文档,用户能够快速将Hive SQL转换为Presto SQL。

我们经常需要解析日志,尤其是JSON格式的日志。下面介绍如何使用Presto进行JSON解析。

假设employee表中的xjson字段包含以下JSON数据: json [{"name":"王二","sex":"男","age":"25"},{"name":"李四","sex":"男","age":"47"}]

  • 要获取“王二”的年龄,可以使用以下Hive SQL: sql select get_json_object(xjson, '$.[0].age') from employee limit 1; 查询结果为:25

  • 使用Presto时,可以使用jsonarrayget()和jsonextract()函数。首先,用jsonarray_get()取出JSON数组的第一个元素: sql select json_array_get(xjson, 0) from employee limit 1; 查询结果为: json {"name":"王二","sex":"男","age":"25"}

  • 接着,使用json_extract()函数从上述结果中提取“王二”的年龄: sql select json_extract('{"name":"王二","sex":"男","age":"25"}', '$.age'); 查询结果为:25

总结

Presto提供了解析JSON的函数jsonarrayget()和jsonextract()。对于JSON数组,需要使用jsonarrayget()函数来获取指定位置的元素。而对于JSON对象,可以使用jsonextract()函数进行查询,类似于Hive中的getjsonobject()。

    本文来源:图灵汇
责任编辑: : 中睿天下
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
对比简单PrestoHive
    下一篇