Hive Извлечение данных в массив - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно извлечь 5-е значение из массива строк данных в Hive,

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

Как мне извлечь "cdpp asd" т.е. 5-е значение.

Мы можем использовать SUBSTRINSTR но есть ли другой способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

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;

Примечание: этот способ требует, чтобы строка массива не имела скобок.

0 голосов
/ 20 ноября 2018

Если ваш массив находится в строковом столбце, вы можете удалить скобки и двойные кавычки, используя 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
0 голосов
/ 20 ноября 2018
arr = ("abc", "123-4567", "10", "ax", "cdpp asd", "00", "q", "na", "avail", "n", "n", "na")

Select arr[4] from tablename;

Выход:

cdpp asd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...