热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

不在PrestovsSparkSQL的实现中

如何解决《不在PrestovsSparkSQL的实现中》经验,为你挑选了1个好方法。

我得到了一个非常简单的查询,当在同一硬件上运行Spark SQL和Presto时(3小时vs 3分钟),显示出显着的性能差异。

SELECT field 
FROM test1 
WHERE field NOT IN (SELECT field FROM test2)

经过对查询计划的研究,我发现原因是Spark SQL如何处理NOT IN谓词子查询。为了正确处理NOT IN的NULL,Spark SQL将NOT IN谓词转换为Left AntiJoin( (test1=test2) OR isNULL(test1=test2))

Spark SQL引入OR isNULL(test1=test2)了确保的正确语义NOT IN

但是,ORLeft AntiJoin连接谓词的唯一可行的物理连接策略Left AntiJoinBroadcastNestedLoopJoin。在当前阶段,我可以将NOT IN改写为NOT EXISTS来解决此问题。在NOT EXISTS的查询计划中,我可以看到join谓词是Left AntiJoin(test1=test2)为NOT EXISTS(5分钟完成)导致更好的物理联接运算符的原因。

到目前为止,我很幸运,因为我的数据集当前没有任何NULL属性,但是将来可能会具有,而NOT IN的语义正是我真正想要的。

所以我检查了Presto的查询计划,它没有真正提供,Left AntiJoinSemiJoin与一起使用FilterPredicate = not (expr)。Presto的查询计划没有提供太多信息,例如Spark。

所以我的问题更像是:

我可以假设Presto有更好的物理联接运算符来处理NOT IN操作吗?与Spark SQL不同,它不依赖于连接谓词的重写isnull(op1 = op2)来确保逻辑计划级别中NOT IN的正确语义。



1> Piotr Findei..:

我实际上是在Presto中实施NULL半联接(IN谓词)处理的人。

Presto除了使用散列分区¹外,还使用“复制空值和任何行”复制模式,这使它可以INNULLs的任一侧都存在s 的情况下正确处理IN,而不会退回到广播,或者使执行成为单线程或单线程-节点。运行时性能成本实际上与NULL根本不存在值的情况相同。

如果您想了解有关Presto内部的更多信息,请加入Presto Community Slack#dev上的频道。

¹)确切地说,半连接是基于哈希的分区或广播,具体取决于基于成本的决策或配置。


推荐阅读
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文详细介绍如何使用 Apache Spark 执行基本任务,包括启动 Spark Shell、运行示例程序以及编写简单的 WordCount 程序。同时提供了参数配置的注意事项和优化建议。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 尾花|花萼_相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)
    尾花|花萼_相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman) ... [详细]
  • 本文介绍了一款基于Spark和Scala开发的应用程序,该应用通过配置单元作为输入,经过Spark处理层进行批处理操作,最终数据存储于Cassandra数据库中。文章探讨了如何实现该应用的测试自动化,包括业务逻辑测试、集成测试、用户验收测试(UAT)及回归测试。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • 本文详细介绍了如何配置Apache Flume与Spark Streaming,实现高效的数据传输。文中提供了两种集成方案,旨在帮助用户根据具体需求选择最合适的配置方法。 ... [详细]
author-avatar
imba-Y_685
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有