sql中的交叉连接

bcs8qyzn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(347)

我使用sparksql2.4。我们使用一系列链式spark临时视图来执行数据转换。
所以,很多时候,我会遇到需要应用 CROSS JOIN 在一张大table和其他小table之间。小的查找表/视图几乎没有1-10条记录。但是,我仍然会遇到性能问题,尽管主表 10M 记录,而小表只有1条记录。
我的问题是如何在这种情况下改善查询的性能。有没有办法加快查询速度。我已经试过了 BROADCAST 但没有得到预期的性能改善相比,没有提示。
任何人都可以分享他们的经验和专业知识的最佳做法,尤其是当我们做一个 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;

谢谢。感谢您的帮助。

oiopk7p5

oiopk7p51#

广播似乎运作良好。
下面的讨论似乎对这个主题有所帮助-
sparksql中计算的交叉连接

相关问题