2012-08-06 6 views
5

하이브에 current date -1을 가져 오는 방법은 항상 yesterdays date을 의미합니까? 그리고이 형식으로 - 20120805?하이브에서 sysdate -1 가져 오기

오늘은 Aug 6th 같이 yesterday's date에 대한 데이터를 얻기 위해이 같은 내 쿼리를 실행할 수 있습니다

-

select * from table1 where dt = '20120805'; 

하지만 어제의 날짜를 얻을 date_sub function와 이런 식으로 일을하려고 할 때 아래 테이블에 분할로 날짜 (dt) 열.

select * from table1 where dt = date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP(), 
'yyyyMMdd')) , 1)  limit 10; 

모든 파티션에서 데이터를 찾고 있습니까? 왜? 내 쿼리에서 뭔가 잘못하고있어?

어떻게 전체 테이블을 스캔하지 않도록 하위 쿼리에서 평가를 수행 할 수 있습니까? MySQL의에서

답변

10

시도 뭔가 같은 :

select * from table1 
where dt >= from_unixtime(unix_timestamp()-1*60*60*24, 'yyyyMMdd'); 

하이브가 전체 테이블을 스캔하지 않아도 작동합니다. from_unixtime은 결정적이지 않으므로 Hive의 쿼리 플래너가 최적화되지 않습니다. 결정적 파티션 키를 지정하지 않으면 많은 경우 (예 : 로그 파일) 지정된 파티션 키가있는 행뿐만 아니라 전체 테이블을 스캔하므로 매우 큰 hadoop 작업이 시작될 수 있습니다. 이것은 당신에게 중요한 경우

, 당신은 추가 옵션

$ hive -hiveconf date_yesterday=20150331 

으로 그리고 스크립트 나 변수의 이름은 중요하지 않습니다 하이브 터미널 사용

select * from table1 
where dt >= ${hiveconf:date_yesterday}; 

에서 하이브를 시작할 수 있습니다 값도 아니며이 경우 UNIX 명령을 사용하여 이전 날짜를 가져올 수 있습니다. DATE_SUB 포맷 yyyy-MM-dd 날짜를 가정처럼 OP

$ hive -hiveconf date_yesterday=$(date --date yesterday "+%Y%m%d") 
1

:

SQLSERVER에서
select DATE_FORMAT(curdate()-1,'%Y%m%d'); 

:

SELECT convert(varchar,getDate()-1,112) 

사용이 쿼리 :

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()-1*24*60*60,'%Y%m%d'); 
+0

하이브에 대해 똑같은 일을하기 위해 명확하게 언급 한 질문에 대해 하이브는 어떻습니까? – ferhan

+0

나는 내 대답을 편집했다.그 쿼리를 시도하십시오. –

+2

이것은 작동하지 않습니다. 방금 시도했는데 아무것도 얻지 못했습니다. – ferhan

1

의 특정 경우 같습니다. 따라서 형식을 사용하려면 더 많은 형식 조작을해야 할 수도 있습니다. 이 시도 :

select * from table1 
where dt = FROM_UNIXTIME(
       UNIX_TIMESTAMP(
        DATE_SUB(
         FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') 
        , 1) 
       ) 
      , 'yyyyMMdd')  limit 10; 
+0

'FROM_UNIXTIME (UNIX_TIMESTAMP(), 'yyyy-MM-dd')'는 'current_date'로 바꿀 수 있습니다. –

0

사용이 :

select * from table1 where dt = date_format(concat(year(date_sub(current_timestamp,1)),'-', month(date_sub(current_timestamp,1)), '-', day(date_sub(current_timestamp,1))), 'yyyyMMdd') limit 10; 

는 파티션의 결정 결과 (문자열)을 제공 할 것입니다.

나는 그것이 매우 장황 함을 안다.

관련 문제