我需要你帮忙找张table。我在配置单元中使用hql查询来加载表。有人想把table装起来吗?
表用户
START_TIME_DATE | END_TIME_DATE | USER | START_DAY_ID | END_DAY_ID
(String) (String) (Bigint) (Int) (Int)
210241 231236 1 01092019 01092019
234736 235251 2 01092019 01092019
223408 021345 3 01092019 02092019
开始\u时间\u日期、结束\u时间\u日期字段表示用户在该位置的时间。这样做的目的是在不同的行中指出用户的每一个小时,只有“小时”字段中的前两个数字。
表userhour
DATE | HOUR | ID
(Bigint) (String) (Bigint)
01092019 21 1
01092019 22 1
01092019 23 1
01092019 23 2
01092019 22 3
01092019 23 3
02092019 00 3
02092019 01 3
02092019 02 3
目前我的查询是这个,但它不工作。我在尝试“联合所有人”
insert overwrite table USERHOUR
(select [start_time_date] ,[end_time_date]
from user
union all
select [start_time_date]+1,[end_time_date]
where [start_time_date]+1<=[end_time_date]
)
as hour) --generate a range between start_time_date and end_time_date and before cast to Hours,
end_day_id a date,
user as id
from table USER;
1条答案
按热度按时间s1ag04yj1#
为此,我计算了以小时为单位的差异,使用posexplode(space(hours))生成行,计算开始时间戳+(explode的位置)*3600,并从结果时间戳中提取小时和日期。
使用您的示例查看此演示:
结果: