Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_Лабораторная_работа_3_БСТ2104_Мажукин_И_Н.docx
Скачиваний:
42
Добавлен:
12.02.2024
Размер:
17.57 Mб
Скачать

4. Партиционирование

Создадим партиционированную таблицу из таблицы Subnets. Информация о каждой партиции хранится в отдельной HDFS-директории внутри metastore.

SET hive.exec.dynamic.partition.mode=nonstrict;

USE mazhukin_test;

DROP TABLE IF EXISTS SubnetsPart;

CREATE EXTERNAL TABLE SubnetsPart ( ip STRING )

PARTITIONED BY (mask STRING)

STORED AS TEXTFILE;

INSERT OVERWRITE TABLE SubnetsPart PARTITION (mask)

SELECT * FROM Subnets;

Рисунки 11 - 14 – Запуск команд для создания партиционированной таблицы

Уже здесь вы можете увидеть, что запрос транслируется в MapReduce-задачу. Чтобы убедиться в этом, можно зайти на ApplicationMaster UI.

Рисунок 15 – Запуск команд для создания партиционированной таблицы

Рисунок 16 – Вывод команд для создания партиционированной таблицы

Рисунок 17 – Вывод команд для создания партиционированной таблицы

Проверим получившиеся партиции через команду: SHOW PARTITIONS SubnetsPart.

Рисунок 18 – Запуск команд для проверки получившихся партиций

С помощью команды: Describe formatted <Имя таблицы>

Можно получить полную информацию о свойствах таблицы. Выведем информацию о таблице SubnetsPart.

Рисунок 19 – Запуск команды Describe formatted

Опишем смысл полей из col_name:

Col name - информация о столбце ip, тип строка (string)

Partition Information - данные о партициях таблицы указывают на наличие разделения данных по значениям в колонке mask.

Detailed Table Information - в данном разделе представлена общая информация о таблице, включая информацию о её создании, владельце, последнем доступе, расположении, параметрах хранения данных и других свойствах.

Storage Information - в данном разделе представлена информация о различных методах, которые используются для хранения данных. Здесь находится информация о библиотеке сериализации/десериализации Serge, форматах ввода и вывода, параметрах сжатия и способах хранения данных.

5. Парсинг входных данных с помощью регулярных выражений

Создаём новую таблицу.

USE mazhukin_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample ( ip STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 20 – Создание таблицы, используя парсинг

Получаем на выходе:

Рисунок 21 – Вывод таблицы с парсингом

Изменяем регулярное выражение. Для этого я создал sql файл со следующим содержимым:

USE mazhukin_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample ( ip STRING, data STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t\\t\\t(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 22 – Создание новой таблицы с новым парсингом и вывод таблицы

Допишем регулярное выражение. Добавим его в запрос и выполним, чтоб убедиться, что данные распарсились правильно. Следим за типами данных. Для этого я создал sql файл со следующим содержимым:

USE mazhukin_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample ( ip STRING, data STRING, request STRING, responsecode STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t\\t\\t(\\S*)\\t(\\S*)\\t\\d+\\t(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 23 – Создание новой таблицы с дописанным регулярным выражением и вывод новой таблицы

Выводим информации про таблицу, используя команду: DESCRIBE SerDeExample

Рисунок 24– Вывод информации о новой таблицы с дописанным регулярным выражением