Spark SQL广播提示中间表

时间:2019-02-02 12:27:05

标签: apache-spark pyspark-sql

我在使用广播提示时遇到了问题(也许是缺乏SQL知识)。

我有一个类似的查询

SELECT * /* broadcast(a) */
FROM a 
INNER JOIN b
ON ....
INNER JOIN c
on ....

我想做

SELECT * /* broadcast(a) */
FROM a 
INNER JOIN b 
ON ....
INNER JOIN c /* broadcast(AjoinedwithB) */
on ....

我的意思是,我想迫使广播加入(我宁愿避免改变火花参数,以迫使它无处不在),但我不知道如何引用命名的表AjoinedwithB

我当然可以拆分SQL,使用DF API等。但是我想在一个SQL查询中完成。

1 个答案:

答案 0 :(得分:1)

您可以使用任一子查询

SELECT /*+ broadcast(a_b) */ *
FROM 
    (SELECT /*+ broadcast(a) */ * FROM a JOIN b ON ...) AS a_b 
    JOIN c ON ...

或CTE:

WITH a_b AS (SELECT /*+ broadcast(a) */ * FROM a JOIN b ON ...)
SELECT /*+ broadcast(a_b) */ * FROM a_b JOIN c ON ...