복붙노트

[HADOOP] 하이브 추가 파티션 문은 선행 0을 무시합니다.

HADOOP

하이브 추가 파티션 문은 선행 0을 무시합니다.

hdfs에 폴더가 있습니다 / user / test / year = 2016 / month = 04 / dt = 25 / 000000_0

이 파티션 경로를 테스트 테이블에 추가해야합니다.

명령 :

ALTER TABLE test ADD IF NOT EXISTS PARTITION (year=2016,month=04,dt=25)

그러나이 파티션 추가 명령은 월 파티션의 선행 0을 무시하고 2016 년에 month = 4로 추가 폴더를 만듭니다.   / user / test / year = 2016 / month = 04 / / user / test / year = 2016 / month = 4 / 및 표는 데이터가 포함되지 않은 / user / test / year = 2016 / month = 4 /이 경로를 가리 킵니다.

나는 로그를 확인했다. WARN org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer-Partition Spec month = 04가 month = 4로 변경되었습니다.

누군가 이런 종류의 문제에 직면 한 경우이를 피하는 방법을 알려주십시오.

하이브 버전 : 1.2.1000

해결법

  1. ==============================

    1.파티션에 정수 유형을 사용하고 있습니다. 문자열 파티션과 따옴표를 사용하는 것보다 선행 0이 필요한 경우 ALTER TABLE test ADD IF EXISTS PARTITION (연도 '2016', 월 = '04', dt = '25 ')

    파티션에 정수 유형을 사용하고 있습니다. 문자열 파티션과 따옴표를 사용하는 것보다 선행 0이 필요한 경우 ALTER TABLE test ADD IF EXISTS PARTITION (연도 '2016', 월 = '04', dt = '25 ')

  2. ==============================

    2.파티션 폴더가 이미 생성 된 경우 MSCK REPAIR TABLE 테스트를 사용할 수 있습니다. 모든 디렉토리를 스캔하고 새 파티션을 작성합니다. 자세한 내용은 Hive Language Manual을 방문하십시오. 또는 INT 대신 파티션 열에 STRING을 사용해야합니다.

    파티션 폴더가 이미 생성 된 경우 MSCK REPAIR TABLE 테스트를 사용할 수 있습니다. 모든 디렉토리를 스캔하고 새 파티션을 작성합니다. 자세한 내용은 Hive Language Manual을 방문하십시오. 또는 INT 대신 파티션 열에 STRING을 사용해야합니다.

  3. from https://stackoverflow.com/questions/38017321/hive-add-partition-statement-ignores-leading-zero by cc-by-sa and MIT license