Перекос против раздела в улье

Пройдя через Skewed-таблицы в Hive, я запутался в способе хранения данных для Skewed. таблицы и то, как это обрабатывается для секционированных таблиц. Может ли кто-нибудь четко указать различия с отмеченными примерами относительно того, где эти два понятия

Skewed Tables and Partitioned Tables

совпадают, а где отличаются? Пожалуйста, приведите пример.


person NeoWelkin    schedule 27.06.2017    source источник


Ответы (1)


Назначение таблиц Skewed и Partitioned одинаково для оптимизации запросов. Однако то, как они это делают и когда они применимы, немного отличается.

Предположим, мы создаем фитнес-трекер, такой как Strava, и данные пользователей постоянно отправляются нам.

  • Partitioning: вполне нормально разбивать такие данные по дате и времени, например /year=2017/month=10/day=12 и т. д. Таким образом, любые фильтры на основе даты и времени будут очень быстрыми, например.

SELECT col FROM table WHERE year=2017 AND month=10

  • Skewed table: Может случиться так, что некоторые пользователи отправляют не только тренировку в тренажерном зале, но и количество пройденных шагов, геолокацию, езду на велосипеде, потребление калорий, сон и многое другое. Таких пользователей очень мало, но объем данных, которые они отправляют, очень велик по сравнению со средними пользователями. Поэтому, если вы хотите запросить UserId, это будет медленно:

SELECT col FROM table WHERE year=2017 AND month=10 AND userid=20

Однако здесь может помочь перекошенная таблица. Предположим, что этими активными пользователями были 20, 23, 25. Теперь вы можете создавать данные для хранения, такие как:

/year=2017/month=10/day=12/userid=20
/year=2017/month=10/day=12/userid=23
/year=2017/month=10/day=12/userid=27
/year=2017/month=10/day=12/userid=others

Как видите, у этих фанатов фитнеса появился собственный каталог. Это приведет к быстрому запросу при выполнении того же запроса выше (фильтр по идентификатору пользователя).

Это еще не все, см. эту документацию.

person chhantyal    schedule 25.12.2017