基于hadoop的hive表时间查询

lstz6jyr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(457)

我的表结构如下:

hive> describe user_data2;
OK
received_at             string                                      
message_id              string                                      
type                    string                                      
version                 string                                      
timestamp_user          string                                      
user_id                 string                                      
sent_at                 string                                      
channel                 string                                      
time_log                string

我瞄准了这个领域,

hive> select received_at, time_log, user_id from user_data2 limit 5;
OK
2016-01-08T12:27:05.565Z    1452256025  836871
2016-01-08T12:27:12.634Z    1452256033  800798
2016-01-08T12:27:12.632Z    1452256033  795799
2016-01-08T12:27:13.694Z    1452256033  820359
2016-01-08T12:27:15.821Z    1452256036  294141

在这个问题上,我想进行基于时间的查询。就像
平均工作小时数;每月;期限:过去12个月
%0-1小时/天的活跃用户数
%每天1-2小时的活跃用户数
%2-4小时/天的活跃用户数
%每天4-8小时的活跃用户数
%每天8-12小时的活跃用户数
%每天12-16小时的活跃用户数
%16-24小时/天的活跃用户数
我找到了一些使用datetime自定义项的线索-https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-日期函数
但是我不知道如何使用这个函数。
我试过:

select unix_timestamp(received_at) from user_data2 limit 5;
OK
NULL
NULL
NULL
NULL
NULL

一点也不给。
如果有人举例说明使用时间自定义项并在两小时或其他时间范围内获取记录,我将不胜感激。

kknvjkwl

kknvjkwl1#

假设你的家乡是罗马。。。

select
  from_utc_timestamp(regexp_replace(regexp_replace(RECEIVED_AT, 'T',' '), '\\..*$',''), 'Europe/Rome') as TS_RECEIVED,
  cast(from_unixtime(cast(TIME_LOG as int)) as timestamp) as TS_LOGGED
from WTF ;

+------------------------+------------------------+--+
|      ts_received       |      ts_logged         |
+------------------------+------------------------+--+
| 2016-01-08 13:27:05.0  | 2016-01-08 13:27:05.0  |
+------------------------+------------------------+--+

相关问题