Производительность Hive / Impala с ключом раздела строки против ключа разделения Integer - PullRequest
0 голосов
/ 29 августа 2018

Рекомендуются ли числовые столбцы для ключей разделов? Будет ли разница в производительности, когда мы сделаем запрос на выборку для числовых столбцов и строковых столбцов?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Ну, это имеет значение, если вы посмотрите официальную документацию Impala.

Вместо того, чтобы уточнить, я вставлю раздел из документа, так как я думаю, что он достаточно хорошо в нем написан:

"Хотя может быть удобно использовать столбцы STRING для ключей разделов, даже если эти столбцы содержат числа, для производительности и масштабируемости гораздо лучше использовать числовые столбцы в качестве ключей разделов, когда это практически возможно. Хотя имя основного каталога HDFS может быть то же самое в любом случае, хранение в памяти для столбцов с ключом раздела более компактно, и вычисления выполняются быстрее, если столбцы с ключом раздела, такие как YEAR, MONTH, DAY и т. д., объявлены как INT, SMALLINT и т. д. «

Ссылка: https://www.cloudera.com/documentation/enterprise/5-14-x/topics/impala_string.html

0 голосов
/ 29 августа 2018

Нет, такой рекомендации нет. Учти это: Дело в том, что представление раздела в Hive - это папка с именем типа 'key=value' или это может быть просто 'value', но в любом случае это имя строковой папки. Таким образом, он сохраняется как строка и преобразуется во время чтения / записи. Значение ключа раздела не упаковано в файлы данных и не сжато.

Из-за распределенного / параллельного характера карт-редукции и Impalla вы никогда не заметите разницы в производительности обработки запросов. Также все данные будут сериализованы для передачи между этапами обработки, затем снова десериализованы и приведены к некоторому типу, это может происходить много раз для одного и того же запроса.

Существует много накладных расходов, создаваемых распределенной обработкой и сериализацией / десериализацией данных. Практически имеет значение только размер данных. Чем меньше таблица (размер файла), тем быстрее она работает. Но вы не улучшите производительность, ограничивая типы.

Значения больших строк, используемые в качестве ключей разделов, могут влиять на производительность базы данных метаданных, а также на количество обрабатываемых разделов также может влиять на производительность. Опять то же самое: здесь важен только размер данных , а не типы.

1, 0 может быть лучше, чем 'Yes', 'No' только из-за размера. А сжатие и параллелизм могут сделать эту разницу незначительной во многих случаях.

...