Hive's unix_timestamp and from_unixtime functi

2020-02-10 07:13发布

问题:

I am under the impression that unix_timestamp and from_unixtime Hive functions are 'reverse' of each other.

When I try to convert timestamp string to seconds in Hive:

SELECT unix_timestamp('10-Jun-15 10.00.00.000000 AM', 'dd-MMM-yy hh.mm.ss.MS a');

I get 1418176800.

When I try to convert 1418176800 to timestamp string:

SELECT from_unixtime(1418176800, 'dd-MMM-yy hh.mm.ss.MS a');

I get 10-Dec-14 10.00.00.120 AM, which is obviously not equal to the original.

Can someone explain what's going on? Thanks.

回答1:

From the language manual:

Convert time string with given pattern to Unix time stamp (in seconds) The result of this function is in seconds.

Your result changes with the milliseconds portion of the date, but the unix functions only support seconds. For example:

SELECT unix_timestamp('10-Jun-15 10.00.00 AM', 'dd-MMM-yy hh.mm.ss a');

1433930400

SELECT from_unixtime(1433930400, 'dd-MMM-yy hh.mm.ss a');

10-Jun-15 10.00.00 AM



回答2:

Don't use from unix_timestamp as you have in your second query. Additionally your statement has a formatting in it that gives the result where DEC is used in steads of 12. See dd-MM-yy. Don't specify a format and it should work. See the examples below.

You are however correct that from_unixtime() and unix_timestamp() are used to convert back and forth from time string.

select unix_timestamp('2015-04-09 03:04:26') from dual;

results in "1428566666"

select from_unixtime(1428566666) from dual;

results in "2015-04-09 03:04:26"



标签: hive hiveql