Необходимо игнорировать последние два значения в столбце списков с помощью Hive HQL - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть столбец, который содержит все значения в списках.

Column A|Column B
AAA     |1 2 45 67 89
BBB     |16 25 36 45 89 63
CCC     |52 63 98 41 22 66

Здесь в приведенной выше таблице столбец B содержит строковые значения, которые фактически являются списками.

Мне нужно игнорироватьпервые два и два последних значения в столбце B.

Я попытался использовать функцию split, где я могу игнорировать первые два значения.Но игнорирование последних двух значений является проблемой, так как у меня есть списки разных размеров.

Код, который я использовал:

select distinct column_A,column_B,split(column_B,'\\s')[2] AS ign_first_val,
            split(column_B,'\\s')[-2] as ign_last_val
FROM Xyz

Есть ли простой способ игнорировать первые два и последние два значенияв списке с использованием HQL?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны иметь возможность использовать regexp_extract:

select regexp_extract(column_B, '^\\s*(\\d+\\s+){2}(.*?)(\\s+\\d+){2}\\s*$', 2)

Первая часть регулярного выражения пропускает первые два значения, а последняя часть пропускает последние два значения, оставляя только среднюю часть длябыть извлеченным в группу 2. Это то, что возвращается выражением.

Вот демонстрация регулярного выражения, работающего над regex101.com

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