【问题标题】:How to add dynamic column with static value in hive如何在配置单元中添加具有静态值的动态列
【发布时间】:2019-10-04 14:44:43
【问题描述】:

我的表格结构如下:

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 中是不可能的,但我相信一定有某种或其他方式。有人对此有任何想法吗??

【问题讨论】:

  • 一种方法是将具有常量值的列作为分区列,然后将数据插入分区

标签: hadoop hive bigdata hiveql


【解决方案1】:

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

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

ALTER TABLE tablename ADD columns SampleColumn  string; 

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

【讨论】:

  • 感谢@leftjoin。我已经知道这一点,但它仍然没有回答我的问题。有没有可能??有什么办法可以让这张表动态化?
  • @RushHour 您可以使用 shell 等其他工具生成删除/创建句子并在 Hive 中执行它们。但不幸的是,不可能直接在 Hive 中进行。如果您需要使用其他工具的解决方案,那么您的问题就太宽泛了。更具体并展示您的尝试,这将有助于更好地了解您的问题
  • 不,谢谢,我只是想了解在 hive 中是否可以直接使用。
【解决方案2】:

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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2016-12-11
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多