Kylin 源码阅读笔记

简介: JDBC 入口开始分析jdbc 数据查询接口依次按如下步骤完成 kylin 的查询内容(这里省略了函数实现内容,以减少篇幅):1. KylinClient.

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 的自定义查询规则的方式来加速查询过程,对关键的查询语句进行缓存,从而达到快速查询的过程。

目录
相关文章
|
3月前
|
SQL 存储 分布式计算
Kylin使用心得:从入门到进阶的探索之旅
【5月更文挑战第2天】Apache Kylin是开源大数据分析平台,提供亚秒级OLAP查询。本文深入解析Kylin的工作原理,包括预计算模型Cube、构建过程和查询引擎。常见问题涉及Cube设计、查询性能和资源管理,解决方案涵盖合理设计、性能监控和测试验证。文中还分享了Cube创建的JSON示例,并探讨了Cube构建优化、查询优化、与其他组件集成、监控维护及生产环境问题解决。通过学习和实践,读者能有效提升数据洞察力和决策效率。
162 5
|
8月前
|
资源调度 前端开发 Java
深度剖析Dinky源码(上)
深度剖析Dinky源码
254 0
|
8月前
|
SQL 资源调度 前端开发
深度剖析Dinky源码(下)
深度剖析Dinky源码(下)
227 0
|
SQL Web App开发 JSON
深度剖析Dinky源码
深度剖析Dinky源码
811 0
|
SQL 资源调度 分布式计算
CDH+Kylin三部曲之三:Kylin官方demo
本文是《CDH+Kylin三部曲》系列的终篇,一起来实践kylin官方的demo
101 2
CDH+Kylin三部曲之三:Kylin官方demo
|
SQL 分布式计算 Hadoop
Kylin的入门实战
Kylin 是一个 Hadoop 生态圈下的 MOLAP 系统,是 ebay 大数据部门从2014 年开始研发的支持 TB 到 PB 级别数据量的分布式 Olap 分析引擎。
328 0
Kylin的入门实战
|
机器学习/深度学习 人工智能 PyTorch
初识PyTorch:从安装到入门,从入门到放弃
初识PyTorch:从安装到入门,从入门到放弃
134 0
初识PyTorch:从安装到入门,从入门到放弃
|
存储 自然语言处理 分布式计算
全文检索工具solr:第一章:理论知识
全文检索工具solr:第一章:理论知识
112 0
|
存储 缓存 自然语言处理
浅述Elasticsearch开发规范指南(持续更新)(上)
Elasticsearch 是一款流行的分布式开源搜索和数据分析引擎,具备高性能、易扩展、容错性强等特点。它强化了 Apache Lucene 的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次。 本文将根据ElasticSearch的特点和日常开发中的经验,整理了在日常使用ElasticSearch进行开发的一些最佳实践。
|
存储 数据采集 缓存
浅述Elasticsearch开发规范指南(持续更新)(下)
Elasticsearch 是一款流行的分布式开源搜索和数据分析引擎,具备高性能、易扩展、容错性强等特点。它强化了 Apache Lucene 的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次。 本文将根据ElasticSearch的特点和日常开发中的经验,整理了在日常使用ElasticSearch进行开发的一些最佳实践。