Использование HBase вместо Hive
Сегодня мы используем Hive в качестве хранилища данных, в основном используемое для пакетной / массовой обработки данных - аналитические запросы / объединения hive и т. Д. - конвейер ETL
Недавно мы столкнулись с проблемой, когда пытаемся представить наш ETL-конвейер, основанный на кустах, как сервис. Проблема связана с фиксированной схемой таблицы природы улья. У нас есть ситуация, когда схема таблицы не является фиксированной, она может измениться ex: новые столбцы могут быть добавлены (в любом месте схемы, необязательно в конце), удалены и переименованы.
В Hive, после создания разделов, я думаю, их нельзя изменить, т. Е. Мы не можем добавить новый столбец в старый раздел и заполнить только этот столбец данными. Мы должны заново создать раздел с новой схемой и заполнить данные во всех столбцах. Однако новые разделы могут иметь новую схему и содержать данные для нового столбца (не уверен, можно ли вставить новый столбец в любую позицию в схеме?). Попытка прочитать значение нового столбца из более старого раздела (без изменений) вернет NULL.
Я хочу знать, смогу ли я использовать HBase в этом сценарии и решит ли это мои проблемы выше? 1. вставьте новые столбцы в любую позицию в схеме, удалите столбец, переименуйте столбец 2. выполните обратную засыпку данных в новый столбец, т. Е. Для более старых данных (в более старых разделах) заполните данные только в новом столбце без повторного создания раздела / повторного заполнения данных в другие столбцы.
Я понимаю, что Hbase без схемы (без схемы), т.е. каждая запись / строка может иметь различное количество столбцов. Не уверен, что HBase имеет концепцию разделов?
1 ответ
- Вы правы HBase - это база данных, не включающая схемы (семейства столбцов все еще исправлены)
- Вы сможете создавать новые столбцы
Вы сможете заполнять данные только в новом столбце без повторного создания раздела / повторного заполнения данных в других столбцах.
но
К сожалению, HBase не поддерживает разделы (говоря в терминах Hive), вы можете увидеть это обсуждение. Это означает, что если дата раздела не будет частью ключа строки, каждый запрос будет выполнять полное сканирование таблицы
- Переименовать столбец не является тривиальной операцией вообще
- Частое обновление существующих записей между основными интервалами уплотнения увеличивает время ответа на запрос
Я надеюсь, что это полезно.