Каковы последствия добавления столбца в существующую таблицу HIVE?

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

  • требуется место для хранения (двойной ?)
  • блокировка (могу ли я все еще читать таблицу в других процессах)?
  • время (это быстро или так же медленно, как изменение MysqL ?)
  • базовое хранилище (мне нужно изменить все базовые файлы ? Как это сделать? использование RCFile ?)

бонус тому, кто может ответить на тот же вопрос о структурах в столбце улья.

3 ответов


при добавлении столбца в таблицу Hive, обновляется только базовая метахранилища.

  • требуемое пространство хранения не увеличивается до тех пор, пока вы не добавляете данные
  • изменение может быть сделано в то время как другие процессы обращаются к таблице
  • изменить очень быстро (обновляется только базовая метахранилища)
  • вам не нужно изменять базовые файлы. Существующие записи имеют значение null для новых колонка

надеюсь, это поможет.


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

также любые изменения метаданных применяются к metastore-который наиболее типично MySQL - в этом случае время ответа сопоставимо.


изменение определения изменит только способ чтения файлов, а не содержимое базовых файлов.

Если ваши файлы были разделены табуляцией текста с 3 столбцами, вы можете создать таблицу, которая ссылается на эти файлы со схемой, такой как new_table(строка строки), которая будет читать всю строку без разбора столбцов на основе символов вкладки.

когда вы добавляете столбец, так как в записи больше нет разделителей, по умолчанию он будет равен NULL, как Helmut упомянутый.