sparksql中θ连接的优化

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

我只有两个表,其中我需要从第一个表(大表)中获取记录 10 M 行)谁的 transaction datelesser than or equal to 这个 effective date 在第二张table上(小table上有 1 行),然后下游查询将使用此结果集。
表事务处理:

tran_id | cust_id | tran_amt | tran_dt
1234    | XYZ     | 12.55    | 10/01/2020
5678    | MNP     | 25.99    | 25/02/2020
5561    | XYZ     | 32.45    | 30/04/2020
9812    | STR     | 10.32    | 15/08/2020

参考表:

eff_dt |
30/07/2020 |

因此,按照逻辑,我应该取回前3行并丢弃最后一条记录,因为它是 greater 超过参考日期(在 REF 表)
因此,我使用了 non-equi Cartesian Join 在这些表格之间:

select
/*+ MAPJOIN(b) */
a.tran_id,
a.cust_id,
a.tran_amt,
a.tran_dt
from transact a
inner join ref b
on a.tran_dt <= b.eff_dt

但是,由于 cross Jointransact 表偶数使用 Broadcast 提示。
那么,有没有更聪明的方法来实现比这更有效的相同逻辑呢?换句话说,有没有可能在这个查询中优化theta连接?
提前谢谢。
所以我写了这样的东西:

643ylb08

643ylb081#

引用自https://databricks.com/session/optimizing-apache-spark-sql-joins
你能试着在trans\u dt上扣上扣子吗(只在年/月扣上扣子)。并编写两个查询来完成相同的工作
第一个查询,事务处理日期(年/月)<有效日期(年/月)。因此,这可以帮助您积极地挑选桶(而不是检查每一个记录交易日),这是少于2020/07。
第二个查询,事务处理日期(年/月)=有效事务处理日期(年/月)和事务处理日期(日)<=有效事务处理日期(日)

相关问题