복붙노트

[HADOOP] 어떻게 하둡 하이브에서 타임 스탬프 주어진 일주일의 첫 번째 날의 날짜를 얻으려면?

HADOOP

어떻게 하둡 하이브에서 타임 스탬프 주어진 일주일의 첫 번째 날의 날짜를 얻으려면?

이 문제를 지원하기 위해 사용자 정의 UDF를 작성 외에도이 달성의 알려진 방법이있다? 나는 현재 하이브 0.13를 사용하고 있습니다.

해결법

  1. ==============================

    1.DATE_SUB (m.invitationdate, pmod에 (DATEDIFF (m.invitationdate '1900년 1월 7일'), 7))

    DATE_SUB (m.invitationdate, pmod에 (DATEDIFF (m.invitationdate '1900년 1월 7일'), 7))

    이 표현은 내 질문에 대한 정확한 솔루션을 제공합니다.

    문안 인사,

    보리스

  2. ==============================

    2.이것은 가장 쉽고 주 날짜의 1 일을 가져 오는에 가장 적합한 솔루션입니다 :

    이것은 가장 쉽고 주 날짜의 1 일을 가져 오는에 가장 적합한 솔루션입니다 :

    현재 타임 스탬프 :

    select date_sub(from_unixtime(unix_timestamp()), cast(from_unixtime(unix_timestamp(), 'u') AS int)) ;
    

    특정 날짜 또는 C 럼의 경우 :

    select date_sub(from_unixtime(unix_timestamp('2017-05-15','yyyy-MM-dd')), cast(from_unixtime(unix_timestamp('2017-05-15','yyyy-MM-dd'), 'u') AS int)) ;
    
    select date_sub(from_unixtime(unix_timestamp(colname,'yyyy-MM-dd')), cast(from_unixtime(unix_timestamp(colname,'yyyy-MM-dd'), 'u') AS int)) ;
    
  3. ==============================

    3.예, 당신은 UDF를 작성하지 않고이 작업을 수행 할 수 있습니다. 당신이 날짜 기능에서 하이브 문서에 보면, 유닉스 타임 스탬프 및 문자열 패턴을 취하는 함수의 FROM_UNIXTIME는 ()가있다. 아래 문서 페이지에 기능의 몇 가지,이 기능에서 사용할 수있는 다른 패턴을 설명하는 링크가있다. 그래서, 당신의 타임 스탬프에서, 당신은 요일을 추출 할 수 있으며, 그에 따라 진행합니다.

    예, 당신은 UDF를 작성하지 않고이 작업을 수행 할 수 있습니다. 당신이 날짜 기능에서 하이브 문서에 보면, 유닉스 타임 스탬프 및 문자열 패턴을 취하는 함수의 FROM_UNIXTIME는 ()가있다. 아래 문서 페이지에 기능의 몇 가지,이 기능에서 사용할 수있는 다른 패턴을 설명하는 링크가있다. 그래서, 당신의 타임 스탬프에서, 당신은 요일을 추출 할 수 있으며, 그에 따라 진행합니다.

    예 데이터 :

    1445313193
    1445313100
    1445313146
    1445040000
    1445040023
    1445040111
    

    처음 세 2015년 10월 19일 (월요일)이며, 마지막 세 금요일 2015년 10월 16일이다.

    질문:

    select day_of_week
      , date_var
      , case when day_of_week = 'Sun' then date_var
        when day_of_week = 'Sat' then date_sub(date_var, 6)
        when day_of_week = 'Fri' then date_sub(date_var, 5)
        when day_of_week = 'Thu' then date_sub(date_var, 4)
        when day_of_week = 'Wed' then date_sub(date_var, 3)
        when day_of_week = 'Tue' then date_sub(date_var, 2)
        when day_of_week = 'Mon' then date_sub(date_var, 1)
        else NULL
        end as first_day_of_week_date
    from (
      select from_unixtime(timestamp, 'EEE') day_of_week
        , from_unixtime(timestamp, 'yyyy-MM-dd') date_var
      from db.table ) A
    

    산출:

    Mon 2015-10-19  2015-10-18
    Mon 2015-10-19  2015-10-18
    Mon 2015-10-19  2015-10-18
    Fri 2015-10-16  2015-10-11
    Fri 2015-10-16  2015-10-11
    Fri 2015-10-16  2015-10-11
    

    그래서, 오늘은 일요일이었다 어제, 반환하고, 지난 금요일, 그것은 이전 일요일 11을 반환합니다. 나는 "일주일의 첫날", 당신은 일요일을 의미하여 가정을 만드는 중이라서; 그렇지 않으면, 당신은 월요일을 의미하는 코드를 조정할 수 있습니다. 도움이 되었기를 바랍니다.

  4. ==============================

    4.하이브 1.2을 시작으로, 당신은 또한이를 좋아합니까 수 있습니다 :

    하이브 1.2을 시작으로, 당신은 또한이를 좋아합니까 수 있습니다 :

    select next_day(date_sub('2019-01-01', 7), 'MON')
    

    산출:

    2018-12-31
    
  5. from https://stackoverflow.com/questions/33196651/how-to-get-the-date-of-the-first-day-of-a-week-given-a-time-stamp-in-hadoop-hive by cc-by-sa and MIT license