如何使用横向视图将分隔字符串拆分为 Hive 中的多行
Posted
技术标签:
【中文标题】如何使用横向视图将分隔字符串拆分为 Hive 中的多行【英文标题】:How to split delimited String to multiple rows in Hive using lateral view explode 【发布时间】:2018-04-17 18:42:02 【问题描述】:我在 Hive 中有一张如下表 -
create table somedf
(sellers string ,
orders int
)
insert into somedf values
('1--**--2--**--3',50),
('1--**--2', 10)
该表有一个名为 Sellers 的列,它由插入语句中描述的字符分隔。我想将卖家分成多行,如下所示 -
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()
是否仅适用于数组?
【问题讨论】:
【参考方案1】:传递给split
的模式不正确。 *
字符需要转义。无需逃避-
。
使用
select exploded_sellers, orders
from somedf
lateral view outer explode(split(sellers,'--\\*\\*--')) t1 as exploded_sellers
【讨论】:
【参考方案2】:这也可以。它期望在中间出现两次 *。
select exploded_sellers, orders
from somedf
lateral view outer explode(split(sellers,'--\\*2--')) t1 as exploded_sellers;
【讨论】:
以上是关于如何使用横向视图将分隔字符串拆分为 Hive 中的多行的主要内容,如果未能解决你的问题,请参考以下文章