配置单元提取数组中的数据

时间:2018-11-20 05:50:43

标签: sql hive hiveql

我需要从Hive的数据字符串数组中提取第5个值,

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

如何提取"cdpp asd",即第5个值。

我们可以使用SUBSTRINSTR,但是还有其他方法可以实现吗?

3 个答案:

答案 0 :(得分:1)

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

Select arr[4] from tablename;

输出:

cdpp asd

答案 1 :(得分:1)

如果数组在字符串列中,则可以使用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

答案 2 :(得分:0)

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;

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