Presto查询优化(数据分析)

用户:

1、大表查询将数据拆分(表数据非实时)

(1)如公司内部有人直接上亿甚至几十亿条数据的表(或者几百TB级别的表)直接进行报表制作,这种情况,建议搞个定时任务,每天把要统计的数据放到小表里去,报表制作只查小表。

(2)报表数据来自某个json的大字段,用户直接用json解析函数获取,这种情况也建议将字段拆分平铺成一张表再进行查询。

2、Hive表小文件比较多,导致查询慢。把hive表文件合并性能会大大提高。

适当增大这两个参数也可提高查询效率

#控制每个worker上面最大可以提交多少个split,默认是100

node-scheduler.max-splits-per-node

#控制每个worker上面最多可以有多少个split处于Pending状态
node-scheduler.max-pending-splits-per-task

3、优化sql。

(1)不使用select *查询所有数据,按需查询

(2)

参数默认使用说明
join-distribution-typeAUTOMATIC , PARTITIONED,BROADCASTAUTOMATIC

查询时设置

-- set session join-distribution-type='BROADCAST';

select ......

BROADCAST右表广播,AUTOMATIC会自动识别判断到底用PARTITIONED还是BROADCAST,如没有表统计信息之类的情况默认会使用PARTITIONED,这是可以手动指定下
redistribute-writestrue,falsetrue

查询时设置

-- set session redistribute-writes='false';

select ......

查询没有数据倾斜的时候设置为false查询效率更高

系统:

1、提供缓存设置,诸如T+1的数据,用户可以设置天级别的缓存,用户当天第一次查询的时候将数据放入缓存,此后查询结果从缓存中获取。

2、如果数据源为hive,可对Hive metastore配置缓存,可根据实际情况设置缓存时长。

#文件/presto/etc/catalog/hive.properties

hive.metastore-cache-ttl 
控制cache的存活时间,默认设为0,表示不启用这种cache机制

hive.metastore-refresh-interval 
控制cache自动刷新的频率,默认为1ms.

3、设置查询超时,原因:一些查询超过一定时间(如半分钟),那查询是无意义的,因为根本就查不出来,最后还会oom。

(1)通过jdbc连接presto的情况,设置查询超时,如超过半分钟还未查到就返回。

(2)jdbc超时后返回,只能解决客户端不再长久等待的情况,实际presto端该query并未终止,故可以设置诸如query.max-run-time之类的参数来解决。

#文件/presto/etc/config.properties

query.max-execution-time

Type: duration
Default value: 100 days
Session property: query_max_execution_time
在终止查询之前,在集群上主动执行查询的最大允许的时间。与query.max-run-time相比,执行时间不包括队列中的分析、查询规划或等待时间。


query.max-run-time

Type: duration
Default value: 100 days
Session property: query_max_run_time
在终止查询之前,允许在群集上处理查询的最大时间。时间包括分析和计划的时间,也包括在队列中等待的时间,因此本质上这是自创建以来允许查询存在的时间。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值