2016-07-15 14 views
5

में रविवार को छोड़कर दिनों की संख्या की गणना करें मेरे पास इनपुट के रूप में दो टाइमस्टैम्प हैं। मैं रविवार को छोड़कर उन टाइमस्टैम्प के बीच घंटों में समय अंतर की गणना करना चाहता हूं।हाइव

मैं DateDiff छत्ता में फ़ंक्शन का उपयोग दिनों की संख्या प्राप्त कर सकते हैं।

मैं से_unixtime (unix_timestamp (startdate), 'EEEE') का उपयोग करके किसी विशेष दिनांक का दिन प्राप्त कर सकता हूं।

लेकिन मुझे नहीं पता कि मेरी आवश्यकताओं को प्राप्त करने के लिए उन कार्यों को कैसे जोड़ना है या यह हासिल करने का कोई और आसान तरीका है।

अग्रिम में धन्यवाद।

+0

रविवार को छोड़कर आपका क्या मतलब है। –

उत्तर

6

आप एक कस्टम यूडीएफ लिख सकते हैं जिसमें दो कॉलम इनपुट के रूप में होते हैं और रविवार को छोड़कर तिथियों के बीच अंतर की गणना करते हैं।

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Date; 
import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 

public class IsoYearWeek extends UDF { 

    public LongWritable evaluate(Text dateString,Text dateString1) throws ParseException { //takes the two columns as inputs 
    SimpleDateFormat date = new SimpleDateFormat("dd/MM/yyyy"); 
/* String date1 = "20/07/2016"; 
    String date2 = "28/07/2016"; 
*/ int count=0; 

    List<Date> dates = new ArrayList<Date>(); 

    Date startDate = (Date)date.parse(dateString.toString()); 
    Date endDate = (Date)date.parse(dateString1.toString()); 
    long interval = 24*1000 * 60 * 60; // 1 hour in millis 
    long endTime =endDate.getTime() ; // create your endtime here, possibly using Calendar or Date 
    long curTime = startDate.getTime(); 
    while (curTime <= endTime) { 
     dates.add(new Date(curTime)); 
     curTime += interval; 
    } 
    for(int i=0;i<dates.size();i++){ 
     Date lDate =(Date)dates.get(i); 
     if(lDate.getDay()==0){ 
      count+=1; //counts the number of sundays in between 
     } 
    } 

     long days_diff = (endDate.getTime()-startDate.getTime())/(24 * 60 * 60 * 1000)-count; //displays the days difference excluding sundays 
     return new LongWritable(days_diff); 

    } 

} 
+0

मैं इस समाधान के लिए वोट देता हूं। शायद कोड में सुधार किया जाना चाहिए, लेकिन मुझे नहीं पता कि आपका कार्य कुशलतापूर्वक यूडीएफ के बिना कैसे पूरा किया जा सकता है। इसके लिए खोल स्क्रिप्ट या पायथन का उपयोग करना भी संभव है। रविवार को बाहर करने के लिए अपने डेटा के साथ जुड़ने के लिए 'date_dim' तालिका का उपयोग करना भी संभव है, फिर योग (दिन) लेकिन मैं इस मामले में यूडीएफ पसंद करूंगा। – leftjoin