Hive - 将分隔列拆分为多行,根据位置进行选择

div*_*thi 4 hadoop hive hiveql

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

id  col1  col2
1   5,6   7,8
Run Code Online (Sandbox Code Playgroud)

我想得到结果

id col1 col2
1  5    7
1  6    8
Run Code Online (Sandbox Code Playgroud)

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

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

询问

SELECT col3, col4
FROM test ext 
lateral VIEW explode(split(col1,'\002')) col1 AS col3
lateral VIEW explode(split(col2,'\002')) col2 AS col4
Run Code Online (Sandbox Code Playgroud)

结果

id col1 col2
1  5    7
1  5    8
1  6    7
1  6    8
Run Code Online (Sandbox Code Playgroud)

Edw*_*rek 6

您可以用来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;
Run Code Online (Sandbox Code Playgroud)

输出:

id col3 col4
1  5    7
1  6    8
Run Code Online (Sandbox Code Playgroud)

参考:Hive语言手册-poseexplode()