Подтвердить что ты не робот

Добавить столбец в таблице в HIVE QL

Я пишу код в HIVE для создания таблицы, состоящей из 1300 строк и 6 столбцов:

create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;

Теперь я хочу добавить еще один столбец как access_count1, который состоит из одного уникального значения для всех 1300 строк, а значение будет sum(max_count). max_count - это столбец в моей существующей таблице. Как я могу это сделать? Я пытаюсь изменить таблицу с помощью этого кода ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

4b9b3361

Ответ 1

Вы не можете добавить столбец со значением по умолчанию в Hive. У вас есть правильный синтаксис добавления столбца ALTER TABLE test1 ADD COLUMNS (access_count1 int);, вам просто нужно избавиться от default sum(max_count). Никаких изменений в файлах, поддерживающих вашу таблицу, не произойдет в результате добавления столбца. Hive обрабатывает "отсутствующие" данные, интерпретируя NULL как значение для каждой ячейки в этом столбце.

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

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

Если вы очень уверены в своих способностях справиться с файлами, поддерживающими Hive, вы также можете напрямую изменить их, чтобы добавить свой по умолчанию. В общем, я бы рекомендовал против этого, потому что большую часть времени он будет медленнее и опаснее. Возможно, в некоторых случаях это имеет смысл, поэтому я включил этот вариант для полноты.