蜂窝与CTE连接 [英] Hive Join with CTE
本文介绍了蜂窝与CTE连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人能帮我在下面的查询中添加注释联接条件吗?如果我正在执行此查询,则此查询工作正常,但当我尝试添加另一个联接代码时,它无法访问列HIGH_V2,并给出列/表ALISA NOT FOUND问题。
with MYTABLE as (
select
T1.LOW_V2 as LOW_V2,
T2.LOW_V as LOW_V,
T2.HIGH_V as HIGH_V
from TAB1 T1
inner join
TAB2 T2
on
T1.LOW_V2=T2.LOW_V
-- and high_V2=T2.HIGH_V
)
select lpad(concat(splitted[0],translate(splitted[1],'0','9')),18,0) as high_V2,
LOW_V2,LOW_V,HIGH_V from
(
select split(regexp_replace(LOW_V2,'(\d*?)(0+)$','$1|$2'),'\|') splitted,
LOW_V2,
LOW_V,HIGH_V
from MYTABLE )s;
推荐答案
操作顺序不是这样工作的
首先处理CTE。在处理时,High_v2不存在
然后处理子查询(select split
),然后处理主导查询(select lpad
)。它是创建HIGH_v2的主导查询
编写多个CTE可能会更简单,这样就可以自上而下地处理它们。这样你就可以更容易地看到订单了。如果您从较早的CTE中继续使用,则只能在较晚的CTE中使用它们
with MYTABLE as (
select
T1.LOW_V2 as LOW_V2,
T2.LOW_V as LOW_V,
T2.HIGH_V as HIGH_V
from TAB1 T1
inner join
TAB2 T2
on
T1.LOW_V2=T2.LOW_V
),
s AS (
select
split(regexp_replace(LOW_V2,'(\d*?)(0+)$','$1|$2'),'\|') splitted,
LOW_V2,
LOW_V,HIGH_V
from
MYTABLE
),
t AS (
select
lpad(concat(splitted[0],translate(splitted[1],'0','9')),18,0) as high_V2,
LOW_V2,
LOW_V,
HIGH_V
from
s
)
SELECT * from t WHERE high_v = high_v2
您能看到流程是如何自上而下进行的吗?每个连续的CTE都只使用前一个CTE中的内容。
这篇关于蜂窝与CTE连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文