hive:并集两侧的架构应匹配:列\u c0

aydmsdu9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(310)

我正在尝试在配置单元中执行更新操作,这意味着为配置单元0.13插入覆盖。下面是我的问题

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) . 谁能告诉我这个问题。我用的是Hive0.13。
谢谢

m528fe3b

m528fe3b1#

下面的查询工作,看起来像 A.ADDRESS1=B.ADDR_LINE_1, 上面查询中的语句返回boolen。

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 ;

相关问题