Hive - 在多行上拆分分隔列,根据位置选择

Posted

技术标签:

【中文标题】Hive - 在多行上拆分分隔列,根据位置选择【英文标题】:Hive - Split delimited columns over multiple rows, select based on position 【发布时间】:2016-06-02 07:45:14 【问题描述】:

我正在寻找一种基于逗号分隔数据拆分列的方法。下面是我的数据集

id  col1  col2
1   5,6   7,8

我想得到结果

id col1 col2
1  5    7
1  6    8

索引的位置应该匹配,因为我需要相应地获取结果。

我尝试了以下查询,但它返回了笛卡尔积。

查询

SELECT col3, col4
FROM test ext 
lateral VIEW explode(split(col1,'\002')) col1 AS col3
lateral VIEW explode(split(col2,'\002')) col2 AS col4

结果

id col1 col2
1  5    7
1  5    8
1  6    7
1  6    8

【问题讨论】:

Hive Explode / Lateral View multiple arrays的可能重复 【参考方案1】:

您可以使用posexplode() 为您的拆分数组创建位置索引列。然后,仅选择位置索引相等的那些行。

SELECT id, col3, col4
  FROM test
  lateral VIEW posexplode(split(col1,'\002')) col1 AS pos3, col3
  lateral VIEW posexplode(split(col2,'\002')) col2 AS pos4, col4
  WHERE pos3 = pos4;

输出:

id col3 col4
1  5    7
1  6    8

参考:Hive language manual - posexplode()

【讨论】:

这效率极低。 这仅适用于我在两列中具有相同大小的情况。如果拆分后我们的大小有差异怎么办。在这种情况下,我们期望 null 。你能帮忙吗

以上是关于Hive - 在多行上拆分分隔列,根据位置选择的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?

pandas 将excel中的一列文本数据拆分成多列 如何操作

将列拆分为多行

kettle列拆分多行运用

如何使用横向视图将分隔字符串拆分为 Hive 中的多行

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