mysql - 需要使用 Hive HQL 忽略列表列中的最后两个值

标签 mysql hive hiveql

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

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 列中的前两个和最后两个值。

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

我使用的代码是:

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 忽略列表中的前两个和最后两个值?

最佳答案

您应该能够使用regexp_extract:

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

正则表达式的第一部分跳过前两个值,最后一部分跳过最后两个值,仅将中间部分提取到第 2 组中,这就是表达式返回的内容。

这是正则表达式在 regex101.com 上运行的演示

关于mysql - 需要使用 Hive HQL 忽略列表列中的最后两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54878649/

相关文章:

sql - HIVE 中的 LIMIT 子句真的是随机的吗?

mysql - 为什么我的端口 3306 关闭,即使我根本没有绑定(bind)地址和跳过网络线路?

javascript - 通过 onclick 方法 js 从 php code catch 中获取 id 然后传递到另一个页面

hadoop - 在pyspark中保存中间表的最佳方法

csv - 我们可以在 hive (Hadoop工具)中合并.CSV文件和.RAR文件吗?

linux - 如何将 Hive 用户设置为与 Spark 程序中的 Spark 用户不同的用户?

mysql - 把三个中频换成一个

sql - 使用QT备份MySQL数据库

sed - 使用 sed 替换 NULL 列

hadoop - 无法找到创建的Hive表,也无法从表中检索数据