[HADOOP] 어떻게 하둡 하이브에서 타임 스탬프 주어진 일주일의 첫 번째 날의 날짜를 얻으려면?
HADOOP어떻게 하둡 하이브에서 타임 스탬프 주어진 일주일의 첫 번째 날의 날짜를 얻으려면?
이 문제를 지원하기 위해 사용자 정의 UDF를 작성 외에도이 달성의 알려진 방법이있다? 나는 현재 하이브 0.13를 사용하고 있습니다.
해결법
-
==============================
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.이것은 가장 쉽고 주 날짜의 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.예, 당신은 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.하이브 1.2을 시작으로, 당신은 또한이를 좋아합니까 수 있습니다 :
하이브 1.2을 시작으로, 당신은 또한이를 좋아합니까 수 있습니다 :
select next_day(date_sub('2019-01-01', 7), 'MON')
산출:
2018-12-31
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
'HADOOP' 카테고리의 다른 글
[HADOOP] 메소 + 스파크 및 사용자 정의 항아리 UnknownHostException의 (0) | 2019.09.28 |
---|---|
[HADOOP] 하둡 맵리 듀스 (사) 다른 전원 / 사양 사용하여 호스트 (0) | 2019.09.28 |
[HADOOP] MAPR - 파일 읽기 및 쓰기 프로세스 (0) | 2019.09.28 |
[HADOOP] 어떻게 하이브에서 특정 시간대의 현재 시간을 얻을 수 있습니다 (0) | 2019.09.28 |
[HADOOP] 때 java.io.IOException : 하둡의 바이너리 실행 널 \ 빈 \의 winutils.exe을 찾을 수 없습니다 (0) | 2019.09.28 |