zoukankan      html  css  js  c++  java
  • 关于sparksql中的hint

    前言

    在Spark中,结构化查询可以通过指定查询提示(hint)来进行优化。

    查询提示,即向查询加入注释,告诉查询优化器提供如何优化逻辑计划, 这在查询优化器无法做出最佳决策时十分有用。

    Spark SQL支持COALESCE,REPARTITION以及BROADCAST提示。 在分析查询语句时,所有剩余的未解析的提示将从查询计划中被移除。

    Spark SQL 2.2增加了对提示框架(Hint Framework)的支持。

    如何使用查询提示hint

    我们可以使用Dataset.hint运算符或带有提示的SELECT SQL语句指定查询提示。

    // Dataset API
    val q = spark.range(1).hint(name = "myHint", 100, true)
    val plan = q.queryExecution.logical
    scala> println(plan.numberedTreeString)
    00 'UnresolvedHint myHint, [100, true]
    01 +- Range (0, 1, step=1, splits=Some(8))
    
    // SQL
    val q = sql("SELECT /*+ myHint (100, true) */ 1")
    val plan = q.queryExecution.logical
    scala> println(plan.numberedTreeString)
    00 'UnresolvedHint myHint, [100, true]
    01 +- 'Project [unresolvedalias(1, None)]
    02    +- OneRowRelation
    

    SELECT SQL语句支持查询提示作为SQL查询中的注释,Spark SQL将其转换为逻辑计划中的UnresolvedHint一元逻辑运算符。

    COALESCE 和 REPARTITION 提示
    Spark SQL 2.4增加了对COALESCE和REPARTITION提示的支持(使用SQL注释), 语法如下:

    SELECT /*+ COALESCE(5) */ …​
    
    SELECT /*+ REPARTITION(3) */ …​
    

    Broadcast提示
    Spark SQL 2.2支持使用广播标准函数或SQL注释的BROADCAST提示 ,语法如下:

    SELECT /*+ MAPJOIN(b) */ …​
    
    SELECT /*+ BROADCASTJOIN(b) */ …​
    
    SELECT /*+ BROADCAST(b) */ …​
    

    参考资料

    Hint Framework

  • 相关阅读:
    最有价值的专家--微软官方网站
    CC++初学者编程教程(16) 搭建Xcode cocos2dx开发环境--尹成老师博客
    微软最具价值的专家之毛星云博客
    Winsock IO模型之IOCP模型
    IOCP模型与网络编程
    关于proc索引的创建
    查找表存在于那些proc中
    Sql 时间做条件
    Sql 无指定条件,防并发update
    sql 根据客户需用 增减查询字段
  • 原文地址:https://www.cnblogs.com/lestatzhang/p/10669547.html
Copyright © 2011-2022 走看看