hadoop—在配置单元中从一个表插入数据到另一个表,以便将mm/dd/yyyy转换为配置单元时间戳

kyks70gy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(407)

我必须将数据填充到以时间戳为数据类型的配置单元表中。参考这里的其他答案,我了解如何创建一个数据类型为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

为什么时间戳列为空?

bvuwiixz

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

mbjcgjjk

mbjcgjjk2#

在from\u 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;

请参考此答案和配置单元日期函数

相关问题