我必须将数据填充到具有时间戳作为数据类型的Hive表中。
在这里参考其他答案我理解创建数据类型为字符串的新表的方法,然后转换为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_saa 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;
这很好用。现在我需要填充我的orignal表。 使用查询:
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
为什么timestamp列为null?
答案 0 :(得分:0)
你不需要from_unixtime函数中的额外参数'yyyy-MM-dd'。
insert into table tbl_t select t_id,from_unixtime(unix_timestamp(c_date ,'MM/dd/yyyy')),name from tbl_s;
答案 1 :(得分:0)
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;
例如插入语句后的表内容
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