Hi

The fields' names are part of the struct definition.
Different names, different types of structs.

Dudu


e.g.

Setup

create table t1 (s struct<c1:int,c2:int>);
create table t2 (s struct<col1:int,col2:int>);

insert into table t1 select named_struct('c1',1,'c2',2);


----------------------------------------------------------------------------------

insert into t2 select * from t1;

FAILED: SemanticException [Error 10044]: Line 1:12 Cannot insert into target 
table because column number/types are different 't2': Cannot convert column 0 
from struct<c1:int,c2:int> to struct<col1:int,col2:int>.

----------------------------------------------------------------------------------

Solution 1 (per INSERT)

insert into t2 select named_struct('col1',s.c1,'col2',s.c2) from t1;

Solution 2 (one time)

alter table t2 change s s struct<c1:int,c2:int>;
insert into t2 select * from t1;



From: Kuldeep Chitrakar [mailto:kuldeep.chitra...@synechron.com]
Sent: Tuesday, June 28, 2016 4:03 PM
To: user@hive.apache.org
Subject: Hive error : Can not convert struct<> to <struct>

Hi

I have staged table as

hive (revise)> desc employees_se;
OK
name                    string
salary                    float
subordinates      array<string>
deductions          map<string,float>
adr                         struct<street:string,cty:string,st:string,zip:int>

I am trying to insert the data in partitioned table employees as

hive (revise)> desc employees;
OK
name                    string
salary                    float
subordinates     array<string>
deductions         map<string,float>
address                struct<street:string,city:string,state:string,zip:int>
state                      string

# Partition Information
# col_name                        data_type                           comment

state                      string
Time taken: 0.161 seconds, Fetched: 11 row(s)

Command

FROM employees_se se
INSERT OVERWRITE TABLE employees
PARTITION(state='CA')
SELECT * WHERE se.adr.st='CA'

But I am getting an error as

FAILED: SemanticException [Error 10044]: Line 2:23 Cannot insert into target 
table because column number/types are different ''CA'': Cannot convert column 4 
from struct<street:string,cty:string,st:string,zip:int> to 
struct<street:string,city:string,state:string,zip:int>.


Any idea, as I do not see anything wrong.



Reply via email to