目录

  • 一、数据存储
  • 二、查询 SQL
  • 三、注意事项

一、数据存储

A、合理设置分区

与 Hive 类似,Presto 会根据元数据信息读取分区数据,合理的分区能减少Presto 数据读取量,提升查询性能。

B、使用列式存储

Presto 对 ORC 文件读取做了特定优化,因此在 Hive 中创建 Presto 使用的表时,建议采用 ORC 格式存储。相对于 Parquet,Presto 对 ORC 支持更好。

C、使用压缩

数据压缩可以减少节点间数据传输对 IO 带宽压力,对于即席查询需要快速解压,建议采用 Snappy 压缩。

二、查询 SQL

A、只选择使用的字段

由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用 * 读取所有字段。

[GOOD]: SELECT time, user, host FROM tbl
[BAD]:  SELECT * FROM tbl

B、过滤条件必须加上分区字段

对于有分区的表,where 语句中优先使用分区字段进行过滤。acct_day 是分区字段,visit_time 是具体访问时间。

[GOOD]: SELECT time, user, host FROM tbl where acct_day=20171101
[BAD]:  SELECT * FROM tbl where visit_time=20171101

C、Group By 语句优化

合理安排 Group by 语句中字段顺序对性能有一定提升。将 Group By 语句中字段按照每个字段 distinct 数据多少进行降序排列。

[GOOD]: SELECT GROUP BY uid, gender
[BAD]:  SELECT GROUP BY gender, uid

D、Order by 时使用 Limit

Order by 需要扫描数据到单个 worker 节点进行排序,导致单个 worker 需要大量内存。如果是查询 Top N 或者 Bottom N,使用 limit 可减少排序计算和内存压力。

[GOOD]: SELECT * FROM tbl ORDER BY time LIMIT 100
[BAD]:  SELECT * FROM tbl ORDER BY time

E、使用 Join 语句时将大表放在左边

Presto中 join 的默认算法是 broadcast join,即将 join 左边的表分割到多个worker,然后将 join 右边的表数据整个复制一份发送到每个 worker 进行计算。如果右边的表数据量太大,则可能会报内存溢出错误。

[GOOD] SELECT ... FROM large_table l join small_table s on l.id = s.id
[BAD] SELECT ... FROM small_table s join large_table l on l.id = s.id

三、注意事项

A、字段名引用

避免和关键字冲突:MySQL 对字段加反引号`、Presto对字段加双引号分割
当然,如果字段名称不是关键字,可以不加这个双引号。

B、时间函数

对于 Timestamp,需要进行比较的时候,需要添加 Timestamp 关键字,而 MySQL 中对 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';

C、不支持 INSERT OVERWRITE 语法

Presto 中不支持 insert overwrite 语法,只能先 delete,然后 insert into。

D、PARQUET 格式

Presto 目前支持 Parquet 格式,支持查询,但不支持 insert。

Presto (三) --------- Presto 优化相关推荐

  1. Presto学习-presto介绍

    1.presto基本概念 1.1 presto服务进程 presto集群中一共有两种服务器进程:coordinator服务进程和worker服务进程,其中coordinator服务进程的主要作用是:接 ...

  2. 【presto】presto编译报错整理(大全)

    问题一: 报错信息: 1) Explicit bindings are required and com.facebook.presto.execution.TaskManager is not ex ...

  3. Presto (一) --------- Presto 简介

    目录 一.Presto 概念 二.Presto 架构 三.Presto 优缺点 四.Presto.Impala 性能比较 一.Presto 概念 Presto 是一个开源的分布式 SQL 查询引擎,数 ...

  4. 高级SQL优化(三) 常用优化工具 ——《12年资深DBA教你Oracle开发与优化——性能优化部分》...

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

  5. 读薄《高性能MySql》(三)索引优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  6. 排序--Bubble的三种优化

    BubbleSort      冒泡排序是许多人接触的第一种排序方式,由于这种方式比较简单,所以大部分人也没有深入研究,所以写出的代码是这样的: void BubbleSort(int *arr, i ...

  7. 支持向量机 (三): 优化方法与支持向量回归

    拉格朗日乘子法 - KKT条件 - 对偶问题 支持向量机 (一): 线性可分类 svm 支持向量机 (二): 软间隔 svm 与 核函数 支持向量机 (三): 优化方法与支持向量回归 优化方法 一.S ...

  8. 快速排序的三个优化思路

    前言 本文主要是介绍关于快速排序的三种优化思路,所以是基于读者已经掌握快速排序算法思想以及最基本的实现的前提,遂有关于快速排序原理方面,这里就不多赘述了. 下面是快速排序最简单的实现版本,即每次选取待 ...

  9. 数学建模matlab 优化模型,数学建模实验中三种优化模型的分析

    1. 引言 在20世纪中期,数学建模 [1] 就在欧美国度首次被发现,而在中国的呈现稍晚些,但是大约在80年代初始咱们国家也就有了.它的核心即是创立数学模型 [2] ,使得问题获得最优化的解决.而数学 ...

最新文章

  1. 没有安装python如何使用anaconda运行python命令行
  2. Linux平台安装MongoDB(亲测)
  3. 【数据结构与算法】之深入解析“Z字形变换”的求解思路和算法示例
  4. c#在WinForm中重写ProgressBar控件(带%的显示)
  5. [ZZ]强签名的由来和作用
  6. OpenCV里IplImage的widthStep参数 和width参数
  7. 河北体检系统诚信企业推荐_海南膜结构停车棚加工厂诚信企业推荐
  8. react和nodejs_如何使用NodeJS和React为SaaS构建Stripe Billing入门流程
  9. Google、Baidu
  10. shell脚本:判断本地和远程文件是否存在
  11. hibernate映射配置文件说明
  12. 不要让别人左右自己的心情
  13. Redhat 9.0之xtt+xft2,可显示粗斜体美化总结(第二版)
  14. 给技术人提升自己的几点建议
  15. zabbix 报警 Lack of free swap space on Zabbix server 处理
  16. 本地安装brat标注平台
  17. Ubuntu 16.04 中文输入法(搜狗输入法)安装记录
  18. 当ChatGpt接入微信群之后。。。
  19. C++中标准模板库STL基本概念
  20. DC/DC电源输入输出滤波电容摆放位置

热门文章

  1. html 抽奖的页面,html网页抽奖
  2. 上汽集团进军网约车市场  滴滴的市场地位会被传统车企们挑战成功吗?
  3. 什么是ETF量化接口?
  4. 【discuz x3】home_follow.php(广播页面)中$alist = getfollowfeed($vuid, $view, true, $start, $perpage);结果
  5. 《大空头》书中的精髓:理性在财富面前无足轻重,人类的贪婪和无所谓,造出了次贷危机这个怪兽。
  6. Jetpack学习之Paging
  7. 个人所得税计算器 微信小程序开发 计算差值方法
  8. Loj #2585. 「APIO2018」新家
  9. 开源中最好的Web开发的资源 ——来自CoolShell.cn
  10. Spring(一)IOC