Имеет ли значение порядок разбиения столбцов в Hive? - PullRequest
1 голос
/ 07 октября 2019

Допустим, у меня есть секционированная таблица с несколькими столбцами в качестве ключей секционирования, например,

partitioned by (department string,year int, month int,day int)

Так действительно ли этот конкретный порядок имеет значение? Все онлайн-ресурсы ссылаются на преимущество сканирования только определенных подкаталогов для поиска. Но в конечном итоге все это файл больших данных, каталоги больше похожи на логическую группировку. И когда кто-то указывает фильтр на многораздельный столбец, кусту просто нужно знать, какие файлы задействованы и где они расположены, не зная, как каталог будет полезен - это не так, как если бы каталоги загружались в память - файлызагружен в память - и путь к каталогу больше похож на метку для данного файла. Если это так, независимо от того, какой порядок мы указываем для разбиения, это не должно иметь значения. Это особенно заметно в HDInsight, где базовая файловая система (BLOB) не имеет понятия каталога.

1 Ответ

1 голос
/ 09 октября 2019

Несмотря на то, что вы правы в том, что каталоги являются логическими конструкциями, если учесть количество метаданных, которые HiveServer2 должен получить и проанализировать для выполнения среднего запроса, порядок имеет значение. Если запрос содержит ...WHERE department='IT'..., а разделы размечены так, как вы показываете, с учетом общего количества 100 отделов, механизм сокращения разделов сможет сразу удалить 99 подкаталогов из дерева. Но если порядок столбцов разделов меняется, тот же запрос должен будет извлечь метаданные для разделов (30 дней x 12 месяцев x N лет) из MetaStore Hive, просто чтобы выяснить, существует ли на самом деле раздел /department=IT во всех них. Таким образом, порядок разделов может быть определен путем анализа преобладающих шаблонов запросов.

Другим распространенным фактором, который следует учитывать, является отношение к разработке / обслуживанию, особенно если данные загружаются в таблицу постепенно. Если необходимо выполнить откат / восстановление после неудачной загрузки, потребуется ли ему удалить раздел (day=08) в каждом поддереве отдела отдельно или все данные отдела можно очистить сразу, удалив раздел (day=08)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...