Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Hive >> mail # user >> need help on writing hive query


Copy link to this message
-
RE: need help on writing hive query

This is not a hive but a SQL question.
You need to be more clear about your data, and try to think a way to solve your problem. Without the detail about your data, no easy way to answer your question.
For example, just based on your example data you provide, does the 'abc' and 'cde' only happen once per user? Does the 'abc' timestamp is always before or after 'cde' timestamp?
There is a lot of ways to archive your output, but you need to confirm your data.
1) Assume that each user will only have one 'abc' and 'cde', and if the 'abc' timestamp is always before the 'cde' timestamp, then it is very easy:
select     user_id, min(visting_time) as cde_time, max(visting_time) as abc_timefrom tablewhere visting_web_page contains 'abc' or visting_web_page contains 'cde'group by user_id

2) If the 'abc' and 'cde' visiting_time is randome, but each user will only have one 'abc' and 'cde', it is still not too hard, you just use the case() + max() from hive:
select user_id, max( case when visting_web_page contains 'cde' then visting_time else null end ) as cde_time, max( case when visting_web_page contains 'abc' then visting_time else null end ) as abc_timefrom tablegroup by user_id
The trick is simple, you use case function to return timestamp if it is the 'cde' row, else return null; then apply max on top of it. Since everything is larger than NULL in max, you will get the cde time stamp.
3) If each user could have more than one 'abc' or 'cde', then you need  to decide which one you want it out.
Yong
Date: Fri, 2 Nov 2012 22:35:42 -0500
Subject: need help on writing hive query
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]

The table format is something like:
user_id á ávisiting_time á á ávisiting_web_pageuser1 á á á á átime11 á á á á á á page_string_11
user1 á á á á átime12 á á á á á á page_string_12 á á with keyword 'abc'
user1 á á á á átime13 á á á á á á page_string_13
user1 á á á á átime14 á á á á á á page_string_14 á á with keyword 'cde'
user1 á á á á átime15 á á á á á á page_string_15

á ... á á á á á á á á... á á á á á á á á á á á .....áuser2 á á á á átime21 á á á á á á page_string_21
user2 á á á á átime22 á á á á á á page_string_22 á ááuser2 á á á á átime23 á á á á á á page_string_23 á ááwith keyword 'abc'
user2 á á á á átime24 á á á á á á page_string_24 á áá
user2 á á á á átime25 á á á á á á page_string_25 á ááwith keyword 'cde'á á.... á á á á á á á..... á á á á á á á á á á á .... á á á á

how to obtain output like: áuser1 á átime14 - time12 ááuser2 á átime25 - time23á á... á á á á á .............
i.e, we need to first search keyword 'abc' in the visiting_web_page column to locate the first visiting_time, then search for the second visiting_time with keyword 'cde', and repeat the procedure for each user...

thanks in advance!
á á á