2015-01-22 2 views
0

하이브 쿼리에서 네 가지 중첩 수준을 사용하는 동안 문제가 발생했습니다. 아래는 내가 실행 해요 쿼리는 -SemanticException [오류 10007] : 모호한 열 참조 _c1

SELECT *, 
SUM(qtod.amount) OVER (PARTITION BY qtod.id, qtod.year_begin_date ORDER BY qtod.tran_date) 
FROM (SELECT *, 
    SUM(mtod.amount) OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date) 
    FROM (SELECT *, 
     SUM(wtod.amount) OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date) 
     FROM (select id, 
      year_begin_date, 
      quarter_begin_date, 
      month_begin_date, 
      week_begin_date, 
      tran_date, 
      amount, 
      SUM(amount) 
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod; 

나는 그것이 잘 작동하지만, 그것을 포함하는 동안 오류 MSG 이하지고 네 번째 수준의 중첩을 제외하고있어 경우 - 실패

을 : SemanticException를 [ 오류 10007] : 중첩을 방지하기 위해 qtod

에서 모호한 열 참조 _c1 내가 다른 방법으로 그것을 위해 노력했다

SELECT * FROM 
    (SELECT id,year_begin_date,tran_date,amount,SUM(amount) OVER (PARTITION BY id,year_begin_date ORDER BY tran_date) FROM yeartodate)ytod 
    JOIN 
(SELECT *, SUM(mtod.amount) OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date) 
FROM (SELECT *, SUM(wtod.amount) OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date) 
FROM (select id, 
    year_begin_date, 
    quarter_begin_date, 
    month_begin_date, 
    week_begin_date, 
    tran_date, 
    amount, 
    SUM(amount) 
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod 
ON qtod.id=ytod.id AND qtod.tran_date=ytod.tran_date; 

여전히 같은 오류가 발생합니다.
웹에서 검색 한 후 나는 JIRA으로 하이브

에 대해 발생 JIRA에 따른 이제 고정과 패치가 하이브 (14)에서 사용할 수 입니다 하이브 자체에 문제의 발견, 그래서 난 하이브 (14)에서 실행하려 (HDP).
여전히 동일하게 변함 오류.
귀하의 제안을 작성 해주세요 .....

답변

2

비 앨리어싱 기능은 SELECT 내에서 호출 그래서, 당신이 SELECT 당 하나의 비 앨리어스 함수 호출이이 경우 등 열 이름 _c1, _c2에 매핑됩니다 그들은 모두 _c1 란을 만듭니다.

다음 하위 쿼리에서 SELECT *을 수행 한 다음 _c1에 매핑되는 다른 함수 호출을 추가하기 때문에 동일한 열을 두 번 지정하므로 모호한 열 참조가 발생하므로 문제가 발생합니다.

가의 _c1 기본 이름을 사용과 같이하지 않도록이 솔루션은 함수의 모든 호출 별명에 있어야한다 :

SELECT * FROM 
    (SELECT id,year_begin_date,tran_date,amount,SUM(amount) AS ytod_amount_sum OVER (PARTITION BY id,year_begin_date ORDER BY tran_date) FROM yeartodate)ytod 
    JOIN 
(SELECT *, SUM(mtod.amount) AS mtod_amount_sum OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date) 
FROM (SELECT *, SUM(wtod.amount) AS wtod_amount_sum OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date) 
FROM (select id, 
    year_begin_date, 
    quarter_begin_date, 
    month_begin_date, 
    week_begin_date, 
    tran_date, 
    amount, 
    SUM(amount) AS amount_sum 
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod 
ON qtod.id=ytod.id AND qtod.tran_date=ytod.tran_date;