我需要从Hive的数据字符串数组中提取第5个值,
arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")
如何提取"cdpp asd"
,即第5个值。
我们可以使用SUBSTR
和INSTR
,但是还有其他方法可以实现吗?
答案 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;
注意:这种方式要求数组字符串没有括号。