Spark SQL 广播提示中间表

Spark SQL broadcast hint intermediate tables

我在使用广播提示时遇到问题(可能是缺乏 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 ....

我的意思是,我想强制广播加入(我宁愿避免更改 spark 参数以强制它无处不在),但我不知道如何引用名为 [=13= 的 table ]

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

您可以使用任一子查询

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 ...