Apache Kylin支持Query Pushdown

倪春恩
2017年 7月 05日

作者:倪春恩

编辑:Sammi

Apache Kylin是一个在Hadoop上的OLAP引擎, 利用Hadoop平台的多个组件,可为超大规模数据集提供标准SQL查询及多维分析(OLAP)功能,实现亚秒级的交互式分析。

Kylin采用了预计算技术,在构建Cube时对数据建立了多维索引,因而对于较为固定的查询场景,Kylin对比其他进行实时查询的引擎如Hive、Spark-SQL等会有较大的性能优势。

但是很多时候,用户会期望实现更灵活的查询。举例来说,某家电商将其所有的订单数据建表并构建了Kylin的Cube,其中在订单金额的字段上建立了Max度量以获取一定条件下的最大订单金额。

但是某天,该电商的业务部门希望能够查到某商品某月的最小订单金额,基于现有的Cube无法查询到,因为设计Cube时并未设定Min度量。对此,原有的解决办法一是修改Cube,增加Min度量并重新Build Cube;二是在Hive里进行查询。那么能否仍然使用Kylin作为查询入口,对于那些并不常用的查询,用户不需要专门去增加Cube复杂度,而是牺牲一定的等待时间来获得结果?答案是肯定的,因为Kylin计划将在V2.1版本中支持Query Pushdown。

什么是Query Pushdown

Query Pushdown是用户为Apache Kylin配置一个备用查询引擎,以根据自己的需求,对查询频率不高或者对响应时耗无太高要求的查询语句也能给出相应结果。用户可以更灵活地选择查询条件,BI系统能够根据用户的选择生成相应的统计报表。

Query Pushdown在Kylin中的工作原理

基本原理如下图所示,Kylin的Query Engine首先会对传入的SQL解析并查找能够满足该语句的Cube,若无法找到,则将SQL交给Query Pushdown查询模块,并最终通过配置的查询引擎得到查询结果。

配置Hive作为Query Pushdown引擎

1、打开Query Pushdown配置

修改Kylin的配置文件kylin.properties打开Query Pushdown注释掉的配置项并进行相应配置:

  • query.pushdown.runner-class-name: Query Pushdown的运行类名,供扩展用,使用Jdbc引擎不需要修改
  • query.pushdown.jdbc.url: Jdbc的url
  • query.pushdown.jdbc.driver: Jdbc的driver类名
  • query.pushdown.jdbc.username: Jdbc对应数据库的用户名
  • query.pushdown.jdbc.password: Jdbc对应数据库的密码
  • query.pushdown.jdbc.pool-max-total: Jdbc连接池的最大连接数
  • query.pushdown.jdbc.pool-max-idle: Jdbc连接池的最大等待连接数
  • query.pushdown.jdbc.pool-min-idle: Jdbc连接池的最小连接数

如图所示为使用Hive作为Query Pushdown引擎的配置

2、重启Kylin

重启后,Query Pushdown便生效。

对一个交易明细表仅对Price字段配置了Max度量。

成功Build Cube后,即可进行Max(Price)的查询。

如果提交了Min(Prices)的查询,则Kylin使用Query Pushdown将查询交给了Hive,结果如下:

其返回的response里对应的Is Query Push-Down字段也被标记为了true:

申请试用
关注我们