暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss VecHashJoin算子

openGauss小助手 2021-10-30
317

VecHashJoin算子对应的主要数据结构是VecHashJoinState,VecHashJoinState继承于HashJoinState。具体定义如下:

typedef struct VecHashJoinState : public HashJoinState {

int joinState;

void* hashTbl;

FmgrInfo* eqfunctions;

vecqual_func jitted_joinqual;

vecqual_func jitted_hashclause;

char* jitted_innerjoin;

char* jitted_matchkey;

char* jitted_buildHashTable;

char* jitted_probeHashTable;

int enable_fast_keyMatch;

BloomFilterRuntime bf_runtime;

char* jitted_hashjoin_bfaddLong;

char* jitted_hashjoin_bfincLong;

char* jitted_buildHashTable_NeedCopy;

} VecHashJoinState;

VecHashJoin算子的相关函数包括:ExecInitVecHashJoin(初始化节点)、ExecVecHashJoin(执行节点)、ExecEndVecHashJoin(退出节点)、ExecReScanVecHashJoin(重置节点)。

ExecInitVecHashJoin函数用于初始化Vechash join执行算子,并把VecHashJoin计划节点转换成计划执行节点。主要执行流程是:首先处理左子树,得到外执行计划节点;再处理右子树,得到内执行计划节点;最后初始化元组和投影信息。

ExecVecHashJoin函数是执行VecHashJoin的主体函数,执行VecHashJoin状态机。

ExecEndVecHashJoin函数用于在执行结束时清理VecHashJoin算子。主要执行流程是:首先释放内存上下文,之后释放表达式,清空左右子树。流程如图7-34所示。

图7-34 ExecEndVecHashJoin函数执行流程

ExecReScanVecHashJoin函数用于重新执行扫描计划。主要执行流程是:首先判断状态信息,如哈希表为空时,只需要重新扫描左子树计划,否则需要重新构建哈希表。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论