Мастерство функцией Explode
В этом шаге мы исследуем функцию Explode, которая позволяет нам преобразовывать сложные типы данных, такие как массивы и карты, в несколько строк.
Начнем с создания нового примера набора данных. Перейдите в директорию /home/hadoop
и создайте файл под названием array_data.txt
с следующим содержимым:
## Войдите в директорию и создайте новый файл
cd /home/hadoop
vim array_data.txt
Введите следующее содержимое:
[1,2,3],[4,5],[6,7,8,9]
[10,11],[12,13,14],[15]
Далее создайте таблицу Hive для хранения этих данных:
CREATE TABLE array_table (arr ARRAY<STRING>);
LOAD DATA LOCAL INPATH '/home/hadoop/array_data.txt' INTO TABLE array_table;
Теперь используем функцию Explode, чтобы сгладить массивные данные в отдельные строки:
SELECT explode(arr) AS num FROM array_table;
Этот запрос преобразует каждый элемент в массиве arr
в отдельную строку, с соответствующим значением в столбце num
.
Мы также можем использовать функцию Explode в сочетании с Lateral View для обработки сложных типов данных, таких как карты:
CREATE TABLE map_table (key STRING, value MAP<STRING, INT>);
INSERT INTO map_table
SELECT * FROM (
SELECT 'entry1' AS key, map('a', 1, 'b', 2, 'c', 3) AS value
UNION ALL
SELECT 'entry2' AS key, map('d', 4, 'e', 5) AS value
) AS temp_table;
SELECT key, map_keys, map_values
FROM map_table
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values;
Данное SQL-выражение - это запрос, написанный на языке запросов Hive. Вот объяснение запроса:
SELECT key, map_keys, map_values
: Это задает столбцы, которые будут выбраны в результате. Результат будет включать три столбца: key
, map_keys
и map_values
.
FROM map_table
: Это указывает, что запрос выполняется на таблице map_table
.
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values
: Это боковое представление, которое раскрывает столбец value
таблицы map_table
. Функция EXPLODE
используется для преобразования каждой пары ключ-значение в столбце MAP
в отдельные строки. Раскрытые значения назначаются псевдонимам map_keys
и map_values
.
Кратко говоря, запрос извлекает данные из таблицы map_table
. Затем он использует предложение LATERAL VIEW EXPLODE
, чтобы расширить столбец value
, в результате чего получаются отдельные строки для каждой пары ключ-значение в столбце MAP
. Результирующие строки будут иметь столбец key
из таблицы map_table
, а также раскрытые столбцы map_keys
и map_values
, представляющие отдельные ключи и значения из столбца MAP
соответственно.