热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

即席查询—Presto

文章目录即席查询—Presto1提高查询速度?2定义3架构4优、缺5命令行客户端6可视化客户端7优化7.1数据存储7.2SQL8避坑即席查询—Presto1提高查询


文章目录

  • 即席查询—Presto
    • 1 提高查询速度?
    • 2 定义
    • 3 架构
    • 4 优、缺
    • 5 命令行客户端
    • 6 可视化客户端
    • 7 优化
      • 7.1 数据存储
      • 7.2 SQL
    • 8 避坑


即席查询—Presto


1 提高查询速度?


1、基于内存:充分利用内存引入Presto

2、预计算:查之前将可能查询的结果都计算出(提前计算出)kylin



2 定义


Presto是一个开源的分布式的SQL查询引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。但是它并不是一个标准的数据库,只是用来解析SQL。



3 架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ok8abKt4-1621403043329)(../../AppData/Roaming/Typora/typora-user-images/image-20210519101232540.png)]

各功能解释如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NKIQmmZU-1621403043332)(../../AppData/Roaming/Typora/typora-user-images/image-20210519101201000.png)]


4 优、缺


1、基于内存计算,减少磁盘IO

2、支持多种数据源,可以进行跨数据源的连表查询,比如读取hive某表信息和mysql中进行表的关联匹配(主要的原因是因为presto有其统一的数据结构schema+table)



缺点无非是效率和数量的不平衡,虽说presto可以处理PB级别的数据,但它并不是将这个数据放在内存中进行计算,而是根据场景进行调整,比如一些聚合(count、avg、sum、max等)的操作就会边读、边算、边清内存,然后再读再算,所以这种消耗内存不高,但是连表查会产生大量临时数据(主要就是多表联合得先生成一个最终需要查询的临时表,再进行查询操作),因而速度会慢;解决方案:可以先在hive里面提前进行多表关联成大宽表的操作,然后presto就可直接查询



5 命令行客户端


./prestocli --server master:8881 --catalog hive --schema default

它和hive查询不太一样,它不是全部出来,只会出现一部分,可以使用回车出现一行,空格进行换页,到最后结尾end的时候按q退出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SJZ2Pk1c-1621403043333)(../../AppData/Roaming/Typora/typora-user-images/image-20210519113235897.png)]



其实它中间查询是由一个通道,查多少拿多少,没有全部显示直接退出可能会报断开的管道错;如果不添加LZO的依赖,presto查询会出问题



6 可视化客户端


nohup bin/yanagishima-start.sh >y.log 2>&1 &
在这里插入图片描述



7 优化


7.1 数据存储


1、分区处理:合理化的设置分区,同hive类似;合理的分区可以减少它的数据读取量,提升查询的性能

2、存储格式:对ORC文件进行特定的优化,相对于Parquet,对ORC更友好

3、压缩格式:选择snappy优先,要求速度快



7.2 SQL


1、选择字段:选择需要的字段进行读取、减少数据量,少用*

2、分区字段:能以分区作为过滤条件,尽量使用分区

3、Group By:将group by语句中的字段按照每个字段的distinct数据多少进行降序排列

4、Order By:如果需要使用order by进行全局排序查询TopN或者BottomN(倒数),使用limit可减少排序计算和内存的压力

5、Join:①broadcast join大表join小表,presto中join的默认算法是broadcast join,采用的大表切分、小表广播,大表会被切分成每份送往worker,小表直接广播复制到worker中进行join;②hash join大表join大表,会根据要join的字段将两张表进行hash,hash相同的进入同一worker进行join



8 避坑


1、引用关键字:避免对关键字的冲突引用,MySQL对字段加反引号`,但在presto对字段是假双引号"",如果字段不是关键字可以不加

2、时间函数:对于时间戳类型(timestamp)需要比较的时候,需要添加timestamp关键字

/*MySQL的写法*/
SELECT t FROM a WHERE t > '2017-01-01 00:00:00'; /*Presto中的写法*/
SELECT t FROM a WHERE t > timestamp '2017-01-01 00:00:00';

3、不支持insert overwrite:persto中不支持insert overwrite语法,毕竟它是专门用来查询的,如果实在想插入数据,那只能先delete,然后insert into

4、parquet存储格式:persto只支持parquet列式存储格式的查询,不支持插入



推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎  (建库建表、数据插入等))
    MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎 (建库建表、数据插入等)) ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有