[英]Insert into Hive struct column by spilitting hive columns from other table
我有以下要求,我希望使用Hive實現。
下面是DDL以及我嘗試過的步驟。
表A:
來自反序列化器的簇字符串
來自反序列化器的模式字符串
反序列化器中的表字符串
來自反序列化器的primarykey結構
反序列化器的數據結構
從反序列化程序中刪除了布爾值
從反序列化器截斷布爾值
來自反序列化器的bigint版本
表B:來自反序列化器的user_id字符串
shippingattr struct 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)org.apache.hadoop.hive.ql.parse.HiveParser.singleSelectStatement(HiveParser.java:38048)org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java: 37754)atg.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:37654)org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:36898)at org位於org.apache.hadoop的org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1338)的.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:36774) .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:1 66)org.apache.hadoop.hive.ql.Driver.compile(Driver.java:404)org.apache.hadoop.hive.ql.Driver.compile(Driver.java:322)atg.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的org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:430)。 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),位於sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegati 位於org.apache.hadoop.util.RunJar.main(RunJar.java:212)的java.lang.reflect.Method.invoke(Method.java:606)中的ngMethodAccessorImpl.java:43)失敗:ParseException行1:50不能識別'('''user_id'','在select子句中'附近的輸入
首先,Hive不會插入列的列表。
應按順序插入所有列。
insert into Table B
select ...
以上場景可以如下處理。 在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;
謝謝你的建議,我已經用這種方式實現了。
插入表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)作為表A中的billingattr;
謝謝和問候,Srivignesh KN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.