基于成本的优化器

火花SQL可以使用一个基于成本的优化器(CBO)来提高查询计划。这是特别有用的查询与多个连接。为此收集表和列统计信息是至关重要的,保持最新。

收集统计信息

得到的全部利益CBO收集都是很重要的列统计表统计信息。命令可以使用收集统计分析表。

提示

保持数据更新,运行分析写完。

验证查询计划

有几种方法可以验证查询计划。

解释命令

检查如果计划使用统计数据,使用SQL命令

  • 砖运行时7。x,上图:解释

如果统计数据丢失,那么查询计划可能不是最优的。

= =优化逻辑计划= =(s_store_sk),(s_store_sk,(1)作为(1)l),统计数据(sizeInBytes=20.0B,rowCount=1,提示=没有一个)+ -项目(s_store_sk),统计数据(sizeInBytes=18.5MB,rowCount=1.62 e + 6,提示=没有一个)+ -加入内心的,(d_date_sk=ss_sold_date_sk),统计数据(sizeInBytes=30.8MB,rowCount=1.62 e + 6,提示=没有一个):- - - - - -项目(ss_sold_date_sk,s_store_sk),统计数据(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=没有一个):+ -加入内心的,(s_store_sk=ss_store_sk),统计数据(sizeInBytes=48.9GB,rowCount=2.63 e + 9,提示=没有一个)::- - - - - -项目(ss_store_sk,ss_sold_date_sk),统计数据(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=没有一个)::+ -过滤器(isnotnull(ss_store_sk)& &isnotnull(ss_sold_date_sk)),统计数据(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=没有一个)::+ -关系(ss_store_sk,ss_sold_date_sk]拼花,统计数据(sizeInBytes=134.6GB,rowCount=2.88 e + 9,提示=没有一个):+ -项目(s_store_sk),统计数据(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=没有一个):+ -过滤器isnotnull(s_store_sk),统计数据(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=没有一个):+ -关系(s_store_sk]拼花,统计数据(sizeInBytes=88.0KB,rowCount=1.00 e + 3,提示=没有一个)+ -项目(d_date_sk),统计数据(sizeInBytes=12.0B,rowCount=1,提示=没有一个)+ -过滤器((((isnotnull(d_year)& &isnotnull(d_date))& &(d_year=2000年))& &(d_date=2000年- - - - - -12- - - - - -31日))& &isnotnull(d_date_sk)),统计数据(sizeInBytes=38.0B,rowCount=1,提示=没有一个)+ -关系(d_date_sk,d_date,d_year]拼花,统计数据(sizeInBytes=1786.7KB,rowCount=7.30 e + 4,提示=没有一个)

重要的

rowCount统计查询与多个连接尤为重要。如果rowCount丢失,这意味着没有足够的信息来计算(也就是说,一些需要列没有数据)。

火花SQL用户界面

使用SQL火花UI页面查看执行计划和统计数据的准确性。

失踪的估计

失踪的估计

等一行输出:2451005年美国东部时间:N /一个意味着这个运营商产生大约2 m行,没有数据可用。

好估计

好估计

等一行输出:2451005年美国东部时间:1616404(1 x)意味着这个操作符产生约。2 m行,估计是约。1.6米和估计误差因素是1。

坏的估计

坏的估计

等一行输出:2451005年美国东部时间:2626656323意味着这个运营商产生大约2 m行,估计是2 b行,所以估计误差因素是1000。

禁用基于成本的优化器

CBO默认情况下是启用的。你禁用CBO通过改变spark.sql.cbo.enabled国旗。

火花相依(“spark.sql.cbo.enabled”,)