Spark SQL 是不是包含针对连接的表流优化?

     2023-04-18     247

关键词:

【中文标题】Spark SQL 是不是包含针对连接的表流优化?【英文标题】:Does Spark SQL include a table streaming optimization for joins?Spark SQL 是否包含针对连接的表流优化? 【发布时间】:2015-08-20 20:15:53 【问题描述】:

Spark SQL 是否包含针对连接的表流式优化,如果包含,它如何决定要流式传输哪个表?

在进行连接时,Hive 假定最后一个表是最大的表。作为一种连接优化,它将尝试缓冲较小的连接表并将最后一个连接表流过。如果连接列表中的最后一个表不是最大的,Hive 有 /*+ STREAMTABLE(tbl) */ 提示,告诉它应该流式传输的表。从 v1.4.1 开始,Spark SQL 不支持 STEAMTABLE 提示。

已针对 Spark SQL 之外的正常 RDD 处理提出此问题,here。答案不适用于开发人员无法控制显式缓存操作的 Spark SQL。

【问题讨论】:

【参考方案1】:

前段时间我已经在寻找这个问题的答案,我所能想到的只是设置一个spark.sql.autoBroadcastJoinThreshold 参数,默认为 10 MB。然后它将尝试自动广播所有大小小于您设置的限制的表。加入顺序在此设置中不起作用。

如果您有兴趣进一步提高连接性能,我强烈推荐this presentation。

【讨论】:

【参考方案2】:

这是即将推出的 Spark 2.3RC2 正在投票支持下一个版本)。

从 v1.4.1 开始,Spark SQL 不支持 STREAMTABLE 提示。

它也没有出现在最新的(并且投票将很快发布)Spark 2.3 中。

不支持 STREAMTABLE 提示,但考虑到最近的更改(在 SPARK-20857 Generic resolved hint node 中)构建一个应该相当容易编写的提示框架。

您必须编写一些支持 STREAMTABLE 的 Spark 优化和可能的物理计划(这似乎需要做很多工作),但这是可能的。工具就在那里。

关于连接优化,在即将到来的 Spark 2.3 中有两个主要的逻辑优化:

    ReorderJoin CostBasedJoinReorder(专门用于基于成本的优化)

【讨论】:

针对多对一关系优化 SQL 查询

