在简单描述了ppg_fdw的架构和工作流程之后,下面将会结合TPCH的实例来描述设计思想。
前面已经提到TPCH是一个工业界认可的标准测试集合(包括数据和SQL的模板),主要用来测试OLAP系统的性能。用户可以用TPCH来生成测试的数据和SQL实例。TPCH的DW模型是一个典型的星座模型,其中lineitem和orders表示fact表,其余的6张表:customer nation part partsupp region 和supplier,都可以看做dimension表。表之间通过外键进行关联,tpch的SQL实例中也反映了这一点。(一般来说,建模比较理想的DW之间的关联关系就应该这样清晰)
在导入数据的时候,将dimension表导入到后台的OP的各个节点上,也就是完全复制。而对于fact表,则对fact表的主键按照范围进行水平分片,将各个水平分片导入到对应的OP上。数据的分部直接决定了最终的分布式查询计划,后面的例子会一再的说明这一点。
在完成了数据的导入之后,下面就直接步入正题了。
在TPCH的SQL模板中,一共有22个(本人使用了TPCH2_15,可能在各个版本之间有略微的差异)。TPC会根据这些模板来生成具体的实例。首先,对于这些SQL可以简单的分为两类:一类是只涉及dimension表的SQL,另外一类就是涉及到了fact表的SQL。对于只涉及dimension表的查询来说,处理比较简单,DQP可以直接选择一个后台的OP,直接转发给选定的后台OP,获得结果后DQP将结果返回给client。由于这些元数据的存储暂时还没有调研,并且查询的处理逻辑比较简单,这里就没有实现了,To Be Done。下面重点要说的就是对于涉及到fact表的SQL的查询处理。主要内容包括对agg的处理,join的处理,子查询的处理和order by和limit的处理。
首先从最简单的开始,TPCH的模板6比较简单,生成的SQL实例如下:
select
sum(l_extendedprice * l_discount) as revenue
from
lineitem
where
l_shipdate >= date '1997-01-01'
and l_shipdate < date '1997-01-01' + interval '1' year
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
and l_quantity < 25
LIMIT 1;
这条SQL比较简单,只是在lineitme上施加了若干简单过滤条件,然后再求一个sum,最后做一个limit。对于这个SQL, ppg_fdw的planner生成的查询计划如下:
(limit)
|
(sum)
|
(foreign_scan)
这个图可能过于简单,但是直接明了的说明了全局的执行plan。在DQP上,会从上到下使用经典的迭代器的模型来执行,plan的叶子节点是foreign_scan节点(foreign_scan实际上就是调用了我们上一篇里面提到、和scan相关的接口)。这个节点负责将OP上执行的局部计划以SQL的形式发送给后台的若干台OP,下推的SQL实际是:
select
sum(l_extendedprice * l_discount)
from
lineitem
where
l_shipdate >= date '1997-01-01'
and l_shipdate < date '1997-01-01' + interval '1' year
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
and l_quantity < 25
一般说来,我们希望将尽可能多的operator下推,在这里,我们实际下推了filter project 和agg。
对于OLAP来说,agg是必须需要处理的。一般来说,对于agg来说,可以采用二次聚集的方式,就如上面简单的图示;或是直接的下推。如果agg存在group操作,且group所作用的字段组合前缀就是用来将表水平分片的字段,那么可以直接下推agg,否则需要做二次聚集,就如上所示。
Agg的处理
在这个例子中,sum的二次聚集在逻辑上可以简单的表示为sum(sum):外层的sum在DQP上执行,内层的sum则下推到OP执行。 和它类似的有min max和count:,而对于avg的二次聚集则相对麻烦一点,逻辑上表示为 sum(sum)/sum(count),可能画成图比较容易理解:
/ (除操作)
/ \
sum sum
/ \
sum count
最下层的sum和count会直接下推到OP来执行,而在DQP上执行的是 sum count和/ 这三个操作。
(如果agg的参数中含有disctinct,则处理比较简单,将distinct下推到OP,然后再做二次的distinct,TO BE DONE)
分享到:
相关推荐
ppg_fdw A distributed parallel query engine, based on fdw and hooks of PG.Our idea is to create a shared-nothing system, which is composed many pgsql servers. For these pgsql servers, one server (we ...
标题中的"datasrc_PPG.rar_PPG信号_datasrc_PPG_ppg data download_心电PPG信号_心电信"揭示了这是一个与心电图(ECG)和光体积描记术(Photoplethysmography,简称PPG)信号相关的数据资源。PPG是一种非侵入性的...
本压缩包文件“PPG_features-master_welcomee1m_ppg特征提取_PPG信号处理_PPG信号处理代码_PPG_”主要包含了与PPG信号预处理和特征提取相关的代码资源,适合学习和参考。 首先,我们来了解PPG信号的基本原理。PPG...
《PyPI官网下载:ppg_common-1.14.tar.gz——Python库在分布式环境中的应用》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取开源软件包的重要平台。"ppg_common-1.14.tar.gz"就是这样一个...
标签中的"ppg"、"ppg_hr"、"ppg_matlab"、"the_signal"和"matlab_ppg"是关键主题标签,它们分别对应PPG技术、心率估算、使用MATLAB进行PPG处理、信号本身以及MATLAB中处理PPG的代码。 在压缩包的文件名列表中,只有...
接下来,代码可能会使用某种算法来检测PPG信号中的峰值,这些峰值对应于心脏的搏动,进而计算出心率。常见的峰值检测算法有阈值法、模板匹配法、导数法等。 在剧烈运动场景下,心率估算的准确性至关重要。因此,该...
标题中的"bandpass.zip_PPG_PPG信号_matlab 特征提取 信号处理_ppg特征提取_波峰"表明这是一个关于PPG(光电容积描记术)信号处理的项目,其中包含了使用MATLAB进行特征提取,特别是识别波峰的重要环节。在PPG信号...
`.whl`是一种预编译的Python软件包格式,旨在简化安装过程,使得用户能够在不依赖于构建环境的情况下快速部署和使用库。 首先,我们来看`ppg_common`这个名字,"ppg"可能是“Python编程通用”或项目特定的缩写,而...
资源分类:Python库 所属语言:Python 资源全名:ppg_common-1.39.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《PPG.rar:PPG_The Power——C++实现的简单游戏解析》 "PPG.rar_PPG_The Power" 是一个以C++语言编写的简单游戏,它以美国动画片《飞天小女警》(Powerpuff Girls,简称PPG)为主题,为玩家提供了一次重温经典的...
标签进一步强调了主题,"ecg_and_ppg"表示同时涉及ECG和PPG的分析,"ppg_matlab"表明使用MATLAB处理PPG数据,而"the_signal"可能指的是信号处理的一般概念。 压缩包内的文件名为"Signal",很可能包含的是原始信号...
标题中的“PPG.rar_PPG_footel7_fujitsu_thou785_单片机ppg”揭示了我们正在处理一个与富士通(Fujitsu)单片机相关的项目,具体是关于心率监测的光电容积脉搏波(PPG)功能。这个项目可能涉及到一个名为“footel7”...
《PPG.zip - PPG_The Power》是一个基于C++编程语言开发的简单游戏,它以流行的卡通《神奇女侠》(Powerpuff Girls)为主题。这款游戏可能旨在重现动画片中的角色和故事情节,为玩家提供一种互动式的娱乐体验。 在...
This_data_set_records_the_blood_glucose_and_PPG_da_glucose-PPG-data-set
workshopios_ppg:塞米纳里奥斯(Resinhas dos encontros)
标题中的"yangben1.rar_PPG_yangben1_人体_脉_脉象"表明这是一个与PPG(光体积描记法)相关的数据集,主要关注人体的脉象研究。脉象在中国传统医学中是非常重要的诊断手段,它涉及到中医对人体健康状态的判断。在这...
信道预测matlab代码袖带血压预测 该存储库托管使用两种方法根据ECG和PPG信号预测血压的代码。 使用机器学习方法进行特征提取和回归。 基于深度学习的回归。 入门: 克隆此仓库: git clone ...数据集: ...
引用来源:如果你使用这个数据集,请参考 环境 原始源是在 Matlab 2016a 中开发的。 建议使用同等或更高版本。 此应用程序使用以下 Matlab 工具箱: 下载 该应用程序可以通过 Matlab 中的内置工具下载。 如何跑步 该...
文件"Keysight_PXI_Digitizer_PPG-main"可能包含了驱动程序的安装文件、使用手册、示例代码或者配置文件,这些都是为了帮助用户顺利安装和使用Keysight PXI Digitizer与Labber的接口。在实际操作中,用户应按照文档...
标题 "Sensor_ECG_PPG_MAX86150_Dev-Board-master.zip" 提供了有关此压缩包的核心信息:它包含一个与MAX86150传感器相关的EKG(心电图)和PPG(光电容积描记法)开发板的项目。MAX86150是一款集成的心率和血氧饱和度...