我正在尝试找出如何优化一些databricks连接。设置如下:
星形模式中的四个表
巨大的事实,购买,(约30亿行)包含宠物(只猫和狗)和主人随着时间的推移购买
大所有者维度(约5亿行)
大的dog维度(约10亿行),包含购买的狗的信息
大型cat维度(约10亿行),包含有关购买对象的cat的信息
分别在owner id、dog id和cat id上向owner、dog和cat中的每一个留下连接
问题是,当我在一个查询中连接到所有三个表时,我希望避免重新排列事实表。另外,dog/cat洗牌是有偏差的,因为一个事务要么针对dog,要么针对cat,但不能同时针对两者。
建议
由于每个宠物都属于一个所有者,所以每个表都可以或确实包含所有者id。我想将所有四个表的数据写入azure data lake,以便按所有者id对它们进行绑定和排序。目标是在加入四个表时绕过物理计划的交换步骤。
收购owner join显然会从这一策略中受益。理论上,该策略还将所有dog/cat维度数据与相关的事实数据进行同源。然而,我担心加入购买狗对狗的id将迫使狗的id重新洗牌。同样的理由猫。
我是否可以禁止spark通过猫id/狗id重新洗牌,并强制其保留所有者id扣?对于任意连接来说,这听起来很危险,但是对于这个用例来说,这是有意义的。
关于如何处理这些连接还有其他想法吗?
注意事项
假设狗和猫的table是不同的,不允许将它们合并到一个宠物table上。
我正在简化我的真实数据内容,使场景更容易与任何人联系起来。
暂无答案!
目前还没有任何答案,快来回答吧!