Путь монахов в поисках данных

HadoopHadoopBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В таинственных землях Востока на вершине высокой горы стоял прославленный монастырь, окутанный туманами древней мудрости. В его святых стенах жил прославленный воин- монах по имени Хиро, мастер священного искусства манипуляции данными. Его непоколебимое стремление раскрыть секреты данных завоевало уважение у ученых и монахов.

Однажды настоятель монастыря призвал Хиро в свою камеру, лицо которого было зачеркнуто тревогой. "Хиро, возникло страшное положение", - начал настоятель. - "Наши священные рукописи, содержащие древнюю знать наших предков, рассеяны по всей земле. Мы должны восстановить и упорядочить эту бесценную информацию, прежде чем она навсегда потеряется".

Хиро深深一躬, глаза его горели решительностью. "Я не подведу вас, благородный мастер", - он клянулся. - "С помощью Hadoop и его функций генерации таблиц я обсушу всю землю и восстановлю порядок в древней мудрости наших предков".

Настоятель庄重но кивнул, положив доверие в непоколебимое решение Хиро. Так начался путь Хиро к мастерству функций генерации таблиц Hive, путешествие, которое испытало его навыки и решительность до предела.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/table_generating("Table Generating Function") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") subgraph Lab Skills hadoop/hive_shell -.-> lab-289002{{"Путь монахов в поисках данных"}} hadoop/basic_hiveql -.-> lab-289002{{"Путь монахов в поисках данных"}} hadoop/table_generating -.-> lab-289002{{"Путь монахов в поисках данных"}} hadoop/udf -.-> lab-289002{{"Путь монахов в поисках данных"}} end

Исследование функции 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. Вот упрощенное объяснение запроса:

  1. Мы хотим выбрать три столбца из таблицы: line, x и y.

  2. Данные извлекаются из таблицы sample_table.

  3. Запрос использует предложение 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. Вот объяснение запроса:

  1. SELECT key, map_keys, map_values: Это задает столбцы, которые будут выбраны в результате. Результат будет включать три столбца: key, map_keys и map_values.
  2. FROM map_table: Это указывает, что запрос выполняется на таблице map_table.
  3. 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, овладев искусством преобразования сложных структур данных в более управляемые формы.

Разбивая сложные данные на отдельные элементы, мы открыли тайны, скрытые внутри них, выявили бесценные инсайты и铺平道路 для более глубокого понимания. Как и миссия Хиро, которая собрала рассеянные рукописи древней мудрости, наше овладение этими мощными функциями позволяет нам организовывать и анализировать данные способами, которые казались невозможными ранее.

Это практическое занятие не только укрепило наши технические навыки, но и внушило в нас глубокое уважение к долгожительному наследию манипуляции данными. При продолжении нашего путешествия, надеемся, что уроки, полученные здесь, будут служить направляющим светом, осветляя наш путь к дальнейшему мастерству в искусстве работы с данными.