Выбор ответа Middle Parquet и партиционирование обновлено

Зачем бакетинг

Вопрос

Две большие таблицы постоянно соединяют по user_id. Партиционировать по user_id нельзя. Что поможет избежать shuffle при джойне?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бакетинг обеих таблиц по userid с одинаковым числом бакетов: бакет соединяется с бакетом. Бакеты распределяют строки по хешу ключа в фиксированное число файлов.

Варианты ответа

  1. Партиционирование обеих таблиц по дате, чтобы джойн шёл попартиционно и без shuffle
  2. Сжатие Zstd вместо Snappy: данных при shuffle станет меньше, и он практически исчезнет
  3. Бакетинг обеих таблиц по user_id с одинаковым числом бакетов: бакет соединяется с бакетомправильный ответ
  4. Хранение одной таблицы в Avro, а другой в Parquet, чтобы движок выбрал broadcast join

Разбор

Бакеты распределяют строки по хешу ключа в фиксированное число файлов. Одинаковый ключ оказывается в бакете с тем же номером в обеих таблицах, и движок может соединить их локально. Партиции по дате не связаны с ключом джойна. Сжатие и форматы на shuffle не влияют.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.