我在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()
仅适用于数组吗?
答案 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;