美文网首页
Kylin 源码阅读笔记

Kylin 源码阅读笔记

作者: 走在成长的道路上 | 来源:发表于2018-11-11 22:25 被阅读0次

    JDBC 入口开始分析

    jdbc 数据查询接口依次按如下步骤完成 kylin 的查询内容(这里省略了函数实现内容,以减少篇幅):

    1. KylinClient.executeQuery()             --- 从这里开始是在 jdbc 包中
    2. KylinClient.executeKylinQuery()
    3. QueryController.query()                --- 从这里开始是在 server-base 包中
    4. QueryService.doQueryWithCache()
    5. QueryService.queryAndUpdateCache()
    6. QueryService.query()
    7. QueryService.queryWithSqlMassage()
    8. QueryService.executeRequest()
    9. QueryConnection.getConnection().executeQuery()
    

    查询引擎分析

    进入到 QueryConnection 中时,其实已经进入到了 kylin-query 模块(kylin query engine based on Calcite), 其主要是以 Calcite 为基础,自定义SchemaFactory来定义 Schema, 及表结构,如下先简单介绍 Calcite 实现 SQL 查询引擎的基础流程:

    1. 通过实现SchemaFactory接口的插件类, 执行create方法, 完成schema的实例化 
       - 具体的插件类在schema文件中的factory字段指定了
       - create方法中的参数通过schema文件中的operand字段指定
       - create方法会实例化一个具体的实现了Schema接口的Schema类(用户自己的Schema类)
    2. 一个Schema类的作用在于管理和自己相关的表和函数 
       - 用户自定义的Schema类Override了Map<String, Table> getTableMap()方法
    3. Schema类产生的表均实现了Calcite的Table接口 
       - 官方提供的几种实现该Table接口的抽象类,用户可以继承
       - 用户的每一种Table类均可以给出自己的数据读写方法
    4. Calcite supports query optimization by adding planner rules.
    5. Table scans are the leaves of a query operator tree. The usual implementation is `EnumerableTableScan`
    6. 用户自己实现的`TableScan`类中会注册用户自行添加的规则Rule类
    7. 用户自己实现的`TableScanRule`类(需要继承`RelOptRule`抽象类)负责具体的实现
    

    因此,在 kylin 中主要是在 OLAPSchemaFactory 类中完成 OLAPSchema 实例化,然后在 OLAPSchema 中对 OLAPTable 进行实例化。

    1. OLAPSchema        ---- 元数据
    2. OLAPTable         ---- 基础表
    3. OLAPTableScan     ---- 自定义的查询规则
    

    其中 OLAPQuery 中定义了 四 种不同类型的查询方式。

    通过上述内容可得,kylin 系统中的查询过程通过对 Calcite 的自定义查询规则的方式来加速查询过程,对关键的查询语句进行缓存,从而达到快速查询的过程。

    相关文章

      网友评论

          本文标题:Kylin 源码阅读笔记

          本文链接:https://www.haomeiwen.com/subject/sjuffqtx.html