我必须将数据填充到以时间戳为数据类型的配置单元表中。参考这里的其他答案,我了解如何创建一个数据类型为string的新表,然后将其转换为 yyyy-mm-dd
因为我有 mm/dd/yyyy
.
CREATE TABLE tbl_t (
t_id varchar(50),
c_date timestamp,
name varchar(25)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
CREATE TABLE tbl_s (
t_id varchar(50),
c_date string,
name varchar(25)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
我给tbl\U填充了
aa 11/08/1994 hhh
ss 11/09/2011 bbb
mm 09/07/2000 qqq
select t_id
, from_unixtime(unix_timestamp(c_date ,'MM/dd/yyyy'),'yyyy-MM-dd')
, name
from tbl_s;
这个很好用。现在我需要填充我的原始表。使用查询:
insert into table tbl_t
select t_id
, from_unixtime(unix_timestamp(c_date ,'MM/dd/yyyy'),'yyyy-MM-dd')
, name
from tbl_s;
然后
select * from tbl_t;
它回来了
aa NULL hhh
ss NULL bbb
mm NULL qqq
为什么时间戳列为空?
2条答案
按热度按时间bvuwiixz1#
Hive包含
yyyy-mm-dd hh:mm:ss
以及可选的纳秒场。下面sql将向表中插入时间戳insert into table tbl_t select t_id, from_unixtime(unix_timestamp(c_date, 'dd/MM/yyyy')),name from tbl_s;
e、 插入语句后的表内容。hive> select * from tbl_t; OK aa 2011-01-11 00:00:00 AAA bb 2012-02-22 00:00:00 BBB cc 2013-03-01 00:00:00 CCC
如果只需要插入YYYY-MM-DD
那你可以用date
类型而不是时间戳例子:
CREATE TABLE tbl_r( t_id varchar(50), c_date date, name varchar(25)) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
insert into table tbl_r select t_id, to_date(from_unixtime(unix_timestamp(c_date, 'dd/MM/yyyy'),'yyyy-mm-dd')),name from tbl_s;hive> select * from tbl_r; OK aa 2010-12-11 AAA bb 2011-12-22 BBB cc 2012-12-01 CCC
mbjcgjjk2#
在from\u unixtime函数中不需要额外的参数'yyyy-mm-dd'。
请参考此答案和配置单元日期函数