【发布时间】:2020-06-20 17:47:12
【问题描述】:
我是 Spark-SQL 的新手,无法阅读 Hive 表格。我想知道 Spark 如何执行 多表 Join。我在某处读到,建议始终将 largest 表保留在 Join order 的顶部等等,这有利于Join 的效率。我在 Join 中读到,Spark 按顺序将第一个表(最大)加载到 Memory 并流式传输另一个表,这有助于提高 Join 性能。但是,我对这种策略如何提高性能感到困惑,因为最大的表(在大多数情况下)不适合内存并溢出到磁盘上。
任何人都可以在加入时澄清和解释 Spark 在幕后使用的加入机制
[large vs medium]、[large vs small] 和 [large vs large] 表在连接类型(inner & outer)和连接性能方面。我想知道在连接表排序方面应该遵循的最佳实践,以实现 Spark 采用的所有连接策略(SMJ、ShuffleHash 和广播)的最佳性能。让我们假设以下查询:
select
a.id,
b.cust_nm,
c.prod_nm
from large_tab a
join medium_tab b
on a.id = b.id
join small_tab c
on a.pid = c.pid;
注意:我们使用 Spark 2.4
非常感谢任何帮助。谢谢。
【问题讨论】:
标签: sql hive apache-spark-sql sql-optimization