首页 > 解决方案 > 需要使用 Hive HQL 忽略列表列中的最后两个值

问题描述

我有一列包含列表中的所有值。

Column A|Column B
AAA     |1 2 45 67 89
BBB     |16 25 36 45 89 63
CCC     |52 63 98 41 22 66

在上表中,B 列包含实际上是列表的字符串值。

我需要忽略 B 列中的前两个和后两个值。

我尝试使用可以忽略前两个值的拆分函数。但是忽略最后两个值是一个挑战,因为我有不同大小的列表。

我使用的代码是:

select distinct column_A,column_B,split(column_B,'\\s')[2] AS ign_first_val,
            split(column_B,'\\s')[-2] as ign_last_val
FROM Xyz

是否有任何简单的方法可以使用 HQL 忽略列表中的前两个和最后两个值?

标签: mysqlhivehiveql

解决方案


您应该能够使用regexp_extract

select regexp_extract(column_B, '^\\s*(\\d+\\s+){2}(.*?)(\\s+\\d+){2}\\s*$', 2)

正则表达式的第一部分跳过前两个值,最后一部分跳过最后两个值,只留下中间部分被提取到表达式返回的组 2 中。

这是在regex101.com上工作的正则表达式的演示


推荐阅读