如何在蜂巢中添加具有静态值的动态列

时间:2019-05-17 09:29:15

标签: hadoop hive bigdata hiveql

我的表格结构如下:

DF_filter <- DF %>% 
  inner_join((DF %>% group_by(ID) %>% summarise(Time=max(Time))),
             by=c('ID'= 'ID', 'Time' = 'Time'))

现在,我想在向该表中插入数据时添加一个具有恒定值的新列,因此我在查询下面运行:

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 ;

我读了SO帖子,说在Hive中这是不可能的,但我相信必须有某种或其他方式。有人对此有任何想法吗?

2 个答案:

答案 0 :(得分:1)

在Hive中是不可能的。表DDL不是动态的,并且DML查询不会影响表的定义。

如果要添加列,请在插入之前执行alter table DDL

ALTER TABLE tablename ADD columns SampleColumn  string; 

如果表是external,则可以删除并创建带有附加列的表,旧数据将保留,新列(如果最后一个列)将对旧数据为空;

答案 1 :(得分:0)

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;

如果表已分区,则不支持列规范,并且在插入过程中可能需要指定分区列。