hive提取数组中的数据

w3nuxt5m  于 2021-06-27  发布在  Hive
关注(0)|答案(3)|浏览(894)

我需要从配置单元中的数据字符串数组中提取第5个值,

arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")

如何提取 "cdpp asd" 即第5个值。
我们可以用 SUBSTR ,和 INSTR 但是有没有其他方法可以达到这个目的呢?

nfzehxib

nfzehxib1#

如果数组位于字符串列中,则可以使用删除方括号和双引号 regexp_replace 并使用 split() :

select split(regexp_replace('("abc", "123-4567", "10", "ax",   "cdpp asd", "00", "q", "na", "avail", "n", "n",   "na")','^\\(|\\)$|"',''),', *')[4];
OK
cdpp asd
vuktfyat

vuktfyat2#

1、 也许你可以试着写一本书 UDF 将此字符串转换为数组 arr ,则可以使用arr[4]访问第5个值;
2、 或者可以使用以下方法获得第5个值:

select tf.* from (
        select regexp_replace('("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")','\\(|\\)|"','') as str
    ) t lateral view posexplode(split(str,', ')) tf as pos,val
    where tf.pos = 4;

注意:这种方法要求数组字符串没有括号。

bmvo0sr5

bmvo0sr53#

arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")

Select arr[4] from tablename;

输出:

cdpp asd

相关问题