Mysql 使用查询将配置单元插入结构数据类型

Mysql 使用查询将配置单元插入结构数据类型,mysql,hadoop,hive,hiveql,hadoop-streaming,Mysql,Hadoop,Hive,Hiveql,Hadoop Streaming,我有一个用例,其中我有一个表a。我想从中选择数据,按come字段分组,进行一些聚合,并将结果插入到另一个配置单元表b中,其中一个列作为结构。我在这方面遇到了一些困难。谁能帮我一下,告诉我我的问题出在哪里 CREATE EXTERNAL TABLE IF NOT EXISTS a ( date string, acct string, media string, id1 string,

我有一个用例,其中我有一个表a。我想从中选择数据,按come字段分组,进行一些聚合,并将结果插入到另一个配置单元表b中,其中一个列作为结构。我在这方面遇到了一些困难。谁能帮我一下,告诉我我的问题出在哪里

  CREATE EXTERNAL TABLE IF NOT EXISTS a (
            date string,
            acct string,
            media string,
             id1 string,
            val INT
    ) PARTITIONED BY (day STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    LOCATION 'folder1/folder2/';

    ALTER TABLE a ADD IF NOT EXISTS PARTITION (day='{DATE}') LOCATION 'folder1/folder2/Date={DATE}';


    CREATE EXTERNAL TABLE IF NOT EXISTS b (
            date string,
            acct string,
            media string,
            st1 STRUCT<id1:STRING, val:INT>
    ) PARTITIONED BY (day STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    LOCATION 'path/';

    FROM a
    INSERT OVERWRITE TABLE b  PARTITION (day='{DATE}')
    SELECT  date,acct,media,named_struct('id1',id1,'val',sum(val))
    WHERE day='{DATE}' and media is not null and acct is not null and  NOT (id1 = "0" )
    GROUP BY date,acct,media,id1;  
创建外部表(如果不存在)(
日期字符串,
账户字符串,
媒体字符串,
id1字符串,
val INT
)分区人(日字符串)
以“\t”结尾的行格式分隔字段
位置“folder1/folder2/”;
如果不存在分区(day='{DATE}')位置'folder1/folder2/DATE={DATE}',则更改表a添加;
如果不存在,则创建外部表b(
日期字符串,
账户字符串,
媒体字符串,
st1结构
)分区人(日字符串)
以“\t”结尾的行格式分隔字段
位置“路径/”;
从
插入覆盖表b分区(日期={DATE})
选择日期、帐户、媒体、命名结构('id1',id1,'val',总和(val))
其中,day={DATE}和media不为null,acct不为null和not(id1=“0”)
按日期、账户、媒体、id1分组;
我得到的错误是:

 SemanticException [Error 10044]: Line 3:31 Cannot insert into target table because column number/types are different ''2015-07-16'': Cannot convert column 4 from struct<id1:string,val:bigint> to struct<id1:string,val:int>.
SemanticException[错误10044]:第3:31行无法插入目标表,因为列编号/类型不同“2015-07-16”:无法将第4列从结构转换为结构。

Sum返回一个BIGINT,而不是INT。所以声明

st1 STRUCT<id1:STRING, val:BIGINT>
st1结构
而不是

st1 STRUCT<id1:STRING, val:INT>
st1结构

我得到的错误:SemanticException[错误10044]:第3:31行无法插入目标表,因为列编号/类型不同“2015-07-16”:无法将第4列从结构转换为结构。