加速基数保留 Join
本文描述了如何通过表裁剪功能加速基数保留 Join。该功能自 v3.1 开始支持。
概述
基数保留 Join(Cardinality-preserving join)是指输出行的基数和重复因子与 Join 内部其中一个输入表的基数和重复因子相同的 Join。例如:
-
Inner Join
SELECT A.* FROM A INNER JOIN B ON A.fk = B.pk;在以上示例中,
A.fk(外键,Foreign Key)不为 NULL,并且引用B.pk(主键,Primary Key)。A中的每一行都恰好与B中的一行匹配,因此输出的基数和重复因子与A的相同。 -
Left Join
SELECT A.* FROM A LEFT JOIN B ON A.fk = B.pk;此处
A.fk引用B.pk,但A.fk可以包含 NULL 值。A中的每一行最多与B中的一行匹配。因此,输出的基数和重复因子与A保持一致。
在此类 Join 中,如果最终输出列仅依赖于表 A 的列,表 B 的列未被使用,则可以从 Join 中裁剪表 B。从 v3.1 开始,StarRocks 支持在基数保留 Join 中进行表裁剪,包括 CTE、逻辑视图和子查询。
用例:风险控制中的实时特征选择
基数保留 Join 的表裁剪功能在风险控制中的实时特征选择