user1625419
user1625419

Reputation: 31

Latest Records using Hive

Input Data

SNO |   Name  |     Salary  |   HireDate    
------------------------------------------
1   |   A     |     10      |   01-13-2014  
2   |   B     |     20      |   11-15-2014  
3   |   C     |     3       |   05-03-2015  
4   |   D     |     4       |   07-03-2015  
5   |   E     |     5       |   12-03-2015  
6   |   F     |     60      |   25-03-2015  
7   |   G     |     70      |   30-03-2015  

Final Output Data I want to get only current month data using hive query

SNO  |  Name  |     Salary  |   HireDate    
----------------------------------------
3    |   C    |      3      |   05-03-2015  
4    |   D    |      4      |   07-03-2015  
5    |   E    |      5      |   12-03-2015  
6    |   F    |     60      |   25-03-2015  
7    |   G    |     70      |   30-03-2015  

Upvotes: 0

Views: 122

Answers (2)

Gordon Linoff
Gordon Linoff

Reputation: 1269623

Just use current_date and the date time functions in Hive. This is probably the easiest way:

select id.*
from inputdata id
where year(hiredate) = year(current_date()) and
      month(hiredate) = month(current_date());

EDIT:

Having just tried this out, current_date() is not in at least one implementation of Hive 0.14, despite the documentation. So, you can try:

select id.*
from inputdata id
where year(hiredate) = year(from_unixtime(unix_timestamp())) and
      month(hiredate) = month(from_unixtime(unix_timestamp()));

Upvotes: 0

Rajesh N
Rajesh N

Reputation: 2574

Do this in shell script:

curmon=`date +%m-%Y`
cusdate="01-$curmon";
$HIVE_HOME/bin/hive -e "select * from tablename where HireDate>$cusdate;"

curmon will store current month and year.

cusdate will store 1st day of this month.

Hive query will display all the results greater than 1st day of this month. (Change tablename and column as per your requirements)

Upvotes: 1

Related Questions