ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比

news2024/10/6 12:35:21

请添加图片描述
如上图所示IMDRelation作为Interface for relations in the metadata cache,其定义了Storage type of a relation表的存储类型,如下所示:

	enum Erelstoragetype {
		ErelstorageHeap,
		ErelstorageAppendOnlyCols,
		ErelstorageAppendOnlyRows,
		ErelstorageAppendOnlyParquet,
		ErelstorageExternal,
		ErelstorageVirtual,
		ErelstorageSentinel
	};

下面是ErelstorageHeap存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::TranslateCTASToDXL Translate a CTAS 设定CDXLLogicalCTAS类的存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CXformUtils::PexprBuildIndexPlan Construct an expression representing a new access path using the given functors for operator constructors and rewritten access path. Non-heap tables not supported for GiST 非heap表不支持GiST判定

下面是ErelstorageAppendOnlyCols存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelColumns Get relation columns AO表需要添加系统列
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageAppendOnlyRows存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelColumns Get relation columns AO表需要添加系统列
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表
  • CUtils::FGeneratePartOid generate part oid 判定InsertSortOnRows
  • CPhysicalDML::FInsertSortOnRows Do we need to sort on insert

下面是ErelstorageAppendOnlyParquet存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CUtils::FGeneratePartOid generate part oid 判定InsertSortOnParquet
  • CPhysicalDML::FInsertSortOnParquet Do we need to sort on parquet table

下面是ErelstorageExternal存储类型所涉及到的代码:

  • CTranslatorDXLToPlStmt::TranslateDXLTblScan Translates a DXL table scan node into a TableScan node
  • CTranslatorQueryToDXL::TranslateRTEToDXLLogicalGet Returns a CDXLNode representing a from relation range table entry
  • CTranslatorRelcacheToDXL::RetrieveRel Retrieve a relation from the relcache given its metadata id 不为外部表的情况下get partition keys;Retrieve full part constraints partitioned tables with indexes or external partitions, returns NULL for non-partitioned tables
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • COptTasks::PrintMissingStatsWarning Print warning messages for columns with missing statistics 不为外部表时打印missing statistic信息

下面是ErelstorageVirtual存储类型所涉及到的代码:CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型。该枚举类型应该是不用的。

GP6与GP7存储类型对比
在这里插入图片描述

	enum Erelstoragetype{
		ErelstorageHeap,
		ErelstorageAppendOnlyCols,
		ErelstorageAppendOnlyRows,
		ErelstorageForeign,
		ErelstorageMixedPartitioned,
		ErelstorageCompositeType,
		ErelstorageSentinel
	};

下面是ErelstorageHeap存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::TranslateCTASToDXL Translate a CTAS 设定CDXLLogicalCTAS类的存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type
  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable 如果rel->rd_partdesc->nparts == 0,返回ErelstorageHeap存储类型
  • CXformUtils::PexprBuildIndexPlan Construct an expression representing a new access path using the given functors for operator constructors and rewritten access path. Non-heap tables not supported for GiST 非heap表不支持GiST判定

下面是ErelstorageAppendOnlyCols存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据AM获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageAppendOnlyRows存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据AM获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageForeign存储类型所涉及到的代码:

  • CTranslatorDXLToPlStmt::TranslateDXLTblScan Translates a DXL table scan node into a TableScan node
  • TranslatorQueryToDXL::TranslateRTEToDXLLogicalGet Returns a CDXLNode representing a from relation range table entry 新建CDXLLogicalForeignGet分支
  • CTranslatorRelcacheToDXL::RetrieveRel Retrieve a relation from the relcache given its metadata id. root partitions don’t have a foreign server 重要
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE分支
  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable for partitioned tables with foreign partitions, we want to ignore the foreign partitions for determining the storage-type (unless all of the partitions are foreign) as we’ll be separating them out to different scans later in CXformExpandDynamicGetWithForeignPartitions
  • CTranslatorUtils::GetTableDescr Create a DXL table descriptor from a GPDB range table entry fall back to the planner for queries on coordinator-only table if they are disabled with Orca
  • CTranslatorUtils::RelContainsForeignPartitions
  • COptTasks::PrintMissingStatsWarning Print warning messages for columns with missing statistics 不为外部表时打印missing statistic信息
  • CTranslatorDXLToExpr::PexprLogicalGet Create a Expr logical get from a DXL logical get store array of foreign partitions

