蜂窝与CTE连接 [英] Hive Join with CTE

查看:0
本文介绍了蜂窝与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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