【发布时间】:2020-08-06 14:39:16
【问题描述】:
我使用 Spark SQL 2.4。我们使用一系列链式 Spark 临时视图来执行数据转换。
所以,很多时候,我会遇到需要在大表和其他小表之间应用CROSS JOIN 的情况。小型查找表/视图几乎没有 1-10 条记录。但是,我仍然遇到性能问题,尽管主表有(比如)10M 记录,而小表只有 1 条记录。
我的问题是如何在这种情况下改善查询的性能。有什么方法可以加快查询速度。我已经在查找表上尝试了BROADCAST 提示,但与没有提示相比没有得到预期的性能提升。
任何人都可以分享他们在这些案例的最佳实践方面的经验和专业知识,尤其是当我们使用以下基于范围(场景 I)的另一个小表进行 cross join 时。
场景一:基于范围的交叉连接
create temporary view lkp_tbl as
select agegrpid, lowage, highage
from small_tbl;
select /*+ MAPJOIN(b) */
a.id, a.name, a.age, b.agegrpid
from big_tbl a
inner join lkp_tbl b
WHERE a.age between b.lowage and b.highage; -- cross join based on range
场景二:
create temporary view big_tbl as
select id, name, age
from employee
where id = '1001';
create temporary view lkp_tbl as -- contains only 1 record
select max(last_prcs_dt) as prcs_dt
from run_table;
select /*+ MAPJOIN(b) */
a.id, a.name, a.age, b.prcs_dt
from big_tbl a
cross join lkp_tbl;
谢谢。任何帮助表示赞赏。
【问题讨论】:
标签: apache-spark apache-spark-sql