创建多表join

目前提供了 4 种方式的应用结构创建方式,同时OpenSearch-行业算法版提供了多表支持功能,以方便业务复杂场景下调用。

主辅表数据关联关系

通过手动创建应用结构方式,为应用创建多个表时,多表之间数据关联关系描述如下:

  • 目前主辅表,数据关联仅支持 N:1 或 1:1 的关系,不支持 1:N(即多表数据关联关系中,多的一方只能是主表)。

  • 主辅表需通过应用表外键与辅表主键进行数据关联,且表外键只能关联辅表主键。

  • 最多只支持3层关联。辅表最多添加10张。

  • 只能配置一张主表

主辅表关系

关联逻辑

是否支持

表A(主表)、表B

表A(主表)-> 表B

支持

表A(主表)、表B、表C

表A(主表)-> 表B -> 表C

支持

表A(主表)、表B、表C、表D

表A(主表)-> 表B 表A(主表)-> 表C 表A(主表)-> 表Djoin层级不超过2层,辅表个数不超过10个

支持

表A(主表)、表B、表C、表D

表A(主表)-> 表B -> 表C -> 表D超过2层多表数据关联

不支持(独享型可支持3层)

表A(主表)、表B

表A->表B,表B->表A环状多表数据关联

不支持

表A(主表)、表B、表C … 表K

表A(主表)-> 表B 表A(主表)-> 表C .. 表A(主表)-> 表Kjoin层级不超过2层,但辅表个数超过10个

不支持(独享型可扩展辅表个数)

数据模型

join

主辅表JOIN场景

1:1N:1JOIN不上

注意事项

  • 表字段结构一致才能映射,如辅表主键为INT,那么只能映射INT类型的主表字段。

  • 离线表的join逻辑是,在索引构建的过程中将主表和附表left join成一张宽表来生成索引供用户查询,因此如果主表记录和辅表记录是N:1的关系,且N值比较大时,会在更新辅表时,触发放大n倍的主表更新流量,导致主辅表更新延迟,因此建议N值<=10。

  • 主辅表left join后的宽表的行数和主表的行数一致,辅表没有数据的字段,会自动补充默认值,INT类型的默认值是0,STRING默认是null。

  • 最佳实践:多表join引发的数据同步延迟