You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hive.apache.org by kaducangica <ka...@gmail.com> on 2018/05/05 22:07:57 UTC

Hive change struct column

Hi all,

i have the follwing Hive table on Amazon EMR:

CREATE TABLE equipment_users (
  user_id bigint,
  equipment array<struct<identifier:int,hex:string,battery_level:int>>
);

I want to add a new field in equipment column doing this command:

ALTER TABLE equipment_users CHANGE COLUMN equipment equipment
array<struct<identifier:int,hex:string,battery_level:int,date_installed:timestamp>>;

But it is giving me the error:

Error while processing statement: FAILED: Execution Error, return code 1
from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The
following columns have types incompatible with the existing columns in
their respective positions :
equipment


Someone can help me do this? Or perhaps sugest another solution to do this.

Thanks in advance.

Best regards,
Carlos.

Re: Hive change struct column

Posted by Staticor <st...@me.com>.
Hi kaducangica,

 This exception is telling that your data doesn't  match to the definition. 

So I think you may redefine your Table Schema.

A STRUCT is similar conceptually to a table row: it contains a fixed number of named fields, each with a predefined type. 

The names and number of fields within the STRUCT are fixed. Each field can be a different type. A field within a STRUCT can also be another STRUCT, or an ARRAY or a MAP, allowing you to create nested data structures with a maximum nesting depth of 100.


Some related issues you can find helpful:

https://community.hortonworks.com/questions/149307/can-i-add-a-subcolumn-to-a-hive-struct-column-usin.html <https://community.hortonworks.com/questions/149307/can-i-add-a-subcolumn-to-a-hive-struct-column-usin.html>





> On May 6, 2018, at 6:07 AM, kaducangica <ka...@gmail.com> wrote:
> 
> Hi all,
> 
> i have the follwing Hive table on Amazon EMR:
> 
> CREATE TABLE equipment_users (
>   user_id bigint,
>   equipment array<struct<identifier:int,hex:string,battery_level:int>>
> );
> 
> I want to add a new field in equipment column doing this command:
> 
> ALTER TABLE equipment_users CHANGE COLUMN equipment equipment array<struct<identifier:int,hex:string,battery_level:int,date_installed:timestamp>>;
> 
> But it is giving me the error: 
> 
> Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The following columns have types incompatible with the existing columns in their respective positions :
> equipment
> 
> 
> Someone can help me do this? Or perhaps sugest another solution to do this.
> 
> Thanks in advance.
> 
> Best regards,
> Carlos.