mul ab 的执行结果是_Calcite Join 处理 - I (执行器 & 简单 Reorder)

本篇我们来看下 calcite 中 join 实现和相关优化规则。接下来我们将从下往上, 首先看下 join 支持的实现算法,之后看下优化器如何选择使用这些 join 算法,最后看几个经典的 join 优化规则(join reorder and so on...)

支持的 Join 执行器

在之前简述 implement文章中我们看到 calcite 的算子实现会 codegen 调用 linq4j 提供的 enumerable 算子实现, 今天我们看下 join 相关的处理。

calcite 使用了 linq4j 的 5 种 join 方法

  • join(hash join)
  • mergeJoin
  • semiJoin
  • thetaJoin
  • correlateJoin

(linq4j 还提供了 groupJoin 不过 calcite 暂时没用)

这些算法的实现位于 EnumerableDefaults, 并通过 Enumerable.*Join 中的 implement 来生成对应方法的调用,如果希望寻找对应调用的地方可以查找 BuiltInMethod 中对应的值使用的地方即可。

1) Join(equi hash)

这个 join 主要支持等值比较条件的 join,通过 hashjoin 实现, 代码位于 join_ 方法内, linq4j 这个方法的实现是首先对 inner 表(join 的第二个 enumerable) 构造 lookup(hashMap<k, list<v>>), 之后通过在 Enumerable#moveNext 实现中, move outer 表并去 probe 刚才构建的内表 lookup, 并合并选择返回结果>

整个过程很简单没实现啥并行 hashjoin 等稍复杂的算法, 但可能需要稍微关注的是几个参数: generateNullsOnLeft(right/full join) 会留一份 inner 的 map key, 最后将未匹配的行对左边补 null; generateNullsOnRight (left/full join) 反之对右边补充 null, 不过只用简单发现 prob 不到就补 null

这个 hashjoin 算法会作为 EnumerableJoin 的 implement 实现(根据 join type 等生成其他参数), 所以优化器要选择 hashjoin 需要转换好 EnumerableJoin 并安排好 left/right 即可。

2) Merge Join

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: surf_cli_chn_mul_day-tem-12001-201501.txt是一个文件名,这个文件可能是一个文本文件。根据文件名的后缀“txt”可以判断出这是一个文本文件。根据文件名中的其他信息,可以猜测这个文件记录了2015年1月份中国地区某个地点的多天的海浪信息和气温信息。 文件名中的“surf_cli_chn_mul_day”可能表示这是一个关于冲浪、气象和中国的多天数据文件。其中“surf”可能指的是冲浪,意味着这个文件中包含有关冲浪条件和海浪高度的数据。而“cli”可能表示气候或气象,意味着这个文件中可能还包含了一些与气温或其他气象要素相关的数据。最后,“chn_mul_day”可能表示这是中国地区多天的数据,指的是这个文件中包含了多天的数据,可能是按日期顺序排列。 根据文件名中的“tem-12001-201501”部分,可以猜测这个文件可能是关于2015年1月份某个地点的气温数据。其中“tem”可能表示气温,而“12001”可能是指某个具体地点的编号或代号。而“201501”则代表了这个文件中记录的是2015年1月份的数据。 总结而言,surf_cli_chn_mul_day-tem-12001-201501.txt这个文件名暗示了这是一个包含了中国某地2015年1月份多天的冲浪和气温数据的文本文件。 ### 回答2: surf_cli_chn_mul_day-tem-12001-201501.txt是一个文件名,它可能表示一个气象数据文件。根据文件名的命名规则,该文件可能包含2015年1月份中国某个城市或地区的多日气温数据。 在该文件中,"surf_cli_chn_mul_day"可能代表"surface climate China multiple day"(中国地面气候多日)的缩写,意味着这是一个包含中国地面气候数据的文件。"tem"可能代表"temperature"(温度),表示该文件中包含的是温度数据。"12001"可能是文件的编号,用于标识该文件属于某个特定的数据集或项目。"201501"代表文件所涵盖的日期范围,可能是2015年1月。 由于题目只提供了文件名,并未提供具体的内容或其他背景信息,因此对于该文件的具体内容和用途,我无法做更详细的解读。要了解更多关于该文件的信息,需要查阅实际的文件内容或者咨询相关的数据提供机构或个人。 ### 回答3: surf_cli_chn_mul_day-tem-12001-201501.txt 是一个文件名,文件中可能包含有关2015年1月份中国多地的冷暖气温数据。 根据文件名可以分析出以下信息: 首先,文件是以“surf_cli_chn_mul_day-tem-12001-”开头的,这可能表示了该文件是多个城市的气温数据。 然后,文件名中的“201501”表示了该文件记录的是2015年1月份的数据。 如果我们打开这个文件,可能会看到以下内容: 该文件可能包含有关中国多个城市在2015年1月份每天的气温数据。这些数据可能以一定的格式来展示,可能按照城市和日期进行分组,并且可能有时间间隔。 该文件可能是一个纯文本文件,我们可以使用文本编辑器来打开它,并查看其中的内容。在文件中,每个城市的气温数据可能以一定的形式被记录,常见的格式可能是每行记录一个数据点,包括城市、日期和相应的气温值。 通过分析该文件,我们可以获得2015年1月份中国多地的气温趋势,可以观察各个城市在这个月份内的气温变化情况,从而对该时期的气候有更多的了解。这些数据对于气象研究、城市规划以及农业生产等领域可能具有重要的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值