关于sparksql中的hint

Posted LestatZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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

以上是关于关于sparksql中的hint的主要内容,如果未能解决你的问题,请参考以下文章

Spark Hint

以下是关于Controller的一些Hint

Oracle10g中的hints调整机制详解

关于代码片段的时间复杂度

如何将片段中的 ListView 对象的数据传递给 Activity?

Android - 一个选项卡中的多个片段