我有一個表,它具有ip,session_id,小時。 我想彙總這些數據,並最終得到一個新的表格,每個表格都有一個每小時會話數量小時聚合的記錄。HIVE構建ARRAY使用列作爲索引和聚合值作爲值
要做到這一點,我開始與子查詢,
SELECT ip, count(session_id) as sessions, hour
FROM current_table
GROUP BY ip,hour;
這會給我(最多)24條記錄與相應記錄特定小時會話數每個IP。使用此子查詢我想填補一個數組(說hourly_sessions是我一起工作的陣列)類似,
hourly_sessions[hour] = sessions
所以,我最終會與每個IP和數組索引關聯數組代表其小時我想要檢查會話聚合。如果在特定小時內沒有會話,我希望它顯示0.
如何在HIVE中使用/不使用UDF來實現此目的? 我現在的(哈克和不完全)的方法是使用類似:
collect_set(concat_ws(",",hour,cast(sessions) as STRING))
但是這需要每個需要特定的每小時總時間解析整個陣列。
你需要填寫的數據差距,所以如果一個IP沒有會話一個小時,該數組包含爲0的會話數的入口? – mattinbits
是的,那是我理想中想要的。 –