Как добавить динамический столбец со статическим значением в улье - PullRequest
1 голос
/ 17 мая 2019

У меня есть структура таблицы, как показано ниже:

0: jdbc:hive2://vw118287.ds.dev.accenture.com> desc sample2;
Getting log thread is interrupted, since query is done!
+-------------+------------+----------+--+
|  col_name   | data_type  | comment  |
+-------------+------------+----------+--+
| event_text  | string     |          |
| load_date   | string     |          |
+-------------+------------+----------+--+  

Теперь я хочу добавить новый столбец с постоянным значением при вставке данных в эту таблицу, поэтому я запустил запрос:

insert into table sample2 select event_text,'2019','Sample' as SampleColumn from ccs_service_optimization_9401.so_wireless_radius_summary ;

Выдает ошибку ниже:

Caused by: org.apache.hadoop.hive.ql.parse.SemanticException: Line 1:18 Cannot insert into target table because column number/types are different 'sample2': Table insclause-0 has 2 columns, but query has 3 columns. 

Я прочитал в SO сообщениях, что это невозможно в Hive, но я считаю, что должен быть тот или иной путь.У кого-нибудь есть идеи по этому поводу?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Это невозможно в Улей.Таблица DDL не является динамической, и запрос DML не влияет на определение таблицы.

Если вы хотите добавить столбец, выполните изменение таблицы DDL перед вставкой.

ALTER TABLE tablename ADD columns SampleColumn  string; 

Также, если таблица внешняя , вы можетеудалите и создайте его с дополнительным столбцом, старые данные останутся, новый столбец, если он последний, будет нулевым для старых данных;

0 голосов
/ 17 мая 2019

С Hive version > 2.0 он поддерживает указание имен столбцов в сценарии вставки

insert into table sample2 (col_name, data_type, comment ) select event_text,'2019','Sample' as SampleColumn from ccs_service_optimization_9401.so_wireless_radius_summary;

Если ваша таблица разбита на разделы, то спецификация столбца не поддерживается, и вам может потребоваться указать столбец для разбивки во время вставки.

...