Calcite作为SQL中间件,为提供扩展性并适配不同数据源,提供了Adapter(适配器)方式对接数据源并根据数据源特性进行查询优化。
狭义上,Adapter是实现SchemaFactory接口,如下图所示,Calcite允许读取不同Model类型定义的数据,并将数据以Schema形式展示。其中Schema定义为Calcite的关系对象,包括Table(表),Function(函数),SubSchema(多层级Catalog)和Expression(表达式)。
Calcite Model可基于Json文件定义Schema,用于描述数据源中Schema的相关信息。基于JsonSchema对象实现各个要素定义,如图所示,JsonSchema可根据【type】表示不同的子类实现,主要包括:
custom类型的Json Model定义示例:
{
"version": "1.0",
"defaultSchema": "SALES",
"schemas": [
{
"name": "SALES",
"type": "custom",
“factory”: "org.apache.calcite.adapter.csv.CsvFactory",
"operand": {
"directory": "sales"
},
"tables": [
{
"name": "FEMALE_EMPS",
"type": "view",
"sql": "SELECT * FROM emps WHERE gender = 'F'"
}
],
"materializations": [
{
"table": "MV_01",
"sql": "SELECT * FROM emps WHERE gender = 'F'"
} ] } ]
}
广义上,Adapter适配器是Calcite实现跨源查询的基础框架,支持将于跨源无关的计算下推到数据源执行,主要由三部分组成:
Calcite以内置多种类型的Adapter实现,其中最常用的是Jdbc Adapter,用于适配不同JDBC数据源的加载和计算。Jdbc Adapter 的整体实现要素包括:
1. JdbcSchema & Factory (Schema)
2. JdbcRel、JdbcToEnumerableConverter等 (RelNode,关系代数节点)
3. JdbcConverterRule (RelRule,规则集合)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。