最近在调研presto查询引擎的模块,先了解了下大体的框架和基本知识。这篇文章适合入门的童鞋看,因此转载了,用于以后查询使用。

1, Presto基本认识

1.1 定义 
Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。

和大家熟悉的Mysql相比:首先Mysql是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;其次数据量方面,Mysql作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据量分析计算需求的一个工具。

1.2 数据源 
Presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等

一条Presto查询可以将多个数据源的数据进行合并分析。 
比如:select * from a join b where a.id=b.id;,其中表a可以来自Hive,表b可以来自Mysql。

1.3 优势 
Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。

举例: 
SELECT id, 
   name, 
       source_type, 
       created_at 
FROM dw_dwb.dwb_user_day 
WHERE dt='2018-06-03' 
  AND created_at>’2018-05-20’;

上述SQL在Presto运行时间不到1秒钟,在Hive里要几十秒钟。

1.4 数据模型 
Presto使用Catalog、Schema和Table这3层结构来管理数据。

---- Catalog:就是数据源。Hive是数据源,Mysql也是数据源,Hive 和Mysql都是数据源类型,可以连接多个Hive和多个Mysql,每个连接都有一个名字。一个Catalog可以包含多个Schema,大家可以通过show catalogs 命令看到Presto连接的所有数据源。 
---- Schema:相当于一个数据库实例,一个Schema包含多张数据表。show schemas from 'catalog_name'可列出catalog_name下的所有schema。 
---- Table:数据表,与一般意义上的数据库表相同。show tables from 'catalog_name.schema_name'可查看'catalog_name.schema_name'下的所有表。

在Presto中定位一张表,一般是catalog为根,例如:一张表的全称为 hive.test_data.test,标识 hive(catalog)下的 test_data(schema)中test表。 
可以简理解为:数据源的大类.数据库.数据表。

2, Presto与Hive 
Hive是一个基于HDFS(分布式文件系统)的一个数据库,具有存储和分析计算能力, 支持大数据量的存储和查询。Hive 作为数据源,结合Presto分布式查询引擎,这样大数据量的查询计算速度就会快很多。

Presto支持标准SQL,这里需要提醒大家的是,在使用Hive数据源的时候,如果表是分区表,一定要添加分区过滤,不加分区扫描全表是一个很暴力的操作,执行效率低下并且占用大量集群资源,大家尽量避免这种写法。

这里提到Hive分区,我简单介绍一下概念。Hive分区就是分目录,把一个大的数据集根据业务需要分割成更细的数据集。

举例:假如一个表的数据都放在/user/xiaoming/table/目录下,如果想把数据按照每天的数据细分,则就变成/user/xiaoming/table/2018-06-01/,/user/xiaoming/table/2018-06-02/,……如果查询某一天的数据,就可以直接取某一天目录下的数据,不需要扫描其他天的数据,节省了时间和资源。

使用Presto: 
3, Presto接入方式 
Presto的接入方式有多种:presto-cli,pyhive,jdbc,http,golang,SQLAlchemy,PHP等,其中presto-cli是Presto官方提供的,下面以presto-cli为例展开说明(自行下载)。

以连接hive数据源为例,在电脑终端输入:./presto-cli.jar --server presto.xxx-apps.com:9200 --catalog hive --user xxxx --source 'pf=adhoc;client=cli'就可以进入presto终端界面。

先解释下各参数的含义:

--server 是presto服务地址; 
--catalog 是默认使用哪个数据源,后面也可以切换,如果想连接mysql数据源,使用mysql数据源名称即可; 
--user 是用户名; 
--source 是代表查询来源,source设置格式为key=value形式(英文分号分割); 例如个人从command line查询应设置为pf=adhoc;client=cli。

进入终端后: 
查看数据源: show catalogs; 
查看数据库实例:show schemas;

Presto使用手册:https://prestodb.io/docs/current/

问答: 
1.使用场景? 
    -mysql跨数据库查询;-数仓的表数据查询(数据分析) ...

2.为什么presto查询速度比Hive快? 
    presto是常驻任务,接受请求立即执行,全内存并行计算;hive需要用yarn做资源调度,接受查询需要先申请资源,启动进程,并且中间结果会经过磁盘。

Presto入门介绍相关推荐

  1. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  2. 独家 | 集成学习入门介绍

    作者:Jason Brownlee 翻译:wwl 校对:王琦 本文约3300字,建议阅读8分钟. 本文介绍了我们在生活中的许多决定包括了其他人的意见,由于群体的智慧,有的时候群体的决策优于个体.在机器 ...

  3. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  4. ECC加密算法入门介绍

    作者  : ZMWorm[CCG]   E-Mail: zmworm@sohu.com   主页  : Http://ZMWorm.Yeah.Net/ 前言 同RSA(Ron Rivest,Adi S ...

  5. [翻译][1.4.2]Flask-Admin入门介绍

    为什么80%的码农都做不了架构师?>>>    #Flask-Admin入门介绍 ##让我们荡起双桨 初始化 Introduction To Flask-Admin Getting ...

  6. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技

    谷歌大脑科学家亲解 LSTM:一个关于"遗忘"与"记忆"的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入 ...

  7. Tomcat容器入门介绍

    Tomcat容器入门介绍 Tomcat环境配置 PS:JDK的安装这里就不讲了,找到安装包直接下一步下一步就行了. 1.配置JDK 在Windows10下,找到环境变量 在环境变量中添加JDK主目录 ...

  8. QWT中Qdial的入门介绍

    最近使用了一下QWT.因为是第一次使用,所以有一些需要注意的地方,特记录在此,以供后来者参考. 1,QWT的安装与配置环境 有关QWT的安装与配置,网络上已经有很多篇文章,这里就不再重复了.介绍一下自 ...

  9. Spring入门介绍:

    Spring入门介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 ...

最新文章

  1. Python应用与实践【转】
  2. 如何创建一张表mysql_如何创建一张规范的MySQL表
  3. nginx源码分析—内存池结构ngx_pool_t及内存管理
  4. 从 6 万用户评论中,选出这 23 门全世界最好的 CS 免费课
  5. 查看wcf服务中方法测试客户端
  6. CSS基础(part20)--CSS3结构伪类选择器
  7. visual studio 2017 显示行号
  8. 循序渐进 OSPF的详细剖析(四)
  9. matlab更改矩阵的值,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  10. VMware相关产品下载(随时更新)
  11. 【理论】【转】Android项目重构之路:架构篇
  12. python发音1001python发音-Python学习笔记Day3 - Python运算符
  13. java batik_[导入]Apache Batik,又爱又恨
  14. 十大开源游戏引擎深入比较
  15. 失败的过去式英文翻译_过去式英语怎么说
  16. html css js实现快递单打印_Node.js开发RPA自动抓取网页的文字内容
  17. mysql如何存储非结构化数据_数据库-数据存储-非结构化数据的存储方式
  18. IEC101召唤过程
  19. 精选腾讯出品的 16 款小程序
  20. 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙

热门文章

  1. 持续集成与自动化部署 - jenkins sonar代码质量管理平台 部署和基础使用(五)...
  2. 我在全球最大的同性社交平台那点事
  3. easyui动态显示和隐藏表头
  4. android js调试
  5. andriod 新建 Activity_ Form (详细设置)
  6. 超短的判断IE javascript代码
  7. 用JAI实现对TIF(TIFF)格式图片的合并
  8. java打印调用堆栈的方式
  9. 38--合并两个排序的链表
  10. java uuid 线程安全_java – 在多线程应用程序中生成相同的UUID