Presto的学习笔记
1. Presto简介
Presto是Facebook 推出的一个开源的分布式SQL 查询引擎,数据规模可以支持GB到PB级,主要应用于处理秒级查询的场景。
Presto 是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLAP场景,并不是Presto所擅长,所以不要把Presto当作数据库来使用。
和大家熟悉的MySQL相比:首先MySQL是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;其次数据量方面,MySQL作为传统单点关系型数据库不能满足当前大数据量的需求,于是又各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据分析计算需求的一个工具。
1. 数据源
Presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等。
一条Presto查询可以将多个数据源的数据进行合并分析。
比如:select * from a join b where a.id=b.id; 其中表a可以来自Hive,表b可以来自Mysql。
2. 优势
Presto 是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。
3. 数据模型
Presto使用Catalog(目录)、Schema(模式)和Table这3层结构来管理数据。
在Presto 中定位一张表,一般是catalog为根,例如 一张表的全称为 hive.test_data.test,标识hive(catalog)下的test_data(schema)中的test表。
可以理解为:数据源的大类 . 数据库 . 数据表。
2. Presto 与Hive
Hive 是一个基于HDFS(分布式文件系统)的一个数据库,具有存储和分析计算能力,支持大数据量的存储和查询。Hive 作为数据源,结合Presto分布式查询引擎,这样大数据量的查询计算速度就会快很多。
Presto 支持标准SQL,在使用Hive数据源的时候,如果表是分区表,一定要添加分区过滤,不加分区扫描全表是一个很暴力的操作,执行效率低下并且占用大量集群资源,要尽量避免这种写法。