下面是ErelstorageMixedPartitioned存储类型所涉及到的代码:

  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable mark any partitioned table with supported partitions of mixed storage types, this is more conservative for certain skans (eg: we can’t do an index scan if any partition is ao, we must only do a sequential or bitmap scan)
  • CXformIndexGet2IndexOnlyScan::Exfp 判定possible_ao_table
  • CXformIndexGet2IndexScan::Exfp 判定possible_ao_table
  • CXformUtils::FIndexApplicable Check if an index is applicable given the required, output and scalar expression columns 判定possible_ao_table
  • CXformUtils::PexprBitmapSelectBestIndex Given conjuncts of supported predicates, select the best index and construct a bitmap index path expression. Return unused predicates as residuals 判定possible_ao_table

下面是ErelstorageCompositeType存储类型所涉及到的代码:CTranslatorRelcacheToDXL::RetrieveRelStorageType中对应RELKIND_COMPOSITE_TYPE获取存储类型ErelstorageCompositeType

从上面的对比可以看出AP7将分区表子分区混合存储这种情况单独作为了一种存储类型ErelstorageMixedPartitioned。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/879622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用CSS实现一个模态框(Modal)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现模态框(Modal)效果⭐ HTML 结构⭐ CSS 样式⭐ JavaScript⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎…

重磅:谷歌发布多平台应用 AI 编程神器

前几天, 谷歌发布了一个多平台应用开发神器:IDX 。 IDX 背靠 AI 编程神器 Codey,支持 React、Vue 等框架,还能补全、解释代码。 更有特色的一点就是:这是一款基于浏览器的开发全栈、用于多平台应用开发的工具。 这款开…

C语言题目的多种解法分享 2之字符串左旋和补充题

前言 有的时候,这个系列专栏中的解法之间并无优劣,只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释,方便大家直接找到对应的函数,只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢&#xff0…

级联(数据字典)

二级级联: 一:新建两个Bean 父级: /*** Description 数据字典* Author WangKun* Date 2023/7/25 10:15* Version*/ Data AllArgsConstructor NoArgsConstructor TableName("HW_DICT_KEY") public class DictKey implements Seri…

学习笔记整理-JS-06-函数

一、函数基本使用 1. 什么是函数 函数就是语句的封装,可以让这些代码方便地被复用。函数具有"一次定义,多次调用"的优点。使用函数,可以简化代码,让代码更具有可读性。 2. 函数的定义和调用 和变量类似,函…

C++:模拟实现list及迭代器类模板优化方法

文章目录 迭代器模拟实现 本篇模拟实现简单的list和一些其他注意的点 迭代器 如下所示是利用拷贝构造将一个链表中的数据挪动到另外一个链表中&#xff0c;构造两个相同的链表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

【ES】【elasticsearch】分布式搜索

文章目录 ☀️安装elasticsearch☀️1.部署单点es&#x1f338;1.1.创建网络&#x1f338;1.2.下载镜像&#x1f338;1.3.运行 ☀️2.部署kibana&#x1f338;2.1.部署&#x1f338;2.2.DevTools ☀️3.安装IK分词器&#x1f338;3.1.在线安装ik插件&#xff08;较慢&#xff0…

ARM汇编快速入门

本文主要分享如何快速上手ARM汇编开发的经验、汇编开发中常见的Bug以及Debug方法、用的Convolution Dephtwise算子的汇编实现相对于C版本的加速效果三方面内容。 前言 神经网络模型能够在移动端实现快速推理离不开高性能算子&#xff0c;直接使用ARM汇编指令来进行算子开发无疑…

ad+硬件每日学习十个知识点(32)23.8.12 (元器件封装、PCB封装、3D的PCB封装)

