【问题标题】:Spark SQL broadcast hint intermediate tablesSpark SQL 广播提示中间表
【发布时间】:2019-02-03 00:41:37
【问题描述】:

我在使用广播提示时遇到问题(可能是缺乏 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 查询中完成。

【问题讨论】:

    标签: apache-spark pyspark-sql


    【解决方案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 ...
    

    【讨论】:

    • 谢谢(我以为我已经写了这篇文章:S),想做一些更透明的事情(我已经知道子查询),但我不知道 CTE,我猜有不是其他选择:)
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多