在 Hive 中仅将时间转换为 unix 时间戳
Converting only time to unixtimestamp in Hive
我有一列 eventtime
,它只将一天中的时间存储为字符串。例如:
0445AM
- 表示 04:45 AM
。我正在使用以下查询转换为 UNIX 时间戳。
select unix_timestamp(eventtime,'hhmmaa'),eventtime from data_raw limit 10;
这似乎适用于测试数据。我一直认为 unixtimestamp 是日期和时间的组合,而这里我只有时间。我的问题是执行上述功能时考虑的日期是什么时候?时间戳似乎很小。
Unix 时间戳是从 Unix 纪元 (1970-01-01 00:00:00 UTC) 开始的 bigint 秒数。 unix 时间戳是一种将时间跟踪为 运行 总秒数的方法。
select unix_timestamp('0445AM','hhmmaa') as unixtimestamp
Returns
17100
而这恰好是 4 小时 45 分钟换算成秒。
select 4*60*60 + 45*60
returns 17100
并使用 from_unixtime
函数
将其转换回来
select from_unixtime (17100,'hhmmaa')
returns:
0445AM
如果您使用包含日期的格式进行转换,您会看到它假定日期为 1970-01-01
select from_unixtime (17100,'yyyy-MM-dd hhmmaa')
returns:
1970-01-01 0445AM
参见 Hive 函数 dosc here。
还有一个关于 Unix timestamp
的非常有用的网站
我有一列 eventtime
,它只将一天中的时间存储为字符串。例如:
0445AM
- 表示 04:45 AM
。我正在使用以下查询转换为 UNIX 时间戳。
select unix_timestamp(eventtime,'hhmmaa'),eventtime from data_raw limit 10;
这似乎适用于测试数据。我一直认为 unixtimestamp 是日期和时间的组合,而这里我只有时间。我的问题是执行上述功能时考虑的日期是什么时候?时间戳似乎很小。
Unix 时间戳是从 Unix 纪元 (1970-01-01 00:00:00 UTC) 开始的 bigint 秒数。 unix 时间戳是一种将时间跟踪为 运行 总秒数的方法。
select unix_timestamp('0445AM','hhmmaa') as unixtimestamp
Returns
17100
而这恰好是 4 小时 45 分钟换算成秒。
select 4*60*60 + 45*60
returns 17100
并使用 from_unixtime
函数
select from_unixtime (17100,'hhmmaa')
returns:
0445AM
如果您使用包含日期的格式进行转换,您会看到它假定日期为 1970-01-01
select from_unixtime (17100,'yyyy-MM-dd hhmmaa')
returns:
1970-01-01 0445AM
参见 Hive 函数 dosc here。
还有一个关于 Unix timestamp
的非常有用的网站