2017-03-02 3 views
0

다음 표를 만들 때 발생하는 오류를 극복하도록 도와 줄 수 있습니까?하이브 생성 테이블 오류.

감사

CREATE TABLE RANGE_FT (HOSP_VAR STRING, RANGE INT) 
AS 
      SELECT 'EMR' ,MAX(emr_avg_score) - MIN(emr_avg_score) from JOIN9 
    UNION SELECT 'SCI' ,MAX(sci_avg_score) - MIN(sci_avg_score) from JOIN9 
    UNION SELECT 'ASTH' ,MAX(asth_avg_score) - MIN(asth_avg_score) from JOIN9 
    UNION SELECT 'HF' ,MAX(hf_avg_score) - MIN(hf_avg_score) from JOIN9 
    UNION SELECT 'SC' ,MAX(sc_avg_score) - MIN(sc_avg_score) from JOIN9 
    UNION SELECT 'PNEU' ,MAX(pneu_avg_score) - MIN(pneu_avg_score) from JOIN9 
    UNION SELECT 'PREV' ,MAX(prev_avg_score) - MIN(prev_avg_score) from JOIN9 
    UNION SELECT 'BC' ,MAX(BC_avg_score) - MIN(BC_avg_score) from JOIN9 
    UNION SELECT 'HEART' ,MAX(heart_avg_score) - MIN(heart_avg_score) from JOIN9 
    UNION SELECT 'PREG' ,MAX(preg_avg_score) - MIN(preg_avg_score) from JOIN9 
; 

라인 7 : ALL

+0

시도의 SET (당신이 그것을 붙여 넣기 한 후, 그것을 선택하고 버튼을 누르 Ctrl 키 + k는 코드에 서식을) –

+0

전에 NOCOUNT 당신의 도움. nocount를 설정하는 방법에 대해 좀 더 자세히 설명해 줄 수 있습니까? 나는이 명령을 어디에 두어야 하는지를 뜻한다. 내 코드는 : DROP TABLE RANGE_FT; CREATE TABLE RANGE_FT (HOSP_VAR 문자열 RANGE의 INT) SELECT 'EMR'MAX (emr_avg_score) AS - MIN (emr_avg_score) JOIN9 UNION SELECT "SCI"에서, MAX (sci_avg_score) - MIN (sci_avg_score) JOIN9 행 UNION SELECT 'ASTH', MAX (asth_avg_score) - MIN (asth_avg_score) from JOIN9 UNION SELECT 'HF', MAX (hf_avg_score) - MIN (hf_avg_score) from JOIN9; –

+0

하이 싱 주셔서 감사합니다 텍스트와 이미지를 교체하십시오 쿼리 –

답변

1
  1. UNION 'SELECT'에 빠진 6은 하이브 버전을 지원하지 않습니다 (그리고 당신이 필요도없는 이리).
    대신 UNION ALL을 사용하십시오. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union

  2. UNION [ALL]에는 양쪽에서 동일한 스키마가 필요합니다.
    하이브에서는 다른 SQL 언어와 달리 형식이 비슷해야하며 별칭도 마찬가지입니다. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union

  3. create 문에서 열 목록을 제공 할 수 없습니다.
    SELECT 절에 관련 별칭을 추가하십시오.


이것은 쿼리

