sparksql中的broadcast join和prestodb中的dynamic filter比较

本文对比了SparkSQL和Presto在处理Broadcast Join和Dynamic Filter上的策略。在给定的例子中,SparkSQL通过Broadcast Join优化了查询,尤其是在面对小表时。而Presto在处理动态生成的过滤条件时,未实现Broadcast,导致全表扫描和shuffle操作,影响性能。文章还引用了Presto的一个PR讨论动态过滤优化的可能性。
摘要由CSDN通过智能技术生成

    今天在prestodb的qq群里看到有人提到说一个子查询在presto中非常慢:

    SELECT *
    FROM his_data_opt
    WHERE act_no IN (
            SELECT act_no
            FROM id_act_map
            WHERE id_number = '726067685144725'
            );

    可以看出,这是一个普通的非相关子查询,如果内部子查询经过过滤条件只剩几条,那么整个查询应该非常完美的在几秒中出结果,结果却卡着不动。原来是presto join处理的问题,对于普通的where条件,外部查询会把这个where条件下推,进行表过滤,但现在外表这个过滤条件是一个动态生成的条件,presto在进行上层的逻辑计划优化时,不知道这个动态生成的条件到底会产生多少条结果,于是presto把外部表进行了全表扫描,这在presto中成为dynamic filter,目前有人提了PR,还没有合并到主版本中。来看presto中的执行计划,查询语句如下࿱

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值