如何在配置单元中添加带有静态值的动态列

1rhkuytd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(390)

我的表格结构如下:

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.

我读了很多帖子,所以这在Hive里是不可能的,但我相信一定有办法。有人知道吗??

vwkv1x7d

vwkv1x7d1#

Hive version > 2.0 它支持在insert脚本中指定列名

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;

如果您的表已分区,则不支持列规范,您可能需要在插入期间指定分区列。

7lrncoxx

7lrncoxx2#

在 hive 里是不可能的。表ddl不是动态的,dml查询不影响表定义。
如果要添加列,请在插入之前执行ALTERTABLEDDL。

ALTER TABLE tablename ADD columns SampleColumn  string;

另外,如果表是外部的,您可以删除它并用附加列创建它,旧数据将保留,新列如果是最后一列,旧数据将为空;

相关问题