如何使用横向视图将分隔字符串拆分为 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 中的多行的主要内容,如果未能解决你的问题,请参考以下文章

如何将分号分隔的数据拆分为配置单元中的列并转置它?

关于在Hive中将特定字符分隔的字符串拆分成多行的应用

将 hive 查询输出拆分为逗号分隔值

如何将两个单独表中的两列拆分为视图中的多行?

如何根据一个字段是不是包含oracle sql中的逗号分隔字符串将单行拆分为多行?

如何在 Hive 中使用横向视图分解 XML 数据格式?