将Json转换为HIVE中的单独列

时间:2017-03-15 03:51:44

标签: json hadoop hive

我在Hive数据库表中有4列。前两列是字符串类型,第三列是JSON。类型。如何在不同的列中提取json数据。 Hive中可用的SERDE似乎只处理json数据。我有普通(STRING)和JSON数据。如何在此处以单独的列提取数据。

示例:

abc 2341    {max:2500e0,value:"20",Type:"1",ProviderType:"ABC"} {Name:"ABC",minA:1200e0,StartDate:1483900200000,EndDate:1483986600000,Flags:["flag4","flag3","flag2","flag1"]}

xyz 6789    {max:1300e0,value:"10",Type:"0",ProviderType:"foo"} {Name:"foo",minA:3.14159e0,StartDate:1225864800000,EndDate:1225864800000,Flags:["foo","foo"]}

1 个答案:

答案 0 :(得分:2)

给定一个固定的JSON

 safefree (&ptrToBeFreed);
create table mytable (str string,i int,jsn1 string, jsn2 string);

insert into mytable values
    ('abc',2341,'{"max":2500e0,"value":"20","Type":"1","ProviderType":"ABC"}','{"Name":"ABC","minA":1200e0,"StartDate":1483900200000,"EndDate":1483986600000,"Flags":["flag4","flag3","flag2","flag1"]}')
   ,('xyz',6789,'{"max":1300e0,"value":"10","Type":"0","ProviderType":"foo"}','{"Name":"foo","minA":3.14159e0,"StartDate":1225864800000,"EndDate":1225864800000,"Flags":["foo","foo"]}')
;
select  str,i
       ,jsn1_max,jsn1_value,jsn1_type,jsn1_ProviderType
       ,jsn2_Name,jsn2_minA,jsn2_StartDate,jsn2_EndDate
       ,jsn2_Flags

from    mytable

        lateral view json_tuple (jsn1,'max','value','Type','ProviderType') 
            j1 as jsn1_max,jsn1_value,jsn1_type,jsn1_ProviderType

        lateral view json_tuple (jsn2,'Name','minA','StartDate','EndDate','Flags') 
            j2 as jsn2_Name,jsn2_minA,jsn2_StartDate,jsn2_EndDate,jsn2_Flags
;