美文网首页
【Spark】SparkOptimizer 优化规则:Optim

【Spark】SparkOptimizer 优化规则:Optim

作者: PowerMe | 来源:发表于2017-11-24 12:18 被阅读57次

这两天在SparkSQL Core看到一个优化规则:OptimizeMetadataOnlyQuery,它的意思是如果一个sql只涉及表的分区字段元信息查询的话,执行过程将不会路由到TableScanExec的PhysicalPlan进行表扫描,而是通过分区元信息的字段和值构建LocalRelation,进而构造一个LocalTable,走LocalTableScanExec的PhysicalPlan。

这个规则的触发要满足下面几个条件:

  • sql中所有查询的字段必须是分区字段
  • 如果使用了聚合函数,必须满足下面条件:
    1. 聚合表达式是分区字段,如(col等为tbl的分区字段,下同):
      SELECT col FROM tbl GROUP BY col.
    2. 对分区字段使用的聚合函数带Distinct,如:
      SELECT count(DISTINCT col) FROM tbl GROUP BY col.
    3. 对分区字段使用的聚合函数为Max,Min,First、Last函数,如:
      SELECT Max(col) FROM tbl GROUP BY col.

如果满足上面的条件,将会对逻辑计划进行优化,调用replaceTableScanWithPartitionMetadata,做的事情包括:
1. 把CatalogTable中的分区字段取出来;
2. 把CatalogTable中的分区值取出来;
3. 构建LocalRelation(partAttrs, partitionData)

简单来说,就是把分区字段及其值取出来,构造一个本地表,这样在执行时就不需要去扫描真正的表了。

如果要禁用该优化,需要设置参数spark.sql.optimizer.metadataOnly=false,spark里面默认是true。

相关文章

  • 【Spark】SparkOptimizer 优化规则:Optim

    这两天在SparkSQL Core看到一个优化规则:OptimizeMetadataOnlyQuery,它的意思是...

  • 【Spark】SparkOptimizer 优化:Optimiz

    最近在调试Spark-SQL的时候看了一个OptimizeIn优化规则,该规则做了两个事情: 去除In中重复的Li...

  • 优化器

    优化器(optim) 优化算法模块(torch.optim) torch.optim 实现了丰富的优化算法,包括S...

  • 优化器

    torch.optim : torch.optim是实现各种优化算法的包 要使用torch.optim,必须构造一...

  • MySQL

    索引 MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optim...

  • pytorch中的optim

    torch.optim torch.optim是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备...

  • 什么是ASO

    (App Store Optimization)应用商店优化 什么是ASO?ASO(App Store Optim...

  • Spark性能调优

    《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spar...

  • Spark性能优化:数据倾斜调优(转)

    《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spar...

  • Spark性能优化:开发调优篇(转)

    《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spar...

网友评论

      本文标题:【Spark】SparkOptimizer 优化规则:Optim

      本文链接:https://www.haomeiwen.com/subject/eiixbxtx.html