Используйте функцию split () , она разбивается вокруг шаблона регулярного выражения и возвращает массив:
select age,
NameSplitted[0] as FirstName,
NameSplitted[1] as LastName
from
(
select age,
split(Name,' +') as NameSplitted
from myTable
)s;
Или просто select age, split(Name,' +')[0] FirstName, split(Name,' +')[0] LastName from myTable;
Шаблон ' +'
означает один или несколько пробелов.
Также, если у вас есть имена из трех слов или даже больше, и вы хотите разделить только первое слово как имя, а все остальное как фамилию или использовать более сложное правило, вы можете использовать функцию regexp_extract, как в этом примере:
hive> select regexp_extract('Johannes Chrysostomus Wolfgangus Theophilus Mozart', '^(.*?)(?: +)(.*)$', 1);
OK
Johannes
Time taken: 1.144 seconds, Fetched: 1 row(s)
hive> select regexp_extract('Johannes Chrysostomus Wolfgangus Theophilus Mozart', '^(.*?)(?: +)(.*)$', 2);
OK
Chrysostomus Wolfgangus Theophilus Mozart
Time taken: 0.692 seconds, Fetched: 1 row(s)
Образец здесь означает: начало строки '^', первая группа захвата, состоящая из любого числа символов (.*?)
, группа захвата, состоящая из любого количества пробелов (?: +)
, последняя группа захвата, состоящая из любого числа символов жадные (.*)
, а $
означает конец строки