Сегодня я хочу поделиться с вами использованием Lateral View и Lateral View Outer в Hive. Эти две операции часто встречаются при обработке данных. Так что же они собой представляют? Давайте узнаем сегодня.
Латеральный вид используется вместе с функциями создания таблиц (такими как разнесение) для расширения столбцов типа массива или карты. Боковой вид Hive используется для соединения сгенерированных виртуальных таблиц.
Например, у нас есть таблица, содержащая массив:
create table array_table(id int, items array<string>);
insert into array_table(id,items)
values
(1, array('apple', 'banana', 'pear')),
(2, array('watermelon', 'orange')),
(3, array(null));
+-----+----------------------------+
| id | items |
+-----+----------------------------+
| 1 | ["apple","banana","pear"] |
| 2 | ["watermelon","orange"] |
| 3 | NULL |
+-----+----------------------------+
Если мы хотим расширить столбец элементов, мы можем использовать вид сбоку:
select id, item
from array_table
lateral view explode(items) tmp as item;
Результатом будет:
+-----+-------------+
| id | item |
+-----+-------------+
| 1 | apple |
| 1 | banana |
| 1 | pear |
| 2 | watermelon |
| 2 | orange |
+-----+-------------+
Как вы можете ясно видеть, Lateral View — это мощный инструмент для взаимодействия со сложными типами данных.
Однако вид сбоку имеет ограничение: если в развернутом столбце есть нулевое значение, строка, содержащая нулевое значение, будет полностью удалена. На данный момент мы можем использовать внешний вид сбоку.
Просто добавьте внешний вид после вида сбоку, и он сохранит строки, содержащие нулевые значения. Если массив пуст, результат разнесения будет NULL.
Мы используем внешний вид сбоку:
select id, item
from array_table
lateral view outer explode(items) tmp as item;
Результатом будет:
+-----+-------------+
| id | item |
+-----+-------------+
| 1 | apple |
| 1 | banana |
| 1 | pear |
| 2 | watermelon |
| 2 | orange |
| 3 | NULL |
+-----+-------------+
Вы можете видеть, что строка с идентификатором 3 сохраняется и больше не игнорируется.
Я надеюсь, что содержание этой статьи поможет вам лучше понять использование латерального вида и внешнего вида в Hive. Эти два метода, несомненно, станут вашим мощным оружием при работе со сложными типами данных в Hive.