Spark SQL关联子查询无法识别父表列问题求助
Spark SQL迁移时多层相关子查询字段无法识别的解决办法
Spark SQL对多层嵌套的相关子查询支持有限,无法像SQL Server那样允许深层子查询直接引用外层查询的表字段,你遇到的pr.hmy和tr.hmy无法被内层子查询识别就是这个原因。下面是尽量少改动原查询的调整方案,通过将深层相关子查询替换为JOIN逻辑,适配Spark SQL的语法支持:
SELECT g.HTRAN FROM property pr INNER JOIN gldetail g ON g.hprop = pr.hmy INNER JOIN acct ac ON g.hacct = ac.hmy INNER JOIN trans tr ON tr.hmy = g.htran INNER JOIN accttreexref x ON ac.hmy = x.hacct INNER JOIN accttreedetail a ON a.hmy = x.hdetail LEFT OUTER JOIN person r ON g.hperson = r.hmy -- 替换原内层引用pr.hmy的子查询,转为直接关联 INNER JOIN PROPBUT_OCASH po ON po.HCODE = pr.hmy -- 替换原内层引用tr.hmy的子查询,转为直接关联 INNER JOIN AcctTree atree ON atree.scode = tr.hmy WHERE a.htree = 4 AND x.hdetail IN ( SELECT actx.hDetail FROM accttreexref actx INNER JOIN acct act ON actx.hAcct = act.hmy WHERE act.SCODE = po.ownremitac1 AND actx.Htree = atree.hmy )
调整说明
- 将原查询中依赖外层
pr.hmy的深层子查询,改为直接与PROPBUT_OCASH表做JOIN,把po.ownremitac1直接传递到中间层查询 - 将原查询中依赖外层
tr.hmy的子查询,改为直接与AcctTree表做JOIN,把atree.hmy传递到外层子查询 - 保留原有的IN子查询核心逻辑,仅调整字段关联的方式,让Spark SQL能够识别外层表与子查询的关联关系
内容的提问来源于stack exchange,提问作者jarry jafery
相关产品推荐
相关产品推荐

