我们需要将表列数据类型从字符串更改为日期。虽然我试图做到以下错误。能帮忙吗?
蜂房>描述sales_staging;
行
cust_id string prod_num string
qty int sale_date stringsale_id字符串 所用时间:0.151秒, 提取:5行
蜂房> alter table sales_staging CHANGE sale_date sale_date DATE;
FAILED:执行错误,返回代码1 org.apache.hadoop.hive.ql.exec.DDLTask。无法更改表格。该 以下列的类型与现有列不兼容 各自的职位:sale_date
蜂房>
答案 0 :(得分:5)
您不能为要更改数据类型的列指定相同的名称。像这样使用
ALTER TABLE sales_staging CHANGE sale_date sale_date_new DATE;
答案 1 :(得分:2)
您无法将现有字符串类型数据更改为日期类型。但我们能够通过两种方式解决这个问题。
例如:
我有订单表
描述订单;
order_id int
order_date string
order_customer_id int
order_status string
创建了另一个表ordersnew
描述ordersnew;
id int
odate date
cid int
ostatus string
现在将订单数据导出到ordersnew表
插入到ordernew中选择order_id,cast(from_unixtime(unix_timestamp(substring(order_date,1,19),'yyyy-MM-dd HH:mm:ss'))作为时间戳)作为strdate,order_customer_id,order_status来自订单;
substring(order_date,1,19),'yyyy-MM-dd HH:mm:ss'这是您必须根据数据检查和更改查询的地方。
请检查here日期转换
答案 2 :(得分:-1)
执行以下步骤: 步骤1)检查字段“sale_date”中的所有日期是否是有效日期。如果是,则转到步骤2
步骤-2)检查日期格式,DATE数据类型格式应为'yyyy-MM-dd'。如果日期格式为'yyyy-MM-dd HH:mm:ss',那么您应该尝试以下语法:
alter table sales_staging CHANGE sale_date sale_date TIMESTAMP ;