Hive 在配置单元中更改列数据类型

Hive 在配置单元中更改列数据类型,hive,bigdata,Hive,Bigdata,我们需要将表列数据类型从string改为date。当我试图做的时候,我得到了下面的错误。你能帮忙吗 配置单元>描述销售情况 嗯 客户id字符串产品编号字符串 qty int销售日期字符串 销售标识字符串 所用时间:0.151秒, 已获取:5行 配置单元>更改表销售\u分期更改销售\u日期销售\u日期 失败:执行错误,从返回代码1 org.apache.hadoop.hive.ql.exec.ddlstask。无法更改表。这个 以下列的类型与中的现有列不兼容 各自的位置:销售日期 蜂巢> 您不能为

我们需要将表列数据类型从string改为date。当我试图做的时候,我得到了下面的错误。你能帮忙吗

配置单元>描述销售情况

客户id字符串产品编号字符串
qty int销售日期字符串

销售标识字符串 所用时间:0.151秒, 已获取:5行

配置单元>更改表销售\u分期更改销售\u日期销售\u日期

失败:执行错误,从返回代码1 org.apache.hadoop.hive.ql.exec.ddlstask。无法更改表。这个 以下列的类型与中的现有列不兼容 各自的位置:销售日期

蜂巢>


您不能为要更改其数据类型的列指定相同的名称。像这样使用

ALTER TABLE sales_staging CHANGE sale_date sale_date_new DATE;

请参阅此

您不能将现有的字符串类型数据更改为日期类型。但我们可以通过两种方式解决这个问题

  • 创建另一个具有相同列计数但数据类型为date的表,其中需要字符串的列的日期为,然后使用insert命令通过将字符串强制转换为date将旧表数据导出到新表
  • 将数据类型为date的新列添加到现有表中。通过将字符串强制转换到新列中来覆盖表本身
  • 例:

    我在桌子上点了菜

    描述订单

    订单号int
    订单\日期字符串
    订单\客户\ id int
    订单状态字符串

    创建了另一个表ordersnew

    描述新秩序

    id int
    日期
    cid int
    奥斯塔斯弦

    现在将orders数据导出到ordersnew表

    插入订单新选择订单id、cast(从unix时间(子字符串(订单日期,1,19),‘yyyy-MM-dd HH:MM:ss’)作为时间戳)作为标准日期、订单客户id、订单状态

    子字符串(订单日期,1,19),'yyyy-MM-dd HH:MM:ss'这是您必须根据数据检查和更改查询的位置

    请检查日期转换,执行以下步骤: 步骤1)检查“销售日期”字段中的所有日期是否有效。如果是,则转至步骤2

    步骤2)检查日期格式,日期数据类型格式应为“yyyy-MM-dd”。如果日期格式为“yyyy-MM-dd HH:MM:ss”,则应尝试以下语法:


    更改表销售_分期更改销售_日期销售_日期时间戳

    这个信息似乎很清楚。不能将整数更改为日期。也许您应该创建表的新版本并将数据复制到其中。sale_date string,它是一种字符串数据类型。我想换到现在。请检查和帮助。