date - aws - redshift spectrum 이란




하이브:외부 테이블에 동적 파티션 추가 (3)

하이브 071을 실행 중입니다. 기존 데이터를 처리하는 데 다음 디렉터리 레이아웃이 있습니다.
-TableName
- d = (예 : 2011-08-01)
- d = 2011-08-02
- d = 2011-08-03
... 등
각 날짜 아래에 날짜 파일이 있습니다.
지금 사용중인 데이터를로드하려면

CREATE EXTERNAL TABLE table_name (i int)  
PARTITIONED BY (date String)  
LOCATION '${hiveconf:basepath}/TableName';**  

하이브 스크립트에서 입력 날짜 및 일 수에 따라 관련 파티션을로드 할 수있게하고 싶습니다. 그래서 만약 내가 date = '2011-08-03' 그리고 days = '7'을 통과한다면,
스크립트는 다음 파티션을로드해야합니다. - d = 2011-08-03
- d = 2011-08-04
- d = 2011-08-05
- d = 2011-08-06
- d = 2011-08-07
- d = 2011-08-08
- d = 2011-08-09

내가 명시 적으로 실행 제외하고 그것을 할 수있는 눈에 띄는 방법을 찾지 못했습니다 :

ALTER TABLE table_name ADD PARTITION (d='2011-08-03');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-04');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-05');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-06');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-07');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-08');  
ALTER TABLE table_name ADD PARTITION (d='2011-08-09');  

그런 다음 내 쿼리를 실행합니다.

select count(1) from table_name;

그러나 이것은 날짜와 요일에 따라 자동으로 수행되지 않습니다.

날짜 범위 나 날짜 연산에 따라 파티션을로드하기 위해 외부 테이블에 정의 할 수있는 방법이 있습니까?


나는 하이브에 내장 된 기능이 있다는 것을 믿지 않는다. 플러그인을 작성할 수 있습니다. 사용자 정의 UDF 작성

아마도 이것을 언급 할 필요는 없겠지만 매개 변수를 취하여 명령어를 하이브로 파이프하는 간단한 bash 스크립트를 고려해 보셨습니까?

Oozie 워크 플로가 또 다른 옵션이지만 잔인 할 수도 있습니다. Oozie Hive Extension - Oozie가 이것을 위해 일할 것이라고 생각하지 못한 후에.


내 블로그 게시물에서 비슷한 시나리오를 설명했다.

1) 속성을 설정해야합니다.

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;

2) 입력 파일 데이터를이 테이블에로드하는 외부 스테이징 테이블을 작성하십시오.

3) 파티션 된 C 럼 중 하나로서 날짜 필드가있는 프로덕션 외부 테이블 "production_order"를 작성하십시오.

4) 데이터가 파티션에서 자동으로 분 h되도록 스테이징 테이블에서 프로덕션 테이블을로드하십시오.

아래 블로그 게시물에서도 비슷한 개념을 설명했습니다. 코드를보고 싶다면.

http://exploredatascience.blogspot.in/2014/06/dynamic-partitioning-with-hive.html


필자는 마이그레이션 후에 데이터가있는 테이블을 다시 만들어야하지만 메타 데이터는 만들지 않아야하는 매우 유사한 문제가 있습니다. 그 해결책은 다음과 같다.

MSCK REPAIR TABLE table_name;

여기에서 설명했다.

이것은 또한 OP가 자신의 게시물에 댓글을 달았습니다 "alter table X recover partitions" 대해 언급합니다. MSCK REPAIR TABLE table_name; Amazon-EMR이 아닌 구현에서 작동합니다 (내 경우에는 Cloudera).





database-partitioning