如何在配置单元中获取字符串中的元素?
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
我有一个名为 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