[HADOOP] 하이브에서 sysdate -1 가져 오기
HADOOP하이브에서 sysdate -1 가져 오기
어제 날짜가 항상 Hive를 의미하는 현재 날짜 -1을 얻는 방법이 있습니까? 그리고이 형식으로 20120805?
나는 어제 날짜에 대한 데이터를 얻기 위해 오늘과 같이 내 쿼리를 실행할 수있다. 8 월 6 일 -
select * from table1 where dt = '20120805';
그러나 date_sub 함수를 사용하여이 방법을 사용하여 어제의 날짜를 얻으려고하면 아래 테이블이 날짜 (dt) 열에 분할됩니다.
select * from table1 where dt = date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP(),
'yyyyMMdd')) , 1) limit 10;
모든 파티션의 데이터를 찾고 있습니까? 왜? 검색어에 문제가 있습니까?
전체 테이블을 스캔하지 않도록 하위 쿼리에서 평가를 수행하려면 어떻게해야합니까?
해결법
-
==============================
1.다음과 같이 시도해보십시오.
다음과 같이 시도해보십시오.
select * from table1 where dt >= from_unixtime(unix_timestamp()-1*60*60*24, 'yyyyMMdd');
하이브가 전체 테이블을 스캔하지 않는다면이 방법이 효과적입니다. from_unixtime은 결정적이지 않으므로 하이브의 쿼리 플래너가 최적화되지 않습니다. 많은 경우 (예 : 로그 파일) 결정적 파티션 키를 지정하지 않으면 주어진 파티션 키가있는 행뿐만 아니라 전체 테이블을 스캔하므로 매우 큰 hadoop 작업이 시작될 수 있습니다.
이것이 당신에게 중요하다면, 추가 옵션으로 하이브를 시작할 수 있습니다
$ hive -hiveconf date_yesterday=20150331
그리고 스크립트 또는 하이브 터미널에서
select * from table1 where dt >= ${hiveconf:date_yesterday};
변수의 이름은 중요하지 않으며 값도 중요하지 않습니다.이 경우 유닉스 명령을 사용하여 이전 날짜를 얻도록 설정할 수 있습니다. OP의 특정 경우
$ hive -hiveconf date_yesterday=$(date --date yesterday "+%Y%m%d")
-
==============================
2.MySQL에서 :
MySQL에서 :
select DATE_FORMAT(curdate()-1,'%Y%m%d');
sqlserver에서 :
SELECT convert(varchar,getDate()-1,112)
이 쿼리를 사용하십시오.
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()-1*24*60*60,'%Y%m%d');
-
==============================
3.DATE_SUB은 yyyy-MM-dd 형식의 날짜로 간주됩니다. 따라서 형식에 도달하기 위해 더 많은 형식 조작을 수행해야 할 수도 있습니다. 이 시도:
DATE_SUB은 yyyy-MM-dd 형식의 날짜로 간주됩니다. 따라서 형식에 도달하기 위해 더 많은 형식 조작을 수행해야 할 수도 있습니다. 이 시도:
select * from table1 where dt = FROM_UNIXTIME( UNIX_TIMESTAMP( DATE_SUB( FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1) ) , 'yyyyMMdd') limit 10;
-
==============================
4.이것을 사용하십시오 :
이것을 사용하십시오 :
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;
그러면 파티션의 결정적인 결과 (문자열)가 제공됩니다.
나는 그것이 매우 상세하다는 것을 안다.
from https://stackoverflow.com/questions/11833701/get-the-sysdate-1-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 년 월 일 파티션 열 목록에서 최신 / 최근 파티션을 추출하는 방법 (0) | 2019.08.06 |
---|---|
[HADOOP] java Mapreduce를 사용하여 JSON 처리하기 (0) | 2019.08.06 |
[HADOOP] HDFS에서 Hive 테이블로 데이터 가져 오기 (0) | 2019.08.06 |
[HADOOP] 1 시간이 걸리는 hbase에 1GB 데이터로드 (0) | 2019.08.06 |
[HADOOP] Apache Giraph - 한 번에 하나의 작업 만 있기 때문에 분할 마스터 / 작업자 모드에서 실행할 수 없습니다. (0) | 2019.08.06 |