Выбор ответа Middle Parquet и партиционирование обновлено
Зачем бакетинг
Вопрос
Две большие таблицы постоянно соединяют по user_id. Партиционировать по user_id нельзя. Что поможет избежать shuffle при джойне?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Бакетинг обеих таблиц по userid с одинаковым числом бакетов: бакет соединяется с бакетом. Бакеты распределяют строки по хешу ключа в фиксированное число файлов.
Варианты ответа
- Партиционирование обеих таблиц по дате, чтобы джойн шёл попартиционно и без shuffle
- Сжатие Zstd вместо Snappy: данных при shuffle станет меньше, и он практически исчезнет
- Бакетинг обеих таблиц по
user_idс одинаковым числом бакетов: бакет соединяется с бакетомправильный ответ - Хранение одной таблицы в Avro, а другой в Parquet, чтобы движок выбрал broadcast join
Разбор
Бакеты распределяют строки по хешу ключа в фиксированное число файлов. Одинаковый ключ оказывается в бакете с тем же номером в обеих таблицах, и движок может соединить их локально. Партиции по дате не связаны с ключом джойна. Сжатие и форматы на shuffle не влияют.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.