2017-02-13 5 views
1

私はハイブを使用したいと考えています。他のテーブルからハイブカラムを散布してハイブ構造体のカラムに挿入します

  1. 表Aは、構造体1の列を有する。
  2. 表Aの構造列を分割し、2つの異なる列としてロードするために表Bを作成します。

以下はDDLと私が試した手順です。

表A:
デシリアライザスキーマ列から

クラスタ列
デシリアライザテーブル列から
デシリアライザトランケートから
デシリアライザ削除ブールから
デシリアライザデータ構造体から
デシリアライザ主キー構造体からデシリアライザのブール値
私は次のことを試みた
デシリアライザshippingattr構造体 billingattr構造体

から USER_ID列:

デシリアライザ表BからバージョンBIGINT。

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でorg.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectClause(HiveParser_SelectClauseParser.java:742) で .com.parse.HiveParser.selectClause(HiveParser.java:40147) at org.apache.hadoop.hive.ql.parse.HiveParser.singleSelectStatement(HiveParser.java:38048) at org.apache.hadoop.hive.ql .parse.HiveParser.selectStatement(HiveParser.java:37754) at org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:37654) at org.apache.hadoop.hive.ql.parse .HiveParser.queryStatementExpressionBody(HivePars (HiveParser.java:36774) at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:36774) at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser。 java:1338) at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1036) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java: 199) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:404) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:322) at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:975) at org.apache.hadoop。 hive.ql.Driver.runInternal(Driver.java:1040) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:911) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:901) at org.apache。 hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver。java:275) at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:227) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:430) at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:803) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:697) at org.apache.hadoop。 hive.cli.CliDriver.main sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)でsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) で(CliDriver.java:636) sun.reflect.DelegatingMethodAccessorImplで.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.Run Jar.main(RunJar.java:212) FAILED:ParseException行1:50は '(' 'user_id' '、選択句で)入力を認識できません

+0

は私たちにエラーを示しています。 – strugee

+0

@strugee、エラーメッセージとともに更新されました。これが構造体データ型に挿入する正しい方法であるかどうかは不明です。 –

答えて

0

開始のために、Hiveは列のリストインサート。
すべての列は、その順序で挿入する必要があります。

insert into Table B 
select ... 
+0

本当にありがとうございます。 –

0

上記シナリオは以下のように扱うことができます。構造体にデータを挿入するサンプル例: -

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; 
+0

同じようにしていただきありがとうございます。 –

0

ありがとうございます、私はこのように実装しました。

shippingattr、 named_struct( 'billing_is_shippingとして表表BセレクトUSER_ID、 named_struct( 'ユーザ名'、Table2.data.username、 'shipping_fname'、Table2.data.shipping_fname、......)に挿入'、Table2.data.billing_is_shipping、.....、' billing_zip '、Table2.data.billing_zip)を表Aの請求書番号 とする。

おかげ&よろしく、 Srivignesh KN

関連する問題