】针对多对一关系优化SQL查询【英文标题】:OptimizingaSQLQueryforaManytoOneRelationship【发布时间】:2011-09-2314:16:57【问题描述】:我有两个具有多对一关系的表,我将它们称为Parent_Table和Child_Table(即父母有零个或多个孩子,但孩子... 查看详情

spark sql:如何优化多个巨大的配置单元表连接

】sparksql:如何优化多个巨大的配置单元表连接【英文标题】:sparksql:howtooptimizemultiplehugehivetablesjoin【发布时间】:2019-01-2220:00:53【问题描述】:有sparksql作业:spark.sql(s"""SELECT*FROM(select*fromdefault.table1wherecreated_dtbetweendate\'2018-01-01... 查看详情

Presto SQL - 两个完全不同的表连接平行而不是垂直

...时间】:2021-11-0604:18:43【问题描述】:我有两张表,其中包含完整的数据集和标题。我设法连接在一起,但使用下面的代码,但这是垂直组合。QUERY="""SELECTSUM(CAST(US.amountasDEC 查看详情

优化 spark sql 笛卡尔连接

】优化sparksql笛卡尔连接【英文标题】:OptimizingsparksqlCartesianjoin【发布时间】:2019-12-3008:53:43【问题描述】:我必须对两个分别为3M和1M的数据集执行笛卡尔连接。这意味着3M数据集中的每一行都应该连接到1M数据集中的每一行。... 查看详情

如何针对 db2 数据库优化 SQL/Python 选择查询?

】如何针对db2数据库优化SQL/Python选择查询?【英文标题】:HowtooptimizeSQL/Pythonselectqueriesagainstadb2database?【发布时间】:2021-08-0614:11:13【问题描述】:通过Python连接到服务器上的db2数据库并查询一个巨大的表(可能有200万条记录,... 查看详情

SQL:优化问题,有行吗?

...在一些相当大的表(最大的表是1000万条记录)上有一个包含五个连接的查询,我想知道行是否存在。到目前为止,我已经这样做来检查行是否存在:SELECTTOP1tbl.IdFROMtabletblINNERJOIN...ON...=...(x5)WHEREtbl.xxx= 查看详情

Spark sql 查询优化

...一个数据表。我的数据库中有2个表。是否需要写2次完整连接选项?有什么办法可以写一次公共部分,然后多次更改变量表名。table1=spark.read\\.format("jdbc")\\.option("url","jdbc:oracle:thin:USER 查看详情

如果表不存在,如何运行包含针对另一个 sql 实例上的表的查询的 If-Then-Else 语句?

】如果表不存在,如何运行包含针对另一个sql实例上的表的查询的If-Then-Else语句?【英文标题】:HowtorunanIf-Then-Elsestatementwhichincludesaqryagainstatableonanothersqlinstance,iftabledoesnotexists?【发布时间】:2015-08-1318:25:00【问题描述】:如果... 查看详情

Spark Sql 作业优化

...时间】:2018-09-3018:46:03【问题描述】:我有一个工作,它包含大约9条sql语句来从hive中提取数据并写回hivedb。它目前正在运行3小时,考虑到处理数据的火花能力,这似乎太长了。该应用程序总共启动11个阶段。我使用SparkUI做了一... 查看详情

使用 JOIN 而不是 NOT IN 优化 SQL 查询

...计者,所以我无法更改结构、索引或存储过程。我有一个包含发票(称为faktura)的表,每张发票都有一个唯一的发票ID。如果我们必须取消发票,则会在同一张表中创建第二张发票,但其中的字段(“mo 查看详情

详解sql中几种常用的表连接方式

...的就是SQL优化,SQL优化的关键离不开三点:表的连接方式、访问路径和执行顺序,本文重点介绍几种常见的连接方式。多表关联查询,查询优化器的执行步骤具体如下。1)访问路径:查询语句中涉及多个... 查看详情

针对主表一列 spark.sql 验证 2 列中的数据

...2【问题描述】:我有2个表,比如ZIPCODE的主表,以及一个包含当前地址和永久地址的事务表。两个地址列都有ZIPCODE。我需要根据主表验证这2个邮政编码。MasterTable:+--------+------ 查看详情

在 Spark SQL 中将多个小表与大表连接的最佳方法

...表非常大,其他表很小(10-20条记录)。真的我想用其他包含键值对的表来替换最大表中的值。即大表:|Col1|Col2|Col3|Col4|....-- 查看详情

Scala Dataframe 仅连接并获取正确的表列

】ScalaDataframe仅连接并获取正确的表列【英文标题】:ScalaDataframejoinandgetrighttablecolumnsonly【发布时间】:2021-06-2223:07:39【问题描述】:importorg.apache.spark.sql.functions._importorg.apache.spark.sql.expressions.Windowvaldf1=Seq((1,"A")).toDF("i 查看详情

Apache Spark SQL:自动内连接?

】ApacheSparkSQL:自动内连接?【英文标题】:ApacheSparkSQL:AutomaticInnerJoin?【发布时间】:2016-02-2222:39:11【问题描述】:所以我遇到了一个奇怪的情况。每当我使用innerjoin语句运行sqlContext.sql时,我实际上会收到一个错误,但是当我... 查看详情

如何从具有字典列表的表中查询,仅针对某些键 (BigQuery) SQL

...行都有一个名为“customized_field”的字段,该字段是一个包含25个字典列表的 查看详情

SQL:针对表的视图 - 针对视图的查询是不是仍在使用表索引?

】SQL:针对表的视图-针对视图的查询是不是仍在使用表索引?【英文标题】:SQL:ViewagainstTable-arequeriesagainsttheViewstillusingTableIndexes?SQL:针对表的视图-针对视图的查询是否仍在使用表索引?【发布时间】:2009-06-0119:23:45【问题描... 查看详情

如何优化sql语句

...选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所引用的表.(2)WHERE子句中的连接顺序.:ORACLE采用自下而上的顺序解析WHERE子句,根据这... 查看详情