Чтение файла Parquet, схема Thrift которого изменилась

Я хочу создать файлы Parquet, записи которых представляют собой структуры Thrift, а все поля — optional.

Допустим, я создаю файл my_file.parquet, поля которого struct Bar { ... }. Теперь предположим, что я изменил Bar, удалив одно поле и добавив другое. Что произойдет, когда я попытаюсь прочитать my_file.parquet, используя обновленную схему Bar?

Я предполагаю, что Паркет просто пропустит поле, которое было удалено из Bar при его чтении? Если я попытаюсь прочитать в добавленном поле, я просто получу null?

Любая помощь будет оценена по достоинству. Я не могу найти это в документации. Спасибо


person gardenhead    schedule 01.12.2015    source источник


Ответы (1)


Ниже описано, что делает Thrift, так что это не относится к Parquet.

  1. Если это необязательно (или «по умолчанию»), то удаление поля не должно вызывать никаких проблем. Содержимое пропускается и игнорируется при десериализации данных.

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

  3. Согласно рекомендациям, вы не должны удалять поле, а должны закомментировать его. Это предотвратит случайное повторное использование вами и другими людьми устаревшего идентификатора поля в дальнейшем. Что плохо.

  4. Пока мы на этом: подумайте дважды, прежде чем что-то делать required. Потому что required навсегда.

Настоятельно рекомендуемая лекция с некоторыми более подробными объяснениями по этой теме: великолепное "Пропавшее руководство" Дивакера Гупты< /а>

person JensG    schedule 02.12.2015