presto 扫盲、行列转置函数

Presto是Facebook开源的分布式SQL查询引擎,专为大规模数据交互式分析设计,速度比Hive快5-10倍。虽然不支持存储过程,但其支持多种数据源和复杂的查询。Presto适合PB级数据的快速分析,但不适合多大表连接。与Hive相比,Presto更注重交互式查询,能访问更多数据源。Presto的内存计算限制了处理某些大型查询的能力,当查询时间过长或内存不足时,可能影响集群资源。文章还讨论了Presto中的行列转置函数。

一,presto是什么:

是Facebook的开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎

是一种大规模并行处理(MPP)架构,多节点管道式执行

⽀持任意数据源(通过扩展式连接器组件),数据规模GB〜PB级

使用的技术,如向量计算,动态编译执行计划,优化的ORC和Parquet Reader等

presto不太支持存储过程,支持部分标准SQL

presto的查询速度比hive快5-10倍

适合:PB级海量数据复杂分析,交互式SQL查询,⽀持跨数据源查询

不适合:多个大表的连接操作,因为急是基于内存的,多张大表在内存里可能放不下

二,presto和hive的对比

hive是一个数据仓库,是一个交互式比较弱一点的查询引擎,交互式没有似的那么强,而且只能访问HDFS的数据

Presto是一个交互式查询引擎,可以在很短的时间内返回查询结果,秒级,分钟级,能访问很多数据源

Presto是一个分布式SQL查询引擎,它被设计为用来专门进行高速,实时的数据分析。

hive在查询的100Gb的级别的数据时,消耗时间已经是分钟级了

但是presto是取代不了hive的,因为p全部的数据都是在内存中,限制了在内存中的数据集大小,比如多个大表的连接,这些大表是不能完全放进内存的,实际应用中,对于在Presto的查询是有一定规定条件的,比比如说一个查询在急查询超过30分钟,那就杀掉吧,说明不适合在Presto上使用,主要原因是,查询过大的话,会占用整个集群的资源,这会导致你后续的查询是没有资源进行查询的,这跟Presto的设计理念是冲突的,就像是你进行一个查询,但是要等个5分钟才有资源继续查询,这是很不合理的,交互式就变得弱了很多

Presto的实现和Hive有着本质的不同:

Hive是把一个查询转化成多个stage的MapReduce的任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步然而,Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。所以在日常使用中,如果有大量的连接偶尔会发生内存不足的报错,一个常见的解决方法是生成中间表的方式来减少加入的次数。

三,presto中的行列转置函数

select
    mate,
    pv,
    uv
from(
select 
element_at(attr,'分类') fenlei,
sum(pv) as pv,
count(distinct uv_id) as uv
from shots.ad a
left join hive.onetrue.f_t_traffic b
on a.ad_id =b.ad_id
where transaction_date between date('2017-01-01') and date('2018-04-30')
group by 
element_at(attr,'分类') ) traffic
cross join unnest(split(traffic.fenlei,',')) as t ( mate )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值