分布式数据库常用算子介绍
2022/3/9 19:14:40
本文主要是介绍分布式数据库常用算子介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SQL查询的执行过程,就像工厂的加工流水线,层层递进,最终得到想要的结果,而SQL算子就好比其中的一道道工序。
本篇简要介绍一下SQL执行计划中,一些常见算子的含义和逻辑。
• indexscan 索引扫描
当数据表中创建了索引,并使用索引字段进行查询时,会进行索引扫描。
• tablescan 顺序表扫描
tablescan 负责从磁盘中以连续块的形式从磁盘中读取数据页。
一般在SQL查询中,有几张表就要有几个 tablescan 操作。在分布式数据库中,同一张表的扫描,还会被分配到多个结点使用分布式的方式执行。
• project 投影
投影操作,是从表中根据查询字段选择相关的列。
select cc_name, cc_class
from call_center
where cc_class = ‘large’
limit 10;
在这个查询中,tablescan 操作会将 call_center 表的数据做全字段读取,project 操作负责筛选出 cc_name, cc_class 这两个列。
• filter 过滤
filter 会根据 where 条件中的筛选条件,筛选出符合的记录。其中过滤条件也叫谓词逻辑。
在两表连接时,谓词逻辑可以在 join 前执行,也可以在 join 后执行。因为 join 操作是做笛卡尔积,如果在 join 后执行谓词逻辑,将大大增加计算的基数,所以一般的数据库优化执行器都会将谓词下推,让谓词逻辑在join操作前完成。
上述的 project 和 filter 算子可以在数据表的列和行两个维度对数据进行限定,大大缩小处理的数据量,降低资源消耗,是SQL优化时常用的方法。
• exchange
在分布式数据库中,tablescan 等操作是分布式进行的,而各个分支结点将结果汇总的过程就是 exchange 操作。
exchange 操作还可以细分为 LocalExchange 和 RemoteExchange。LocalExchange 即本地数据结果汇总,没有网络IO;而RemoteExchange是数据从不同的数据结点汇总到某一结点,需要网络传输。
• join 连接
连接的本质是两个表做笛卡尔积操作。
select ctr_total_return
from customer_total_return_t1 ctr1
where ctr1.ctr_total_return >
(select avg(ctr_total_return)
from customer_total_return_t2 ctr2
where ctr1.ctr_store_sk = ctr2.ctr_store_sk);
在这个SQl中,先会对表 customer_total_return_t2 进行读取,并以 ctr_store_sk 为 key ,统计 avg(ctr_total_return) 然后 customer_total_return_t1 和 customer_total_return_t2 会做笛卡尔积,再进行条件过滤。
• aggregation 聚合
对数据做分组聚合,统计分析。
一般会先在每个结点先做一次分组统计,exchange 数据汇合之后再做一次合并统计。
select avg(ctr_total_return)
from customer_total_return_test
where ctr_store_sk = 10;
上面这个查询中只有一张表,由于是分布式执行,表虽然只扫描一次,但是会在多个数据结点进行扫描,所以 avg 函数会在每个结点先执行一次,exchange 汇总完后,会再进行一次avg操作。
• values
select 1 + 1, DATE ‘2001-08-22’, ARRAY[1, 2, 3] ;
有时SQL中数据不是从表中查询出来的,而是给定的一个数字、字符或数组,这时 values 操作会将这些标识符转化成具体的数值。
• scalar 标量
根据策略,给定一个结果值。
select
case when (select count(*)
from store_sales
where ss_quantity between 81 and 100) > 18213
then 1
else 2 end bucket5
from reason
where r_reason_sk = 1
;
如case when 中根据判断条件计算结果时会使用。
• markDistinct
select avg(ss_sales_price) B1_LP,
count(distinct ss_list_price) B1_CNTD
from store_sales;
distinct操作时,对数据的类别进行标识。
• window 窗口
窗口函数是应用于窗口和分区的函数,可分为三类:排名函数,分析函数和聚合函数。
select cs_call_center_sk,
sum(cs_ext_sales_price) over(partition by cs_sold_date_sk) as revenueratio
from catalog_sales limit 100;
窗口函数计算时,会根据 partition by 后的字段进行分区,然后进行统计分析或排名。
• sort 排序
select ss.ca_county, ss.d_year
from ss, sc
where ss.ca_county = sc.ca_county
order by ss.d_year;
排序操作。
• topn
即 limit 操作,获取限定的记录条数。
• output
向客户端输出结果。
原文链接:https://blog.csdn.net/m0_51698806/article/details/113683729
这篇关于分布式数据库常用算子介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南