如何在配置单元中获取字符串中的元素?

how to grab an element in a string in hive?

我有一个名为 datatable 的 table,如下所示:

columnA   columnB
1         1^1^4~3^4^2~4^9^a
2         4^2^2~8^9^a~1^1^1 

我希望能够搜索数组的元素并对其进行操作。在这种情况下,我需要在 ~ 之间的每个集合中找到 a 之前的第一个数字。所以,输出应该是这样的:

columnA   columnB
1         4
2         8

如何在 HIVEQL 中表达?现在,我知道如何拆分 ~

select columnA, split(columnB, '~') from datatable 但是...我不知道如何对其进行编程以从包含“a”的组中获取元素。我该怎么做?

我试图避免使用正则表达式,但我意识到这里可能需要它们....

正则表达式在您的情况下似乎非常方便。在 a 特征组中提取第一个数字的是:

(\d+)\^(?:\d+\^)*a

演示:https://regex101.com/r/rL8gV3/1

查询将是:

select columnA, regexp_extract(columnB, '(\d+)\^(?:\d+\^)*a', 1) from datatable