将时间戳舍入到蜂巢中的小时

时间:2018-03-01 16:55:31

标签: hadoop hive hiveql

如果我们在'2018-01-01 01:35:00.000'列中有时间戳。我想将时间戳舍入为小时,并将值设为'2018-01-01 01:00:00.000'

3 个答案:

答案 0 :(得分:2)

所以你的问题不是圆的,而是将时间格式截断为几小时。 truncate函数仅适用于日期(年,月和日),但不适用于时间。有关解决方法,您可以使用以下内容:

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

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

答案 1 :(得分:2)

您可以使用 from_unixtime,unix_timestamp 函数来匹配输入数据并创建所需的输出格式。在你的情况下输出格式将是 yyyy-MM-dd hh:00:00.000

示例查询:

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  |
+----------+--+

答案 2 :(得分:0)

问的问题:

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');

将时间列四舍五入

一般方法:

蜂巢时间列名称:end_time

蜂巢时间列名称日期格式:“ yyyy-MM-dd hh:mm:ss”

必填输出格式:“ yyyy-MM-dd hh:mm:ss”

舍入粒度:15min

Hive查询命令

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')

让我们说一句end_time栏值:2019-11-29 08:23:27

因此,如果指定的粒度为15分钟,以下命令将转换end_time(例如2019-11-29 08:23:27到2019-11-29 08:15:00)

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>;