Select 通过从其他表中插入配置单元列,将其插入到配置单元结构列中

Select 通过从其他表中插入配置单元列,将其插入到配置单元结构列中,select,struct,insert,hive,Select,Struct,Insert,Hive,我有下面的要求,我想实现使用蜂巢 表A中包含Struct 1列 创建表B以拆分表A的结构列并作为两个不同的列加载 下面是DDL和我尝试过的步骤 表A: 来自反序列化程序的群集字符串 来自反序列化程序的架构字符串 来自反序列化程序的表字符串 来自反序列化程序的primarykey结构 来自反序列化程序的数据结构 已从反序列化程序中删除布尔值 从反序列化程序截断布尔值 反序列化程序中的版本bigint 表B: 反序列化程序中的用户id字符串 shippingattr结构 比林加特结构 我试过以下方法

我有下面的要求,我想实现使用蜂巢

  • 表A中包含Struct 1列
  • 创建表B以拆分表A的结构列并作为两个不同的列加载
  • 下面是DDL和我尝试过的步骤

    表A:

    来自反序列化程序的群集字符串
    来自反序列化程序的架构字符串
    来自反序列化程序的表字符串
    来自反序列化程序的primarykey结构
    来自反序列化程序的数据结构
    已从反序列化程序中删除布尔值
    从反序列化程序截断布尔值
    反序列化程序中的版本bigint

    表B: 反序列化程序中的用户id字符串
    shippingattr结构 比林加特结构

    我试过以下方法

    insert into Table B
    (
    user_id,
    shippingattr.username,
    shippingattr.shipping_fname,
    shippingattr.shipping_lname,
    shippingattr.shipping_address,
    shippingattr.shipping_address2,
    shippingattr.shipping_city,
    shippingattr.shipping_state,
    shippingattr.shipping_zip,
    shippingattr.phone,
    billingattr.billing_is_shipping,
    billingattr.billing_fname,
    billingattr.billing_lname,
    billingattr.billing_address,
    billingattr.billing_address2,
    billingattr.billing_city,
    billingattr.billing_state,
    billingattr.billing_zip
    )
    
    select 
    primarykey.user_id,
    data.username,
    data.shipping_fname,
    data.shipping_lname,
    data.shipping_address,
    data.shipping_address2,
    data.shipping_city,
    data.shipping_state,
    data.shipping_zip,
    data.phone,
    data.billing_is_shipping,
    data.billing_fname,
    data.billing_lname,
    data.billing_address,
    data.billing_address2,
    data.billing_city,
    data.billing_state,
    data.billing_zip
    from Table A;
    
    但是这是错误的。请告诉我插入这些数据的正确方法

    错误消息: NoviableException(284@[] 位于org.apache.hadoop.hive.ql.parse.HiveParser\u SelectClauseParser.selectClause(HiveParser\u SelectClauseParser.java:742) 位于org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:40147) 位于org.apache.hadoop.hive.ql.parse.HiveParser.singleSelectStatement(HiveParser.java:38048) 位于org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:37754) 位于org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:37654) 位于org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:36898) 位于org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:36774) 位于org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1338) 位于org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1036) 位于org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:199) 位于org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 位于org.apache.hadoop.hive.ql.Driver.compile(Driver.java:404) 位于org.apache.hadoop.hive.ql.Driver.compile(Driver.java:322) 位于org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:975) 位于org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1040) 位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:911) 位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:901) 位于org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:275) 位于org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:227) 位于org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:430) 位于org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:803) 位于org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:697) 位于org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:636) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.apache.hadoop.util.RunJar.main(RunJar.java:212)
    失败:ParseException行1:50无法识别select子句中“用户id”附近的输入。对于start,配置单元不排除要插入的列列表。
    应按顺序插入所有列

    insert into Table B
    select ...
    

    对于开始,配置单元不排除要插入的列列表。
    应按顺序插入所有列

    insert into Table B
    select ...
    

    上述场景可按如下方式处理。在结构中插入数据的示例:-

    create table xyz (a STRUCT<x : int , y :String , z:int , zz : int >, b string );
    
     insert into table xyz select named_STRUCT(x,12,y,'text',z,2,zz,3) , 'text' from dummy limit 1;
    
     create table xyz1 (a1 STRUCT<x : int , y :String > , a2 struct<z:int , zz : int> , b String);
    
     insert into table xyz1  select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) ,b from xyz;
    
    insert into table xyz1(a1,a2,b)  select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) , b from xyz;
    
    创建表xyz(a结构,b字符串);
    在表xyz中插入从虚拟限制1中选择命名的_结构(x,12,y,'text',z,2,zz,3),'text';
    创建表xyz1(a1结构、a2结构、b字符串);
    插入表格xyz1,从xyz中选择命名的结构('x',a.x,'y',a.y),命名的结构('z',a.z,'zz',a.zz),b;
    插入表xyz1(a1、a2、b)中,从xyz中选择命名的结构('x',a.x,'y',a.y),命名的结构('z',a.z,'zz',a.zz),b;
    
    上述场景可按如下方式处理。在结构中插入数据的示例:-

    create table xyz (a STRUCT<x : int , y :String , z:int , zz : int >, b string );
    
     insert into table xyz select named_STRUCT(x,12,y,'text',z,2,zz,3) , 'text' from dummy limit 1;
    
     create table xyz1 (a1 STRUCT<x : int , y :String > , a2 struct<z:int , zz : int> , b String);
    
     insert into table xyz1  select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) ,b from xyz;
    
    insert into table xyz1(a1,a2,b)  select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) , b from xyz;
    
    创建表xyz(a结构,b字符串);
    在表xyz中插入从虚拟限制1中选择命名的_结构(x,12,y,'text',z,2,zz,3),'text';
    创建表xyz1(a1结构、a2结构、b字符串);
    插入表格xyz1,从xyz中选择命名的结构('x',a.x,'y',a.y),命名的结构('z',a.z,'zz',a.zz),b;
    插入表xyz1(a1、a2、b)中,从xyz中选择命名的结构('x',a.x,'y',a.y),命名的结构('z',a.z,'zz',a.zz),b;
    
    谢谢你的建议,我是这样实现的

    在表B中插入选择用户id, 将_struct('username',Table2.data.username,'shipping\u fname',Table2.data.shipping\u fname,…)命名为shippingattr, 将_struct('billing _is _shipping',Table2.data.billing _is _shipping,…..,'billing _zip',Table2.data.billing _zip)命名为billingattr 来自表A

    谢谢和问候,
    Srivignesh KN

    谢谢你的建议,我是这样实施的

    在表B中插入选择用户id, 将_struct('username',Table2.data.username,'shipping\u fname',Table2.data.shipping\u fname,…)命名为shippingattr, 将_struct('billing _is _shipping',Table2.data.billing _is _shipping,…..,'billing _zip',Table2.data.billing _zip)命名为billingattr 来自表A

    谢谢和问候,
    Srivignesh KN

    显示错误。@strugee,用错误消息更新。不确定这是否是插入结构数据类型的正确方法。显示错误。@strugee,用错误消息更新。不确定这是否是插入结构数据类型的正确方法。