如何在Hive中将Map转换为列?

4

假设我们有

columnsA        columnsB
   1           {'A':22,'B':11}
   2           {'A':13,'C':24}

如何将其转换为
columnsA   A   B   C
   1       22  11  NA
   2       13  NA  24
1个回答

0

使用Map[key] operator

select m['A'] A,  
       m['B'] B, 
       m['C'] C 
  from (select str_to_map("A:22,B:11") m) s;

返回:
A       B       C
22      11      NULL

如果你需要在编程中使用'NA'代替NULL,请使用NVL()函数:
NVL(m['A'],'NA') as A

非常感谢!在列B中有超过200个离散值。还有其他方法吗? - takashi
@takashi 另一种方法是使用 lateral view outer explode(mapCol) s as key, val;,就像这个答案中所示:https://dev59.com/u7Lma4cB1Zd3GeqPXjod#54960324。但在此之后,您还需要根据键将 (key, val) 转换为列,这可以使用条件聚合完成。使用 map[key] 将更简单和高效。 - leftjoin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接