CREATE TABLE RANGE_FT 
AS 
       SELECT 'EMR' as HOSP_VAR ,MAX (emr_avg_score) - MIN (emr_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'SCI' as HOSP_VAR ,MAX (sci_avg_score) - MIN (sci_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'ASTH' as HOSP_VAR ,MAX (asth_avg_score) - MIN (asth_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'HF' as HOSP_VAR ,MAX (hf_avg_score) - MIN (hf_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'SC' as HOSP_VAR ,MAX (sc_avg_score) - MIN (sc_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'PNEU' as HOSP_VAR ,MAX (pneu_avg_score) - MIN (pneu_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'PREV' as HOSP_VAR ,MAX (prev_avg_score) - MIN (prev_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'BC' as HOSP_VAR ,MAX (BC_avg_score) - MIN (BC_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'HEART' as HOSP_VAR ,MAX (heart_avg_score) - MIN (heart_avg_score) as RANGE from JOIN9 
    UNION ALL SELECT 'PREG' as HOSP_VAR ,MAX (preg_avg_score) - MIN (preg_avg_score) as RANGE from JOIN9 
; 

을 고정 된 버전입니다 그리고 여기이 작동 할 단 하나의 SELECT

create table RANGE_FT 
as 
select inline 
     (
      array 
      (
       struct ('EMR' ,MAX (emr_avg_score) - MIN (emr_avg_score) ) 
       ,struct ('SCI' ,MAX (sci_avg_score) - MIN (sci_avg_score) ) 
       ,struct ('ASTH' ,MAX (asth_avg_score) - MIN (asth_avg_score)) 
       ,struct ('HF' ,MAX (hf_avg_score) - MIN (hf_avg_score) ) 
       ,struct ('SC' ,MAX (sc_avg_score) - MIN (sc_avg_score) ) 
       ,struct ('PNEU' ,MAX (pneu_avg_score) - MIN (pneu_avg_score)) 
       ,struct ('PREV' ,MAX (prev_avg_score) - MIN (prev_avg_score)) 
       ,struct ('BC' ,MAX (BC_avg_score) - MIN (BC_avg_score) ) 
       ,struct ('HEART' ,MAX (heart_avg_score) - MIN (heart_avg_score)) 
       ,struct ('PREG' ,MAX (preg_avg_score) - MIN (preg_avg_score)) 
      ) 
     ) as (HOSP_VAR,RANGE) 

from JOIN9  
; 
+0

오류가 발생했습니다 : SemanticException [오류 10065] : CREATE TABLE AS SELECT 명령이 대상 테이블의 열 목록을 지정할 수 없습니다. –

+0

방금 ​​텍스트에 게시했습니다. 도와 주셔서 대단히 감사합니다 Dudu –

+0

안녕하세요 Dudu,이 테이블을 만드는 방법에 대해 나에게 당신의 마술을 보여줄 수 있습니까? 답장을 보내 주셔서 대단히 감사합니다. –

0

와 대안 솔루션입니다 . Dudu에 의해 언급했듯이 열 이름 w를 줄 수 없습니다. 선택으로 hile writing 작성. 유니온을 사용할 수 있지만 성능에 현명한 UNION ALL이 더 좋습니다. 당신의 쓰임새에 따라 선택

CREATE TABLE RANGE_FT 
AS 
      SELECT 'EMR' AS HOSP_VAR ,MAX(emr_avg_score) - MIN(emr_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'SCI' AS HOSP_VAR ,MAX(sci_avg_score) - MIN(sci_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'ASTH' AS HOSP_VAR ,MAX(asth_avg_score) - MIN(asth_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'HF' AS HOSP_VAR ,MAX(hf_avg_score) - MIN(hf_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'SC' AS HOSP_VAR ,MAX(sc_avg_score) - MIN(sc_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'PNEU' AS HOSP_VAR ,MAX(pneu_avg_score) - MIN(pneu_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'PREV' AS HOSP_VAR ,MAX(prev_avg_score) - MIN(prev_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'BC' AS HOSP_VAR ,MAX(BC_avg_score) - MIN(BC_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'HEART' AS HOSP_VAR ,MAX(heart_avg_score) - MIN(heart_avg_score) AS `RANGE` from JOIN9 
    UNION SELECT 'PREG' AS HOSP_VAR ,MAX(preg_avg_score) - MIN(preg_avg_score) AS `RANGE` from JOIN9 
; 
+0

안녕 인 Ashish있어, 당신의 도움을 주셔서 감사합니다. 하지만 심지어 내가 열 이름을 delet과 코드를 실행, 오류가 계속 이런 식으로 보여줍니다 실패 : ALL ALL 'SELECT'에 빠진 근처 '' 라인 5시 12분 'SELECT'에 빠진 ParseException을 줄 4:12 근처 '' –

+0

@QingZhang'열 이름을 별칭과 백 슬래시의 범위 열 넣어주세요 –