我有以下要求,我希望使用Hive。
下面是DDL以及我尝试过的步骤。
表A:
来自反序列化器的簇字符串
来自反序列化器的模式字符串
来自反序列化器的表字符串
来自反序列化器的primarykey结构体
反序列化器的数据结构
从反序列化器中删除了布尔值
从反序列化器中截断布尔值
来自反序列化器的版本bigint
表B:
来自反序列化器的user_id字符串
shippingattr结构
billingattr struct
我尝试了以下内容。
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;
但是出错了,请您告诉我插入这些数据的正确方法。
错误消息: NoViableAltException(284 @ []) 在org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectClause(HiveParser_SelectClauseParser.java:742) 在org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:40147) at 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) at 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) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) 在org.apache.hadoop.util.RunJar.main(RunJar.java:212) FAILED:ParseException行1:50无法识别'(''user_id'','在select子句中''附近的输入
答案 0 :(得分:0)
首先,Hive除了插入的列列表外没有 应按顺序插入所有列。
insert into Table B
select ...
答案 1 :(得分:0)
以上情景可以按如下方式处理。在struct中插入数据的示例: -
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;
答案 2 :(得分:0)
感谢您的建议,我已经这样实现了。
在表B中插入选择user_id, named_struct('username',Table2.data.username,'shipping_fname',Table2.data.shipping_fname,......)作为shippingattr, named_struct('billing_is_shipping',Table2.data.billing_is_shipping,.....,'billing_zip',Table2.data.billing_zip)作为billingattr 来自表A;
谢谢&amp;问候, Srivignesh KN