文章目录 1.元器件封装属性值说明2.PCB封装标准说明&#xff08;M、N、L&#xff09;3.电阻的PCB封装&#xff08;阻焊层&#xff09;4.电感的PCB封装&#xff08;CD、CDRH&#xff09;1.CD31的意思是&#xff0c;直径3mm&#xff0c;高度1mm![在这里插入图片描述](https://img…

【SQL应知应会】索引(二)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 索引 • MySQL版 前言一、索引1.简介2.创建2.1 索引…

Gradio——快速部署可视化人智能应用

前言 Gradio是一个开源的Python库&#xff0c;用于快速构建机器学习和数据科学演示的应用。它可以帮助你快速创建一个简单漂亮的用户界面&#xff0c;以便向客户、合作者、用户或学生展示你的机器学习模型。此外&#xff0c;还可以通过自动共享链接快速部署模型&#xff0c;并获…

IntelliJ IDEA热部署:JRebel插件的安装与使用

热部署 概述JRebel 概述 热部署&#xff0c;指修改代码后&#xff0c;无需停止应用程序&#xff0c;即可使修改后的代码生效&#xff0c;其有利于提高开发效率。 热部署方式&#xff1a; 手动热部署&#xff1a;修改代码后&#xff0c;重新编译项目&#xff0c;然后启动应用程…

【软件测试】Linux系统下安装jdk配置环境变量(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、安装环境 操作…

UGUI事件系统EventSystem

一. 事件系统概述 Unity的事件系统具有通过鼠标、键盘、游戏控制柄、触摸操作等输入方式&#xff0c;将事件发送给对象的功能。事件系统通过场景中EventSystem对象的组件EventSystem和Standalone Input Module发挥功能。EventSystem对象通常实在创建画布的同时被创建的&#xf…

c++杂谈-5

目录 一、一些c11新特性1. decltype关键字及函数后置返回类型2. 函数后置返回类型 二、c的内存模型三、函数指针和回调函数四、函数模版的注意事项 一、一些c11新特性 1. decltype关键字及函数后置返回类型 在C11中&#xff0c;decltype操作符&#xff0c;用于查询表达式的数…

HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

2023年8月6日华为开发者大会2023&#xff08;HDC.Together&#xff09;圆满收官&#xff0c;伴随着HarmonyOS 4的发布&#xff0c;华为向开发者发布了汇聚所有最新开发能力的HarmonyOS NEXT开发者预览版&#xff0c;并分享了围绕“一次开发&#xff0c;多端部署” “可分可合&a…

通过Microsoft Loopback Adapter实现虚拟机和物理机的通信

问题 问&#xff1a;不借助路由器或交换机的情况下&#xff0c;能不能实现主机和虚拟及之间两个软件的通信呢&#xff1f;要求主机和虚拟及均有独立的ip地址&#xff0c;从而进行指定源的组播通信。 答&#xff1a;可以。通过借助虚拟网络适配器&#xff0c;不需要路由器或交…

深度思考rpc框架面经系列之三

6 一个rpc框架的请求调用的流程&#xff08;小红书面试&#xff09; 6.1 讲讲rpc调用原理&#xff0c;比如服务怎么发现&#xff0c;怎么调用&#xff0c;提供者怎么响应。怎么去请求&#xff0c;又怎么回来的 一个RPC&#xff08;远程过程调用&#xff09;框架的核心目的是允…

百度飞浆实战-手写数字识别

目录 参考建模过程1、数据加载和预处理2、模型的网络设计和开发模型组网 3、模型训练 代码实战1、打开aistudio找到项目 参考 视频教程 PaddleAPI DOC 建模过程 1、数据加载和预处理 飞桨框架帮助我们将MNIST数据集进行了内置 数据集名称&#xff1a; MNIST 数据集官网 &am…

2023-08-14 LeetCode每日一题(合并二叉树)

2023-08-14每日一题 一、题目编号 617. 合并二叉树二、题目链接 点击跳转到题目位置 三、题目描述 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会…