先查看表

timestamp可以轉換為標准的時間(精確到秒); https://tool.lu/timestamp/

這個時間格式用處很多:
多個時間可以使用函數,來切換。
每個用戶 產生行為的時候,用timestamp來區分下單先后關系,記錄什么時候看過哪些商品;
比較大小,比如最早訂單。。
select max(`timestampss`) as max_tm,min(`timestampss`) as min_tm from user_data; --``是1前面的那個符號,

我們以最近的這個時間為時間參考點:
hive> select ((cast(893286638 as bigint)-cast(`timestampss` as bigint))/(60*60*24)) as days from user_data limit 10;

hive>select id,collect_list(cast (days as bigint)) as days_list from (select id,
((cast(893286638 as bigint)-cast(`timestampss` as bigint))/(60*60*24)) as days from user_data)t group by id limit 10;
能查看用戶的行為時間點,可以用這個數據做一個數據清洗的規則
#collect_list,將數據搞成數組的形式。這種情況得出的數據用處:在同一個時間,多次評論,可能會有刷單的嫌疑。挖掘的意義。

時間衰減的需求:
一個用戶有多條行為,做行為分析的時候,最近的行為越有效果(越好)。sum后面返回的是一個列表。所以需要聚合
hive> select user_id,collect_list(cast(days as int)) as day_list
from
(
select user_id,exp(-(cast(893286638 as bigint)-cast(`timestampss` as bigint))/(60*60*24)/2)*rating as days from user_data) t
group by user_id
limit 10;

exp正太分布,rating相當於分值。

