考虑下表tab
:
id fruits
1 orange, banana
2 orange
3 apple, banana, grape
我想"爆炸"此表位于fruits
列:
select
id
individual_fruit
from tab
lateral view explode(split(fruits, ',')) the_fruits as individual_fruit
这给了我这个:
id individual_fruit
1 orange
1 banana
2 orange
3 apple
3 banana
3 grape
其中几行中的前导空格使得将这个新表与其他表连接起来很困难。如何删除新fruit
列中的空格?我已经习惯了Python,有些Hive似乎是Python式的,所以像map(str.strip, individual_fruit))
这样的东西对我来说很有意义(但这显然不适用于Hive!)。
答案 0 :(得分:2)
split
第二个参数是正则表达式
select t.id
,f.individual_fruit
from tab t
lateral view explode(split(fruits, '\\s*,\\s*')) f as individual_fruit
;
+-----+-------------------+
| id | individual_fruit |
+-----+-------------------+
| 1 | orange |
| 1 | banana |
| 2 | orange |
| 3 | apple |
| 3 | banana |
| 3 | grape |
+-----+-------------------+
答案 1 :(得分:1)
我有几种方法可以解决我的问题。
您可以使用translate
:
translate(individual_fruit, ' ', '')
但这实际上只有在空格是字符串中唯一的空格时才有效。当包含其他空白类型时,这种方法会变得毛茸茸。
或者,使用trim
删除所有前导和尾随空格
trim(individual_fruit)
我确定还有其他方法可以解决此问题,可能使用regexp_replace
,但我的问题可以通过上述方法得到解答。