剥离Hive中的空白

时间:2017-09-19 17:24:32

标签: hadoop hive hiveql

考虑下表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!)。

2 个答案:

答案 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,但我的问题可以通过上述方法得到解答。