如何使用横向视图爆炸将分隔的String拆分为Hive中的多个行

时间:2018-04-17 18:42:03

标签: hive hive-udf

我在Hive中有一张表格如下 -

create table somedf 
(sellers string , 
 orders int 
)

insert into somedf values
('1--**--2--**--3',50),
('1--**--2', 10)

该表有一个名为sellers的列,它由insert语句中描述的字符分隔。我想将卖家分成多行,使其看起来如下 -

exploded_sellers orders
1                 50
2                 50
3                 50
1                 10
2                 10

我正在尝试在Hive中使用lateral view explode()函数但无法获得结果。我使用以下查询 -

select exploded_sellers, orders
from somedf
lateral view outer explode(split(sellers,'\\--*.*\\*.*--')) t1 as exploded_sellers

它给出了以下结果作为输出 -

exploded_sellers orders
1                 50
3                 50
1                 10
2                 10

此结果不会根据需要从表中拆分第1行('1--**--2--**--3',50),最终只生成2行而不是3行。

此任务是否还需要其他功能? lateral view explode()仅适用于数组吗?

2 个答案:

答案 0 :(得分:1)

传递给split的模式不正确。 *字符需要转义。无需逃避-

使用

select exploded_sellers, orders
from somedf
lateral view outer explode(split(sellers,'--\\*\\*--')) t1 as exploded_sellers

答案 1 :(得分:1)

这也会奏效。它预计会在中间出现两次*。

select exploded_sellers, orders
from somedf
lateral view outer explode(split(sellers,'--\\*{2}--')) t1 as exploded_sellers;