calcite learn

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

  1. 创建模型,model.json
  2. 自定义SchemaFactory,CsvSchemaFactory
  3. 自定义Schema,CsvSchema
  4. 自定义Table,CsvTable、CsvScannableTable
  5. 自定义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的值。
Hive和Calcite都是大数据领域广泛使用的工具。 Hive是一个基于Hadoop的数据仓库和查询系统,用于处理大规模数据。它使用类SQL语言(HiveQL)来定义和操作数据,允许用户通过简洁易懂的语法进行数据查询和分析。Hive将HiveQL查询转换为MapReduce任务或Tez任务运行在Hadoop集群上,通过并行计算来实现高效的数据处理。使用Hive可以方便地处理结构化或半结构化的数据,并且具备容错性和易扩展性。 Calcite是一个开源的查询优化框架,旨在解决将SQL查询转换为底层数据引擎能够理解和执行的计划。Calcite提供了一个统一的查询模型和优化器,可以与多种数据源进行集成,如关系型数据库、NoSQL数据库、文件系统等。Calcite可以根据SQL查询的语义和底层数据源的特性,生成最优的查询计划,提高查询性能。它还支持自定义优化规则和扩展,可以根据特定需求进行定制化。 Hive Calcite是将Hive和Calcite两个工具进行整合的项目。它使用Calcite作为Hive的查询优化器,通过将HiveQL查询转换为Calcite的查询模型,并利用Calcite的优化功能来生成更高效的查询计划。Hive Calcite的整合能够提高Hive的查询性能和灵活性,使用户可以更方便地进行复杂的数据分析操作。同时,由于Calcite的可扩展性,Hive Calcite还支持用户自定义的优化规则和插件,以满足定制化的需求。 综上所述,Hive Calcite是将Hive和Calcite两个工具整合在一起,提供了更高效和灵活的查询优化功能,使用户可以更方便地处理大规模数据。它在大数据领域具有重要的应用价值,并且能够为用户提供更好的数据分析和查询体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值