Since data is stored in HDFS you have very limited scope to directly append. 

As a workaround you could get the contents of the original array by their index 
and then create a new array. This would only make sense if you know the number 
of elements in your array and it doesn’t change across rows.

select array(ab[0],ab[1],"blah") from table2;
OK
["temp1","temp2","blah”]


> On Mar 13, 2016, at 1:26 AM, Rex X <[email protected]> wrote:
> 
> Thank you, Chandeep. Yes, my first problem solved. 
> How about the second one? Is there any way to append an element to an 
> existing array?
> 
> 
> 
> On Sat, Mar 12, 2016 at 5:10 PM, Chandeep Singh <[email protected] 
> <mailto:[email protected]>> wrote:
> If you only want the array while you’re querying table1 your example should 
> work. If you want to add AB to the table you’ll probably need to create a new 
> table by selecting everything you need from table1.
> 
> hive> select * from table1 limit 1;
> OK
> temp1 temp2   temp3
> 
> hive> select f1, array(f2, f3) AS AB from table1 limit 1;
> OK
> temp1 [“temp2”,"temp3"]
> 
> 
>> On Mar 13, 2016, at 12:33 AM, Rex X <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> How to make the following work?
>> 
>> 1. combine columns A and B to make one array as a new column AB. Both column 
>> A and B are string types.
>> 
>>   select 
>> string_columnA, 
>> string_columnB, 
>> array(string_columnA, string_columnB) as AB
>> from Table1;
>> 
>> 2. append columnA to an existing array-type column B
>> 
>> select
>> string_columnA,
>> array_columnB,
>> array_flatmerge(string_columnA, array_columnB) as AB
>> from Table2;
>> 
>> In fact, I should say "set" instead of "array" above, since I expect no 
>> duplicates.
>> 
>> Any idea?
>> 
> 
> 

Reply via email to