簡體   English   中英

通過從其他表中分割配置單元列來插入Hive struct列

[英]Insert into Hive struct column by spilitting hive columns from other table

我有以下要求,我希望使用Hive實現。

  1. 表A包含Struct 1列。
  2. 創建表B以拆分表A的Struct列並加載為2個不同的列。

下面是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM