
6. Практика
Задача 0. Посчитать кол-во различных масок подсети.
EXPLAIN
SELECT COUNT(DISTINCT mask) AS count_mask
FROM Subnets;
Рисунок 25 – Вывод плана запроса
Рисунок 26 – Вывод плана запроса
Рисунок 27 – Вывод процесса работы запроса
Рисунок 28 – Вывод процесса работы запроса
Рисунок 29 – Вывод процесса работы запроса
Рисунок 30 – Статус работы запроса
Количество уникальных масок: 7
Задача 1. Посчитать кол-во адресов, имеющих маску 255.255.255.128.
В этой задачи видим фильтрацию, поэтому партиционирование, кот. мы сделали раньше, должно повлиять на скорость работы задачи.
Выполним запрос на таблице Subnets (без партиций) и SubnetsPart (с партициями):
SELECT COUNT(ip) AS count_subnet
FROM Subnets
WHERE mask = "255.255.255.128";
Рисунок 31– Вывод процесса работы запроса по подсчету кол-во адресов имеющих маску 255.255.255.128 в Subnets
Рисунок 32 – Вывод работы запроса в Subnets
SELECT COUNT(ip) AS count_ip_sp
FROM SubnetsPart
WHERE mask = "255.255.255.128";
Рисунок 33 – Вывод процесса работы запроса по подсчету кол-во адресов, имеющих маску 255.255.255.128 в SubnetsPart
Рисунок 34 – Вывод работы запроса в SubnetsPart
Проверим размер исходных данных: hdfs dfs -du -h /data/subnets/variant1
Рисунок 35 – Размер исходных данных
Пересоздадим таблицы Subnets и SubnetsPart на датасете /data/subnets/big (7 Gb) и повторим эксперимент. Как изменилась разница в быстродействии запросов?
Для таблицы Subnets:
USE smirnov_test;
DROP TABLE IF EXISTS Subnets;
CREATE EXTERNAL TABLE Subnets ( ip STRING, mask STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/data/subnets/big';
Рисунок 36 – Пересоздание таблицы Subnets
Выполним запрос:
SELECT COUNT(ip) AS new_count_adresses
FROM Subnets
WHERE mask = "255.255.255.128";
Рисунок 37 – Вывод процесса работы запроса в новой таблице Subnets
Рисунок 38 – Вывод работы запроса в пересозданной Subnets
Для таблицы SubnetsPart:
SET hive.exec.dynamic.partition.mode=nonstrict;
USE smirnov_test;
DROP TABLE IF EXISTS SubnetsPart;
CREATE EXTERNAL TABLE SubnetsPart ( ip STRING )
PARTITIONED BY (mask STRING)
STORED AS TEXTFILE
LOCATION '/data/subnets/big';
Рисунок 39 – Пересоздание таблицы SubnetsPart
Повторим запрос:
SELECT COUNT(ip) AS new_count_ip_sp
FROM SubnetsPart
WHERE mask = "255.255.255.128";
Рисунок 40 – Вывод процесса работы запроса в новой таблице SubnetsPart
Рисунок 40– Вывод работы запроса в пересозданной SubnetsPart
3 Вывод
Получил навыки работы с Hive.