2017-06-21 1 views
0

J'ai une table Hive dont le schéma est comme ci-dessous, le col est de type map:changement d'une valeur de clé dans les colonnes de carte dans le tableau ruche via HQL

select 
    col 
from table 

col 
{"name":"abc", "value":"val_1"} 

Ce que je dois faire est de changer le val_1 à val_2 et créez-en une autre table.

create table table_2 as 
select 
    col -- TODO: need to do something here 
from table 

Une suggestion? Merci!

+0

Quel est le type de données de 'col'? –

+0

c'est un type 'map'. @DuduMarkovitz – KAs

Répondre

1
with t as (select map("name","abc","value","val_1") as col) 
select map("name",col["name"],"value","val_2") as col 
from t 

+--------------------------------+ 
|    col    | 
+--------------------------------+ 
| {"name":"abc","value":"val_2"} | 
+--------------------------------+ 
+0

Puisqu'il ne s'agit que d'un exemple de question, le vrai aura des paires clé-valeur dynamiques dans 'col' (il y aura sûrement au moins la valeur' value', pour la clé 'name' et le reste, c'est dynamique), existe-t-il un moyen général de mise en œuvre? Merci mec! – KAs

+0

Jason, il y a un moyen (fait), mais c'est moche comme l'enfer et il a quelques limitations. J'écrirais un UDF pour cela –

+0

Merci l'homme, j'ai essayé d'écrire une fonction de scala et l'ai enregistré à UDF déjà. À votre santé :) – KAs