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