calcite learn

    科技2023-10-11  102

    上层尽量简单的封装请求,所以它定义为标准的SQL,代码里告诉Calcite,虚拟出来的表是什么、字段是什么、字段类型是什么等,整体抽象为一个个Schema,对于我们来说就查Calcite虚拟出来东西,不用关心底层真正对接了哪些数据源,底层通过定义各种adapter,来对接不同的查询和存储引擎 自定义解析

    创建模型,model.json自定义SchemaFactory,CsvSchemaFactory自定义Schema,CsvSchema自定义Table,CsvTable、CsvScannableTable自定义Enumerator,CsvEnumerator

    Calcite 主要功能

    SQL 解析 SQL 校验 查询优化 SQL 生成器 数据连接

    Catelog: 主要定义SQL语义相关的元数据与命名空间。 SQL parser: 主要是把SQL转化成AST. SQL validator: 通过Catalog来校证AST. Query optimizer: 将AST转化成物理执行计划、优化物理执行计划. SQL generator: 反向将物理执行计划转化成SQL语句.

    属性 描述 approximateDecimal 是否可以接受DECIMAL类型上的聚合函数的近似结果 approximateDistinctCount 是否可以接受聚合函数COUNT(DISTINCT …)的近似结果 approximateTopN 是否可以接受”TopN”查询(ORDER BY aggFun() DESC LIMIT n)的近似结果 caseSensitive 标识符是否区分大小写。如果未指定,则使用来自于lex的值。 conformance SQL一致性级别。值:DEFAULT(默认,类似于PRAGMATIC_2003),LENIENT,MYSQL_5,ORACLE_10,ORACLE_12,PRAGMATIC_99,PRAGMATIC_2003,STRICT_92,STRICT_99,STRICT_2003,SQL_SERVER_2008。 createMaterializations Calcite是否创建物化的东西。默认false defaultNullCollation 如果在查询中既不指定NULLS FIRST也不指定NULLS LAST,应如何对NULL值进行排序。缺省值为HIGH,与Oracle相同,对NULL值进行排序。 druidFetch 执行一次SELECT查询时,Druid适配器应该读取多少行。 forceDecorrelate 计划器是否应该尽可能地相互关联。默认为true。 fun 内置函数和运算符的集合。有效值是“标准”(默认),“oracle”,“空间”,并可以使用逗号连接组合,例如“oracle,spatial”。 lex 词汇(关键字)策略。值是ORACLE(默认),MYSQL,MYSQL_ANSI,SQL_SERVER,JAVA。 materializationsEnabled Calcite是否使用物化的东西。默认false model JSON模型文件的URI parserFactory 解析器工厂。实现SqlParserImplFactory 接口的类的名称,并且有一个公有的默认构造方法或者INSTANCE常量 quoting 如何引用标识符。值是DOUBLE_QUOTE,BACK_QUOTE,BRACKET。如果未指定,则使用来自于lex的值。 quotedCasing 如何存储使用了引号的标识符。值是UNCHANGED, TO_UPPER, TO_LOWER。如果未指定,则使用来自于lex的值。 schema 初始化schema名称 schemaFactory Schema工厂。实现SchemaFactory接口的类的名称,并且有一个公有的默认构造方法或者INSTANCE常量。如果指定了model,此属性会被忽略。 schemaType Schema类型。值必须是“MAP”(默认值),“JDBC”或“CUSTOM”。(如果schemaFactory指定则隐式指定为CUSTOM类型)如果指定了model,此属性会被忽略。 spark 指定是否应将Spark用作无法推送到源系统的处理引擎。如果为false(默认值),则Calcite将生成实现了Enumerable接口的代码。 timeZone 时区,例如“gmt-3”。默认是JVM的时区。 typeSystem 类型系统。实现了接口RelDataTypeSystem的类的名称,并具有公有的默认构造函数或INSTANCE常量。 unquotedCasing 如果标识符未被引用,如何存储。有效值是UNCHANGED,TO_UPPER,TO_LOWER。如果未指定,则使用来自于lex的值。
    Processed: 0.012, SQL: 8