Hive 는 몇 주 동안 SQL 통 계 를 진행 할 것 인 지 를 판단 한다
1558 단어 Hive 관련
hive 가 요일 로 돌아 가 는 방법: pmod (datediff ('\ # date \ #', '2012 년 임의의 일요일 날짜'), 7).2012 - 01 - 01 마침 일요일 입 니 다.
:pmod(datediff('#date#', '2012-01-01'), 7)
:int
:1、 “0-6”(“0-6” “ - ”);2、 pmod datediff .
해석:
1. datediff 는 두 날짜 가 서로 감소 하 는 함수 입 니 다. hive 날짜 함 수 는 부록 을 볼 수 있 습 니 다.
날짜 상쇄 함수: datediff 문법: datediff (string enddate, string startdate) 반환 값: int 설명: 두 시간 매개 변수의 차이 일 수 를 되 돌려 줍 니 다.
2. pmod 는 정 취 여 함수 입 니 다.
정 취 여 함수: pmod 문법: pmod (int a, int b), pmod (double a, double b) 반환 값: int double 설명: 정 a 를 b 로 나 눈 나머지 를 되 돌려 줍 니 다.
특수 설명:
이 방법 도 유일한 방법 이 아니 라 datediff 와 pmod 함수 의 특징 을 이용 하여 조합 하여 사용 합 니 다.내부 소인 들 이 공유 하 는 방법 도 같은 목적 을 달성 할 수 있다.
pmod(datediff(#date#, '1920-01-01') - 3, 7)
\ # date \ # 주어진 날 짜 를 표시 합 니 다.
테스트 결 과 는 다음 과 같다.
hive> select pmod(datediff('#date#','2012-01-01'),7);
OK
NULL
Time taken: 0.118 seconds, Fetched: 1 row(s)
결 과 를 되 돌려 주 는 것 이 null 이 라 니 실행 할 수 있 습 니 다.
그래서 개선 방식 은 다음 과 같다.
hive> select current_date,date_sub(current_date,6),pmod(datediff(current_date,'1970-01-05'),7)+1;
OK
2018-08-29 2018-08-23 3
Time taken: 0.166 seconds, Fetched: 1 row(s)
결 과 를 통 해 알 수 있 듯 이 20180829 는 확실히 수요일 이다.최종 적 으로 채택 한 방안 은 바로 위의 이것 이다.
제 가 있 는 하 이브 리드 가 지원 하지 않 거나 다른 이유 로 인터넷 에서 제공 하 는 방식 대로 원 하 는 결 과 를 수행 하지 못 했 을 수도 있 습 니 다.원인 을 알 고 있다 면 알려 주시 기 바 랍 니 다.