[HADOOP] 하드 코드 된 날짜 문자열 대신 Hive 날짜 함수를 사용할 때 Hive 쿼리 성능이 느려 집니까?
HADOOP하드 코드 된 날짜 문자열 대신 Hive 날짜 함수를 사용할 때 Hive 쿼리 성능이 느려 집니까?
매일 업데이트되는 table_A 트랜잭션 테이블이 있습니다. 매일 file_date 필드를 사용하여 table_A에 삽입하기 위해 외부 table_B에서 필요한 데이터를 필터링하기 위해 외부 table_B에서 table_A에 새 데이터를 삽입합니다. 그러나 하드 코딩 된 날짜를 사용하는 것과 Hive 날짜 기능을 사용하면 성능이 크게 다릅니다.
-- Fast version (~20 minutes)
SET date_ingest = '2016-12-07';
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.dynamic.partition = TRUE;
INSERT
INTO
TABLE
table_A PARTITION (FILE_DATE) SELECT
id, eventtime
,CONCAT_WS( '-' ,substr ( eventtime ,0 ,4 ) ,SUBSTRING( eventtime ,5 ,2 ) ,SUBSTRING( eventtime ,7 ,2 ) )
FROM
table_B
WHERE
file_date = ${hiveconf:date_ingest}
;
다음과 비교 :
-- Slow version (~9 hours)
SET date_ingest = date_add(to_date(from_unixtime( unix_timestamp( ) )),-1);
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.dynamic.partition = TRUE;
INSERT
INTO
TABLE
table_A PARTITION (FILE_DATE) SELECT
id, eventtime
,CONCAT_WS( '-' ,substr ( eventtime ,0 ,4 ) ,SUBSTRING( eventtime ,5 ,2 ) ,SUBSTRING( eventtime ,7 ,2 ) )
FROM
table_B
WHERE
file_date = ${hiveconf:date_ingest}
;
비슷한 문제가 발생한 사람이 있습니까? 우리는 타사 UI를 사용하고 있기 때문에 Unix 하이브 명령에 액세스 할 수 없다고 가정합니다 (즉, --hiveconf 옵션을 사용할 수 없음).
해결법
-
==============================
1.필터 절에서 함수를 사용할 때 파티션 정리가 작동하지 않는 경우가 있습니다. 랩퍼 쉘 스크립트에서 변수를 계산하고이를 -hiveconf 변수로 Hive에 전달하면 제대로 작동합니다. 예:
필터 절에서 함수를 사용할 때 파티션 정리가 작동하지 않는 경우가 있습니다. 랩퍼 쉘 스크립트에서 변수를 계산하고이를 -hiveconf 변수로 Hive에 전달하면 제대로 작동합니다. 예:
#inside shell script date_ingest=$(date -d '-1 day' +%Y-%m-%d) hive -f your_script.hql -hiveconf date_ingest="$date_ingest"
그런 다음 Hive 스크립트에서 WHERE file_date = '$ {hiveconf : date_ingest}'로 사용하십시오.
from https://stackoverflow.com/questions/41048132/hive-query-performance-is-slow-when-using-hive-date-functions-instead-of-hardcod by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡에서 CompressionCodec를 사용하는 방법 (0) | 2019.08.12 |
---|---|
[HADOOP] Hadoop HDFS의 블록 개념 (0) | 2019.08.12 |
[HADOOP] Hive 시작 오류 : java.lang.NoClassDefFoundError : org / apache / hadoop / hive / conf / HiveConf (0) | 2019.08.12 |
[HADOOP] Hadoop에서 List 컬렉션 객체를 직렬화하는 방법은 무엇입니까? (0) | 2019.08.12 |
[HADOOP] HIVE에서 테이블 이름으로 사용하기 위해 현재 날짜를 가져 와서 변수로 설정하십시오. (0) | 2019.08.12 |