在数据湖环境中,我们如何优化涉及非常大的目标表(10tb)和较小的增量源表的增量合并?



我最近在一次采访中遇到了这个问题,一直没有找到一个令人满意的答案。增量合并可以包含用于插入的新记录以及对旧记录的更新。

我建议使用合并语句,但面试官说这将涉及扫描整个目标表,这是不希望的。有没有更好的方法来合并而不扫描大表呢?

最好的处理方法是在spark中使用broadcast Join。您可以定义属性park.sql.autoBroadcastJoinThreshold,并将其值设置为您较小的增量源表的大小。

所以当你的小数据(增量记录数据集)到达时,它的副本被创建并发送到每个包含大数据集的节点。通过这种方式,网络洗牌成本节省为大数据集不必在network

中进行洗牌。示例:df_join = Large_dataset.join(broadcast(small_dataset)).

相关内容

最新更新