В прошлой статье мы рассматривали архитектуру Apache Hive и ее основные элементы. Сегодня поговорим про основные виды таблиц в Hive. Также подробно рассмотрим создание этих таблиц на практических примерах. Читайте далее про виды таблиц в Hive и их особенности.
2 основных вида таблиц для быстрой работы с большими данными в Apache Hive
Прежде всего отметим, что Hive — это средство управления базами данных (СУБД) для хранения и обработки больших массивов данных посредством SQL-запросов. Для хранения данных Hive использует таблицы, которые используются для хранения данных в виде строк и столбцов в структурированном (упорядоченном) виде. Таблицы в Hive бывают двух видов:
- таблицы с партициями (partitioning tables);
- таблицы с бакетами (bucketing tables).
Каждый из этих видов мы подробнее рассмотрим далее.
Таблицы с партициями
Партиция (partiton) в Hive — это результат разделения таблицы на отдельные части, которые физически хранятся в разных каталогах на HDFS (Hadoop Distributed File System). Для доступа к определенным данным Hive-таблицы обычно происходит полное сканирование данных, что существенно замедляет процесс получения необходимого результата. Для того, чтобы избежать полного сканирования и ускорить работу по получению нужных данных, можно произвести партиционирование (partitioning) таблицы и обращаться к конкретным данным напрямую без необходимости перебора остальных данных. Для создания партиционированной таблицы необходимо указать, по каким колонкам будет произведено партиционирование. Следующий код на диалекте HiveQL отвечает за создание партиционированной таблицы:
CREATE TABLE IF NOT EXISTS employee_partitioned ( eid int, name String, salary String, destination String) COMMENT 'Employee details' PARTITIONED BY (birth_year int, birth_month string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE
Из кода видно, что колонки birth_year и birth_month являются партициями, так как создавались с помощью специальной конструкции PARTITION BY
. Для загрузки данных в партицию необходимо явно указать, в какую партицию они будут загружены. Следующий код на диалекте HiveQL отвечает за загрузку данных в столбцы-партиции:
LOAD DATA INPATH '/user/root/sample.txt' OVERWRITE INTO TABLE employee_partitioned PARTITION (birth_year=1998, birth_month='May')
Недостаток партиционирования заключается в том, что для его реализации необходимо знать ограничения на значения столбца (например, диапазон числовых значений или количество записей в столбце) [1].
Таблицы с бакетами
Бакет (bucket), также как и партиция является результатом разбиения таблицы на части, которые хранятся в разных каталогах и служит для ускорения работы по получению данных. Однако, в отличие от партиций, реализация бакета не требует от пользователя знания ограничений на значения столбцов, так как разделение на бакеты происходит на основе применения хэш-функции к столбцам. Хэш-функция — это функция, которая осуществляет преобразование данных в битовую последовательность. Таким образом, в один бакет попадают строчки таблицы, для которых собственное значение хэш-функции совпадает со значением хэш-функции, вычисленным по определенному столбцу. При работе с бакетированными таблицами необходимо включить в Hive-консоли поддержку бакетов следующим образом:
set hive.enforce.bucketing=true
Для создания бакетированной таблицы используется конструкция CLUSTERED BY
. Следующий код на диалекте HiveQL отвечает за создание бакетированной таблицы:
CREATE TABLE employee_bucketed ( eid int, name String, salary String, destination String) CLUSTERED BY(eid) INTO 10 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE
Для загрузки данных в бакетированную таблицу служит команда INSERT
. При этом загрузка данных возможна только из другой таблицы. Следующий код на диалекте HiveQL отвечает за загрузку данных в бакетированную таблицу [2]:
FROM employee_external INSERT OVERWRITE TABLE employee_bucketed SELECT *
Таким образом, благодаря возможности создания партиций и бакетов в таблицах, Hive позволяет довольно быстро обрабатывать большие массивы данных, что делает его весьма полезным средством для работы с Big Data.
Больше подробностей про применение Apache Hive в проектах анализа больших данных вы узнаете на практических курсах по Hive в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
IMPA: CLOUDERA IMPALA DATA ANALYTICS
ADQM: ЭКСПЛУАТАЦИЯ ARENADATA QUICKMARTS
ADBR: Arenadata DB для разработчиков
ADB: Эксплуатация Arenadata DB
HBASE: Администрирование кластера HBase
HIVE: Hadoop SQL администратор Hive
NoSQL: Интеграция Hadoop и NoSQL
Источники