Impala高性能探秘之Runtime Filter

本文详细探讨了Impala的Runtime Filter技术,这是一种用于提升JOIN查询性能的优化手段。Runtime Filter主要针对JOIN中大表和小表的情况,通过Bloom Filter算法在运行时生成过滤条件,减少数据扫描和传输,提高查询效率。尽管它不能直接应用于存储引擎以减少读取的数据量,但能减少输出记录数,从而改善性能。
摘要由CSDN通过智能技术生成

前言

书接上文,如果说HDFS的数据访问层各个BigData SQL Engine做的都大同小异的话,那么Runtime Filter(下文简称RF)则是Impala比较独特的”黑科技”了,在深入学习Impala之前对于这个名词比较陌生,但它绝对是Impala性能提升的一大法宝,我们将试图围绕着如下几个问题展开以详细介绍Runtime Filter的细节。

  • 什么是Runtime Filter
  • Runtime Filter在Impala中有什么作用
  • Runtime Filter实现原理

什么是Runtime Filter

在日常使用SQL进行查询的时候,一个SQL往往包括如下几个部分:SELECT/JOIN/WHERE/GROUP BY/ORDER BY,这几个常用的算子分别对应着SQL执行计划中的project、join、filter、aggregation和sort。本文我们主要关注join和filter这两种算子,为了回答什么是Runtime Filter,首先看一个例子:

SELECT A.NAME, B.CLASS_NAME FROM PEOPLE A JOIN CLASS B ON A.CLASS_ID = B.ID WHERE A.AGE > 10 AND B.GRADE = 4;
A表中保存100000条学生记录,通过AGE > 10可以过滤掉其中的40000,B表中保存1000个班级信息,通过GRADE = 4可以过滤掉900条。JOIN之后产生30000条记录

从这个SQL的表名和字段名中不难分析出我们想得到什么结果。如果一个比较笨的执行引擎会首先将PEOPLE表和CLASS表从存储引擎中读出来,然后将它们按照CLASS_ID和ID进行比较和JOIN,之后根据JOIN的结果中AGE和GRADE列进行过滤,最后读取NAME列和CLASS_NAME列返回给用户, 这种执行计划完全按照SQL看上去执行的顺序,但是性能往往是最差的,这种引擎我们称之为二逼SQL引擎。

二逼SQL引擎

比较聪明的执行引擎会把filter和project下推到数据扫描节点,正如我们上文介绍的那样,首先从存储引擎中读取数据,如果存储引擎有提供传入谓词的接口那就最好不过了,例如Kudu和Parquet都具有这样的功能,没有该功能的引擎则根据读上来的数据进行过滤,选取需要的列交给JOIN节点处理,本例中需要从PEOPLE中选取CLASS_ID、NAME、AGE列,从CLASS表中选取CLASS_NAME、ID和GRADE列,JOIN节点再根据CLASS_ID和ID列进行内连接,完成之后输出NAME和CLASS_NAME。此类的映射和谓词下推现在也
是SQL引擎优化的基本手段了,此类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值