Получить конкретное значение из строки текста в Hive - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужно получить значение 5 из строки текста ниже в таблице Hive. По какой-то причине использованные мной функции floor и split могут получить значения «0» и «3», но я не знаю, что делать, чтобы получить первое значение перед первым «/»:

Column name: logsummary
**Record:5/0/3/0/4/4/143504**

Select 
floor(split(logsummary, '[/]')[1]) as draws,
floor(split(logsummary, '[/]')[2]) as losses
from table A

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Функция Hive split() принимает два параметра (string, regex pattern) и разделяет string согласно regex. Разделения будут возвращены в массиве.

К каждому разбиению можно получить доступ через индекс массива. Вам нужно 5, которые доступны по индексу 0.

Следовательно, запрос должен быть:

Select 
floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws,
floor(split('5/0/3/0/4/4/143504', '[/]')[1]) as losses;

--Output:
draws   losses
5       0

Просто, чтобы расширить этот пример, это все разбиения:

Select 
floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as e0,
floor(split('5/0/3/0/4/4/143504', '[/]')[1]) as e1,
floor(split('5/0/3/0/4/4/143504', '[/]')[2]) as e2,
floor(split('5/0/3/0/4/4/143504', '[/]')[3]) as e3,
floor(split('5/0/3/0/4/4/143504', '[/]')[4]) as e4,
floor(split('5/0/3/0/4/4/143504', '[/]')[5]) as e5,
floor(split('5/0/3/0/4/4/143504', '[/]')[6]) as e6;

--Output
e0  e1  e2  e3  e4  e5  e6
5   0   3   0   4   4   143504
0 голосов
/ 30 апреля 2018

Используйте 0 значение вместо 1, тогда вы получите 5 значение

hive> Select floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws;
    +--------+--+
    | draws  |
    +--------+--+
    | 5      |
    +--------+--+

Ниже выписка показывает результаты пола (0,1,2) из ​​вашей записи

hive> Select floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws,floor(split('5/0/3/0/4/4/143504', '[/]')[1]),floor(split('5/0/3/0/4/4/143504', '[/]')[2]) losses;
+--------+------+---------+--+
| draws  | _c1  | losses  |
+--------+------+---------+--+
| 5      | 0    | 3       |
+--------+------+---------+--+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...