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

的意思是,我想强制广播加入(我宁愿避免更改 spark 参数以在任何地方强制它),但我不知道如何引用名为 AjoinedwithB 的表

当然,我可以拆分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 ...

最新更新