赞
踩
8a mpp是一款分布式的数据库,可以有多个cluster节点(控制节点)和data节点(数据节点),查询计划就是针对用户输入的sql给出能够使查询时间最快的分布式计划。
例如目前有一个3节点的集群。(datanode1,datanode2,datanode3)
首先普及下8a mpp支持的表类型:随机分布表,hash分布表,复制表。
1、随机分布表:
数据随机分布在所有的data节点上。 比如10条数据,datanode1上随机插入了4条,datanode2上随机插入了3条,datanode3随机插入了3条。
2、hash分布表:
按照定义的hash键值计算hash,然后分布到所有的data节点上。比如10条数据,按照key列插入的值计算hash,然后分布到固定对应的节点上。
3、复制表
把所有数据在所有节点上都保存一份。所有节点都有全部的数据。
查询计划就是针对所查询的表给出一条可查询出数据的计划。
比如:
1、查询一个复制表select × from tcopy; 由于复制表的是存在所有节点上,并且每个节点都是全部数据,那计划就可以选择任意一个可用(保证能够正常的)的节点进行查询,然后返回数据即可。
2、查询一个分布表(随机分布或hash分布) select × from tdis; 由于分布表是每个节点都可能有,所以需要从所有节点都获取数据,然后返回。
3、查询多个表的连接涉及到条件,需要考虑的就更多了,复制表和复制表的连接可以直接查询,但是分布表和分布表就需要进行评估,多于两个表进行连接还需要评估连接顺序。目前就不深入介绍了。
说完查询计划后,然后来介绍下如何去查看计划。
查询语句:
select n_name,
sum(l_extendedprice * (1 - l_discount)) as revenue
from customer,
orders,
lineitem,
supplier,
nation,
region
where c_custkey = o_custkey
and l_orderkey = o_orderkey
and l_suppkey = s_suppkey
and c_nationkey = s_nationkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'ASIA'
and o_orderdate >= date '1994-01-01'
and o_orderdate < date '1994-01-01' + interval '1' year
group by n_name
order by revenue desc;
tpch1000s的数据。customer, orders, lineitem,supplier,nation,region都是随机分布表。
使用explain extended select ....;可以查看集群的详细计划和步骤。如下图:
咱们先来看下基本的定义:
Leaf type:当前步骤的类型 REGULAR STEP:一般的拉表步骤 COMBINER_STEP:汇总步骤
Need combiner:是否需要汇总
Target temp table:目标的中间表
Temp table uesd:利用的中间表
Hash Redist Indexs:重分布的键值位置,就是投影列的位置
从上面的计划看,
首先第一步是拉表,目标中间表名是_tmp_2097588416_733_t438_1..表明这是一个复制表。从region拉表到临时表,最终临时表为复制表。
第二步是拉复制表_tmp_2097588416_733_t438_2...。把第一步的临时表和nation进行join之后的结果作为目标临时表。
第三步是拉复制表_tmp_2097588416_733_t438_3...。把第二步的临时表和supplier做join之后的结果作为目标临时表。
第四步是orders带单表条件拉复制表_tmp_2097588416_733_t438_4....。
第五步是lineitem表拉复制表_tmp_2097588416_733_t438_5....。
第六步是拉分布表_tmp_rht_2097588416_733_t438_6...。hash redist indexs:1说明使用第一个投影作为hash键进行重分布。
_tmp_2097588416_733_t438_3... inner join custom inner join _tmp_2097588416_733_t438_4... inner join _tmp_2097588416_733_t438_5...按照n_name重分布,同时做group by计算sum
第七步是拉复制表_tmp_2097588416_733_t438_7...,在第六步的临时表基础上进行group by聚集。注意此步骤需要汇总。group by算子是在所有节点分别做group by,然后汇总。
第八步是汇总步骤,获取最终的结果。
以上就是简单的介绍8a mpp分布式计划和查看分布式的详细计划。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。