我们需要将表列数据类型从string改为date。当我试图做我得到下面的错误。你能帮忙吗。
配置单元>描述销售阶段;
好 啊
客户id字符串产品编号字符串
qty int sale\ U date字符串
sale\u id string所用时间:0.151秒,获取时间:5行
hive>alter table sales\u staging change sale\u date sale\u date;
失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddltask返回代码1。无法更改表。以下列的类型与其各自位置中的现有列不兼容:sale\u date
Hive>
3条答案
按热度按时间5f0d552i1#
不能为要更改其数据类型的列指定相同的名称。像这样使用
请参阅此apache hive wiki
6qfn3psc2#
不能将现有的字符串类型数据更改为日期类型。但是我们可以用两种方法来解决这个问题。
创建另一个具有相同列计数但数据类型为date的表,在该表中,您需要将字符串转换为date,然后使用insert命令通过将字符串转换为date将旧表数据导出到新表。
将数据类型为date的新列添加到现有表中。通过将字符串todate强制转换到新列中来覆盖表本身。
前任:
我订了一张table
描述订单;
订单id int
订单日期字符串
订单\客户\u id int
订单状态字符串
创建了另一个表ordersnew
描述新订单;
id内景
日期
cid内景
奥斯塔斯弦
现在将orders数据导出到ordersnew表
插入订单new select order\u id,cast(from\u unixtime(unix\u timestamp(substring(order\u date,1,19),'yyyy-mm-dd hh:mm:ss')as timestamp)as strdate,order\u customer\u id,order\u status from orders;
子字符串(order_date,1,19),'yyyy-mm-dd hh:mm:ss'这是您必须根据数据检查和更改查询的位置。
请检查这里的日期转换
sr4lhrrt3#
执行以下步骤:步骤1)检查“销售日期”字段中的所有日期是否有效。如果是,则转至步骤2
步骤2)检查日期格式,因为日期数据类型格式应为“yyyy-mm-dd”。如果日期格式为“yyyy-mm-dd hh:mm:ss”,则应尝试以下语法:
更改表sales\u staging change sale\u date sale\u date timestamp;