热门标签 | 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列式存储格式的查询,不支持插入



推荐阅读
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 在中标麒麟操作系统上部署达梦数据库及导入SQL文件
    本文档详细介绍了如何在中标麒麟操作系统上安装达梦数据库,并提供了导入SQL文件的具体步骤。首先,检查系统的发行版和内核版本,接着创建必要的用户和用户组,规划数据库安装路径,挂载安装介质,调整系统限制以确保数据库的正常运行,最后通过图形界面完成数据库的安装。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 8个IDC大数据基础定义解析丨IDC
    本文针对IDC数据行业相关名词术语进行解析,分为4组相关概念,希望大家读完 ... [详细]
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社区 版权所有