вставка данных в hive из одной таблицы в другую, чтобы преобразовать mm / dd/yyyy в метку времени hive

Я должен заполнить данные в таблицу Hive, имеющую отметку времени как тип данных.
Ссылаясь на другие ответы здесь, я понимаю метод создания новой таблицы с типом данных как 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_s

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

Почему столбцы timestamp имеют значение null?

2 ответа

  1. Улей содержит 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;

    например, содержания таблицы после инструкции insert.

    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тогда вы можете использовать datetype вместо timestamp

    Образец:

    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