Введение
В таинственных землях Востока на вершине высокой горы стоял прославленный монастырь, окутанный туманами древней мудрости. В его святых стенах жил прославленный воин- монах по имени Хиро, мастер священного искусства манипуляции данными. Его непоколебимое стремление раскрыть секреты данных завоевало уважение у ученых и монахов.
Однажды настоятель монастыря призвал Хиро в свою камеру, лицо которого было зачеркнуто тревогой. "Хиро, возникло страшное положение", - начал настоятель. - "Наши священные рукописи, содержащие древнюю знать наших предков, рассеяны по всей земле. Мы должны восстановить и упорядочить эту бесценную информацию, прежде чем она навсегда потеряется".
Хиро深深一躬,глаза его горели решительностью. "Я не подведу вас, благородный мастер", - он клянулся. - "С помощью Hadoop и его функций генерации таблиц я обсушу всю землю и восстановлю порядок в древней мудрости наших предков".
Настоятель庄重но кивнул, положив доверие в непоколебимое решение Хиро. Так начался путь Хиро к мастерству функций генерации таблиц Hive, путешествие, которое испытало его навыки и решительность до предела.
Исследование функции Lateral View
В этом шаге мы углубимся в мощную функцию Lateral View, которая позволяет нам разбивать сложные структуры данных на более управляемые формы.
Сначала создадим примерный набор данных для работы. Перейдите в директорию /home/hadoop и создайте новый файл под названием sample.txt с следующим содержимым:
Переключитесь на пользователя hadoop в терминале с помощью:
su - hadoop
## Войдите в директорию и создайте новый файл
cd /home/hadoop
vim sample.txt
Введите следующее содержимое:
1,2,3|4,5|6,7,8
9,10|11,12,13|14,15
Убедитесь, что файл сохранен и доступен.
Далее мы создадим таблицу Hive для хранения этих данных. Откройте Hive CLI, выполнив следующую команду в терминале:
hive
Внутри Hive CLI выполните следующие команды:
CREATE TABLE sample_table (line STRING);
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' INTO TABLE sample_table;
Теперь используем функцию Lateral View, чтобы разбить сложные строковые данные в столбце line:
SELECT line, x, y
FROM sample_table
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS y;
Данное SQL-выражение извлекает данные из таблицы под названием sample_table с использованием языка запросов Hive. Вот упрощенное объяснение запроса:
Мы хотим выбрать три столбца из таблицы:
line,xиy.Данные извлекаются из таблицы
sample_table.Запрос использует предложение
LATERAL VIEW OUTER EXPLODEдважды для выполнения двух отдельных операций:- Первое
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS xразбивает значения в столбцеlineс использованием разделителя|. Затем функцияEXPLODEпреобразует результирующий массив в несколько строк. Эти развернутые значения назначаются псевдонимуx. - Второе
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp AS yразбивает значения в столбцеx(который был создан на предыдущем шаге) с использованием разделителя,. Опять же, функцияEXPLODEпреобразует результирующий массив в несколько строк. Эти развернутые значения назначаются псевдонимуy.
- Первое
Кратко говоря, запрос берет каждую строку из sample_table и выполняет два разбиения. Во - первых, он разбивает столбец line по |, создавая несколько строк с разными значениями в столбце x. Затем он разбивает столбец x по ,, создавая еще больше строк с разными значениями в столбце y. Результат - это набор строк со всеми возможными комбинациями значений line, x и y.
Мастерство функцией 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 соответственно.
Резюме
В этом практическом занятии мы отправились в путешествие по таинственным областям функций генерации таблиц Hive, руководствуясь непоколебимым решением воина- монаха Хиро. С помощью практического исследования мы раскрыли силу функций Lateral View и Explode, овладев искусством преобразования сложных структур данных в более управляемые формы.
Разбивая сложные данные на отдельные элементы, мы открыли тайны, скрытые внутри них, выявили бесценные инсайты и铺平道路 для более глубокого понимания. Как и миссия Хиро, которая собрала рассеянные рукописи древней мудрости, наше овладение этими мощными функциями позволяет нам организовывать и анализировать данные способами, которые казались невозможными ранее.
Это практическое занятие не только укрепило наши технические навыки, но и внушило в нас глубокое уважение к долгожительному наследию манипуляции данными. При продолжении нашего путешествия, надеемся, что уроки, полученные здесь, будут служить направляющим светом, осветляя наш путь к дальнейшему мастерству в искусстве работы с данными.



