Какие бывают таблицы для быстрой работы с Big Data в Hive

Автор
Какие бывают таблицы для быстрой работы с Big Data в Hive

В прошлой статье мы рассматривали архитектуру 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

Записаться на курс

Смотреть раcписание

Источники

  1. https://habr.com/ru/post/283212/
  2. https://www.guru99.com/hive-partitions-buckets-example.html
Комментировать

Ваш адрес email не будет опубликован. Обязательные поля помечены *