mm-dd”)

wixjitnu  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(300)

我正在尝试将csv文件中的数据插入到配置单元表中,其中csv文件中的日期格式为“mm/dd/yyyy”、“mm-dd-yyyy”,必须将其插入到配置单元表中数据类型为“date”的列中,即“yyyy-mm-dd”。
首先,我尝试从csv文件中加载数据到一个表中,该表的数据类型为字符串。然后,我尝试将相同的数据插入到数据类型为date的新表中,但我只能在一种格式的表中加载日期,而另一种格式则存储为null。

create table sample1(order_id int, order_dt string);
load data local inpath "\home\cloudera\data.txt" into table sample1;

create table sample2(order_id int, order_dt date);   
insert into table sample2 select order_id, 
to_date(from_unixtime(unix_timestamp(order_dt,'mm/dd/yyyy'),'yyyy-mm-dd')) 
from sample1;

csv文件:
订单号订单日期
1 10/27/2016
2 10/27/2018
3 11/23/2016
4 09-23-2013
5 08-20-2010
6 05-13-2017
7 02/15/2009
输出时间:
从样本2中选择*;
1 2016-10-27
2 2018-10-27
3 2016-11-23
4空
5空
6空
7 2009-02-15
在这里,我得到空的其他日期格式。

s1ag04yj

s1ag04yj1#

你可以用 COALESCE 在这里工作。如果第一个 to_date 函数返回null,然后它将执行第二个参数,您可以通过这种方式传递任意数量的模式。

insert into table sample2 
select 
    order_id, 
    COALESCE(to_date(from_unixtime(unix_timestamp(order_dt,'mm/dd/yyyy'),'yyyy-mm-dd')),to_date(from_unixtime(unix_timestamp(order_dt,'mm-dd-yyyy'),'yyyy-mm-dd'))) 
from sample1;

相关问题