物理计划执行算子提问

【产品名称】

【产品版本】

【问题描述】在物理计划执行的时候,我看到物理算子的代码中有ob_xxxx.cpp和ob_xxxx_op.cpp这两种,比如说ob_granule_iterator.cpp和ob_granule_iterator_op.cpp,具体执行的时候用的是哪种呢,用哪种的依据是什么?

ob有两套执行引擎,内部分别称为老引擎和新引擎,ob_xxxx.cpp对应的是老引擎,ob_xxxx_op.cpp对应的是新引擎

老引擎中数据以ObObj的形式在算子间传递,ObObj中记录了meta和value,很多编译期可以完成的工作被放到了执行期,比如两个ObObj做比较,先根据两个类型获取比较方法,再对value进行比较,比如为计算结果申请空间等等。

新引擎中meta和value分离,meta记录在ObExpr中,value保存在ObDatum中,比较函数的指针,计算hash的函数指针,表达式的计算方法等等都是在编译期确定好的,编译期也会为表达式结果预分配内存。

1 个赞