我表达的就是这个意思, 先把所有你需要的 join case 都计算出来, 并 union 所有结果,最后再根据条件选择需要的结果。
当前 Flink SQL 的 lookup join 大多数实现比如 jdbc 都是一个 join 节点一个 connection, 并没有做不同 join 节点的共享连接池。 你可能得需要改造下 jdbc connector 。 比如引入一个静态的共享连接池,至少可以做到一个 taskManager 内的所有 operator 能共享这些链接。 Best, Feng On Tue, Oct 22, 2024 at 10:38 AM 斗鱼 <1227581...@qq.com.invalid> wrote: > 大佬,感谢您的回复,你说的计算所有Join结果是指不走Lookup > Join全部提前计算吗?还是什么意思?目前我们是无法提前预知所有结果的,这个外部的三张维度表是根据用户请求保存的,我需要用事实表的数据去Lookup > Join这边维度表的数据才能获取到结果 > > 目前我的思路是:想直接通过多个union将多个组合条件查询同时发起,但是会有too many connection的问题, > > 针对同时发起多个Lookup > Join的时候的并发连接控制这个问题,不知道大佬们一般是怎么解决的?FlinkSQL如何配置连接池呢,有没有想过案例或demo呢?官网看了没有找到相关参数配置,大佬们,能不能麻烦帮忙指导下呢,期待能收到指导与回复,感谢 > ------------------------------ > 斗鱼 > 1227581...@qq.com > > <https://wx.mail.qq.com/home/index?t=readmail_businesscard_midpage&nocheck=true&name=%E6%96%97%E9%B1%BC&icon=http%3A%2F%2Fthirdqq.qlogo.cn%2Fg%3Fb%3Dsdk%26k%3DYiaI7kvDORpPP1623Fzbtyg%26s%3D100%26t%3D525%3Frand%3D1641396237&mail=1227581167%40qq.com&code=> > > > > ------------------ 原始邮件 ------------------ > *发件人:* "user-zh" <jinfeng1...@gmail.com>; > *发送时间:* 2024年10月21日(星期一) 晚上10:04 > *收件人:* "user-zh"<user-zh@flink.apache.org>; > *主题:* Re: 关于如何根据参数条件动态生成join的关联的sql > > hi, > > > 先计算所有的 join 结果,结果中把相关的 join 字段带上, 再去基于 join 的结果去选择需要的结果是否可以? > > > > Best, > > Feng > > > > On Wed, Oct 16, 2024 at 10:42 AM 斗鱼 <1227581...@qq.com.invalid> wrote: > > > 大佬们,目前我遇到一个业务场景的问题, > > > 有如下四张表,其中一张事实表tableFact和三张维度表tableDimA、tableDimDetailB、tableDimDetailC进行left > > > join关联,这四张表根据userId、actPkId、bId、cType、create_time这几个参数进行关联,三张维度表通过actPkId进行关联 > > > > *目前需求是想实现根据维度表bId、cType、create_time这三个字段的数据的情况,动态转成对应join的SQL*,具体相关信息如下: > > > > *表结构大致信息:* > > > > tableFact( > > userId String primary key, > > create_time > > ) > > > > tableDimA > > ( > > actPkId String primary key, > > targetUserId String, > > start_time datetime, > > end_time datetime > > > > ) > > > > tableDimDetailB > > ( > > actPkId String primary key, > > bId String > > ) > > > > tableDimDetailC > > ( > > actPkId String primary key, > > cType String > > ) > > > > *假定:* > > A: fact.userlddimA.targetUserld > > B: fact.bId == dimB.bId > > C: fact.cType == dimA.cType > > D: fact.create time >= dimA.start time and fact.create time <= dimA.end > > time > > > > *前置条件:*A必须存在,B、C、D可以组合存在,即B、C、D的所有可能组合条件存在, > > > > *举例如下参数情况:* > > 如 (A B C)表示A、B、C的条件都存在的情况,组合出 > > SELECT * > > FROM tableFact P > > LEFT JOIN tableDimA FOR SYSTEM_TIME AS OF P.proctime AS A ON P.userId = > > A.targetUserId > > LEFT JOIN tableDimDetailB FOR SYSTEM_TIME AS OF P.proctime AS B ON > > A.actPkId = B.actPkId AND P.bId=B.bId > > LEFT JOIN tableDimDetailC FOR SYSTEM_TIME AS OF P.proctime AS C ON > > A.actPkId = C.actPkId AND P.cType=B.cType; > > > > 如 (A B C D)表示A、B、C D的条件都存在的情况,组合出如下查询语句 > > SELECT * > > FROM tableFact P > > LEFT JOIN tableDimA FOR SYSTEM_TIME AS OF P.proctime AS A ON P.userId = > > A.targetUserId > > LEFT JOIN tableDimDetailB FOR SYSTEM_TIME AS OF P.proctime AS B ON > > A.actPkId = B.actPkId AND P.bId=B.bId > > LEFT JOIN tableDimDetailC FOR SYSTEM_TIME AS OF P.proctime AS C ON > > A.actPkId = C.actPkId AND P.cType=B.cType > > WHERE P.create_time BETWEEN A.start_time AND A.end_time; > > > > *表结构图信息* > > > > > > > > > > 想请教下各位大佬,Flink或者有什么技术能实现这种动态多条件参数组合转成sql的实现方案吗?期待能收到各位大佬帮忙的指导回复,感谢 > > > > ------------------------------ > > 斗鱼 > > 1227581...@qq.com > > > > < > https://wx.mail.qq.com/home/index?t=readmail_businesscard_midpage&nocheck=true&name=%E6%96%97%E9%B1%BC&icon=http%3A%2F%2Fthirdqq.qlogo.cn%2Fg%3Fb%3Dsdk%26k%3DYiaI7kvDORpPP1623Fzbtyg%26s%3D100%26t%3D525%3Frand%3D1641396237&mail=1227581167%40qq.com&code= > > > > > > >