在hive中将时间戳舍入到小时

cgyqldqp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(940)

如果我们在列中有时间戳 '2018-01-01 01:35:00.000' . 我想把时间戳四舍五入到小时,得到如下值 '2018-01-01 01:00:00.000' .

whitzsjs

whitzsjs1#

对于提出的问题:

select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000');

将时间列四舍五入到任意粒度
一般方法:
配置单元时间列名:结束时间
配置单元时间列名日期格式:“yyyy-mm-dd hh:mm:ss”
所需输出格式:“yyyy-mm-dd hh:mm:ss”
舍入粒度:15min
配置单元查询命令:

from_unixtime(unix_timestamp(time-column-name-in-hive,"time-column-name-in-hive-date-format")-unix_timestamp(time-column-name-in-hive,"time-column-name-in-hive-date-format")%900 (because 15*60), 'output-date-format')

假设结束时间列值:2019-11-29 08:23:27
因此,以下命令将转换结束时间(例如2019-11-29 08:23:27到2019-11-29 08:15:00),给定粒度为15分钟

select from_unixtime(unix_timestamp(end_time,"yyyy-MM-dd hh:mm:ss")-unix_timestamp(end_time,"yyyy-MM-dd hh:mm:ss")%900, 'yyyy-MM-dd hh:mm:ss') from <table-name>;
hi3rlvi2

hi3rlvi22#

所以你的问题不是圆形的,而是将时间格式缩短为小时。truncate函数只适用于日期(年、月和日),而不适用于时间。对于解决方法,可以使用以下代码段:

date_format('2018-01-01 01:35:00.000', 'YYYY-MM-dd hh:00:00.000')

结果:2018-01-01 01:00:00.000

bt1cpqcv

bt1cpqcv3#

您可以使用from\u unixtime、unix\u timestamp函数来匹配输入数据并创建所需的输出格式。在您的情况下,输出格式为yyyy-mm-dd hh:00:00.000
样品query:-

hive> select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000');
    +--------------------------+--+
    |           _c0            |
    +--------------------------+--+
    | 2018-01-01 01:00:00.000  |
    +--------------------------+--+

(或)
2.如果只需要日期,则将输出格式更改为yyyy-mm-dd

hive>select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd');
+-------------+--+
|     _c0     |
+-------------+--+
| 2018-01-01  |
+-------------+--+

3.提取年份和小时-->输出格式为yyyy hh

hive> select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy ss');
+----------+--+
|   _c0    |
+----------+--+
| 2018 00  |
+----------+--+

相关问题