2016-07-27 2 views
-1

하이브에서 하이브 0.13에 대한 덮어 쓰기 삽입 작업을 수행하려고합니다. 아래는 내 쿼리입니다HIVE : 유니온 양쪽의 스키마가 일치해야합니다. 열 _c0

INSERT OVERWRITE TABLE TABLE_A 
    SELECT 
    A.ADDRESS1=B.ADDR_LINE_1, 
    A.ADDRESS2, 
    A.ADDRESS3=CONCAT(B.CITY, ', ', B.STATE, ' ', B.POSTAL_CDE) , 
    A.STORETYPE 
    FROM 
    P.STUDENT A 
    JOIN 
    `default.CUSTOMER` B ON A.REGION = B.SHIP_TO_LOCATION_NUM 
    AND A.STORENUMBER = B.SHIP 
    UNION ALL 
    SELECT 
    A.ADDRESS1, 
    A.ADDRESS2, 
    A.ADDRESS3, 
    A.STORETYPE=cast(B1.id AS string) 
    FROM 
    `P.STUDENT` A 
    JOIN 
    R.RTL B1 ON A.REGION = B1.SHIP_TO_LOCATION_NUM 
    AND A.STORENUMBER = B1.SHIP ; 

After the execution i receive an error saying: 
FAILED: SemanticException 36:0 Schema of both sides of union should match: Column _c0 is of type boolean on first table and type string on second table. Error encountered near token 'P.STUDENT'. 

저는 조인의 모든 데이터 유형이 문자열임을 발견했습니다. 그리고 B1.id에 대해서는 문자열 cast(B1.id AS string)으로 캐스팅합니다. 아무도 나 에게이 쿼리와 함께 문제를 말할 수 있습니다. 0.13 하이브를 사용하고 있습니다. 위의 질의에 A.ADDRESS1=B.ADDR_LINE_1, 문이 boolen을 반환처럼

감사 질의 작품 아래

답변

0

이 보인다.

INSERT OVERWRITE TABLE TABLE_A 
     SELECT 
     B.ADDR_LINE_1, 
     A.ADDRESS2, 
     CONCAT(B.CITY, ', ', B.STATE, ' ', B.POSTAL_CDE) , 
     A.STORETYPE 
     FROM 
     P.STUDENT A 
     JOIN 
     `default.CUSTOMER` B ON A.REGION = B.SHIP_TO_LOCATION_NUM 
     AND A.STORENUMBER = B.SHIP 
     UNION ALL 
     SELECT 
     A.ADDRESS1, 
     A.ADDRESS2, 
     A.ADDRESS3, 
     cast(B1.id AS string) 
     FROM 
     `P.STUDENT` A 
     JOIN 
     R.RTL B1 ON A.REGION = B1.SHIP_TO_LOCATION_NUM 
     AND A.STORENUMBER = B1.SHIP ;