[HADOOP] 특정 날짜까지 하이브를 사용하여 파티션을 추가하는 방법은 무엇입니까?
HADOOP특정 날짜까지 하이브를 사용하여 파티션을 추가하는 방법은 무엇입니까?
아마존 S3에 저장된 데이터를 처리하기 위해 외부 테이블과 함께 하이브를 사용하고 있습니다.
내 데이터는 다음과 같이 분할됩니다.
DIR s3://test.com/2014-03-01/
DIR s3://test.com/2014-03-02/
DIR s3://test.com/2014-03-03/
DIR s3://test.com/2014-03-04/
DIR s3://test.com/2014-03-05/
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_04-20_00-49.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_06-26_19-56.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_15-20_12-53.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_22-54_27-19.log
하이브를 사용하여 파티션 테이블을 만드는 방법은 무엇입니까?
CREATE EXTERNAL TABLE test (
foo string,
time string,
bar string
) PARTITIONED BY (? string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3://test.com/';
누군가이 질문에 답할 수 있었습니까? 감사!
해결법
-
==============================
1.먼저 오른쪽 테이블 정의로 시작하십시오. 당신의 경우 나는 당신이 쓴 것을 사용할 것입니다.
먼저 오른쪽 테이블 정의로 시작하십시오. 당신의 경우 나는 당신이 쓴 것을 사용할 것입니다.
CREATE EXTERNAL TABLE test ( foo string, time string, bar string ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://test.com/';
기본적으로 Hive는 s3 : //test.com/partitionkey=partitionvalue 규칙을 통해 명명 된 하위 디렉토리에 파티션이 존재할 것으로 예상합니다. 예를 들어
s3://test.com/dt=2014-03-05
이 규칙을 따르면 MSCK를 사용하여 모든 파티션을 추가 할 수 있습니다.
이 명명 규칙을 사용할 수 없거나 사용하지 않으려면 다음과 같이 모든 파티션을 추가해야합니다.
ALTER TABLE test ADD PARTITION (dt='2014-03-05') location 's3://test.com/2014-03-05'
-
==============================
2.날짜 필드를 사용하여 파티션을 만들려면 아래에 설명 된 것처럼 s3 폴더 구조가 필요합니다.
날짜 필드를 사용하여 파티션을 만들려면 아래에 설명 된 것처럼 s3 폴더 구조가 필요합니다.
s3://test.com/date=2014-03-05/ip-foo-request-2014-03-05_04-20_00-49.log
이 경우 파티션 칼럼이있는 외부 테이블을 날짜로 생성 할 수 있습니다. 하이브 메타 저장소를 업데이트하려면 MSCK REPAIR TABLE EXTERNAL_TABLE_NAME을 실행하십시오.
-
==============================
3.Carter Shanklin이 위에 게시 한 답변을 살펴보십시오. 파일이 디렉토리 구조에 partitionkey = partitionvalue로 저장되어 있는지 확인해야합니다. 즉, 기본적으로 Hive는 파티션이 규칙을 통해 명명 된 하위 디렉토리에있을 것으로 예상합니다.
Carter Shanklin이 위에 게시 한 답변을 살펴보십시오. 파일이 디렉토리 구조에 partitionkey = partitionvalue로 저장되어 있는지 확인해야합니다. 즉, 기본적으로 Hive는 파티션이 규칙을 통해 명명 된 하위 디렉토리에있을 것으로 예상합니다.
귀하의 예에서는 다음과 같이 저장해야합니다.
s3 : //test.com/date=20140305/ip-foo-request-2014-03-05_04-20_00-49.log.
따라야 할 단계 :
i) 위의 구조에 데이터가 있는지 확인하십시오. ii) 외부 테이블 생성 iii) 이제 msck repair 테이블을 실행하십시오.
-
==============================
4.데이터가 s3 위치에 있고 메타 데이터 (emrfs)에서 업데이트되지 않았을 것으로 생각합니다. 이 작업을 먼저 수행하려면 emrfs 가져 오기 및 emrfs 동기화를 수행하십시오. 그리고 나서 msck 수리를 적용하십시오.
데이터가 s3 위치에 있고 메타 데이터 (emrfs)에서 업데이트되지 않았을 것으로 생각합니다. 이 작업을 먼저 수행하려면 emrfs 가져 오기 및 emrfs 동기화를 수행하십시오. 그리고 나서 msck 수리를 적용하십시오.
s3에있는 모든 파티션을 추가합니다.
-
==============================
5.
= 를 준수하지 않는 기존 디렉토리 구조가 있으면 수동으로 파티션을 추가해야합니다. MSCK REPAIR TABLE은 디렉토리를 구조화하지 않으면 작동하지 않습니다. = 를 준수하지 않는 기존 디렉토리 구조가 있으면 수동으로 파티션을 추가해야합니다. MSCK REPAIR TABLE은 디렉토리를 구조화하지 않으면 작동하지 않습니다. 다음과 같이 테이블 생성시 위치를 지정한 후 :
CREATE EXTERNAL TABLE test ( foo string, time string, bar string ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://test.com/';
전체 경로를 지정하지 않고 파티션을 추가 할 수 있습니다.
ALTER TABLE test ADD PARTITION (dt='2014-03-05') LOCATION '2014-03-05';
체크하지는 못했지만 파티션을 버킷 안의 폴더로 옮기고 버킷 자체에 직접 넣지 말 것을 제안합니다. 예 : s3 : //test.com/에서 s3 : //test.com/data/.
from https://stackoverflow.com/questions/22220837/how-to-add-partition-using-hive-by-a-specific-date by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Cygwin을 통한 Windows에서의 Hadoop 설정 (0) | 2019.06.14 |
---|---|
[HADOOP] Hadoop : start-dfs.sh 권한이 거부되었습니다. (0) | 2019.06.14 |
[HADOOP] HBase의 타임 스탬프 기반 스캔? (0) | 2019.06.14 |
[HADOOP] Docker-spark에서 Hadoop "플랫폼에 native-hadoop 라이브러리를로드 할 수 없습니다"오류가 발생합니까? (0) | 2019.06.14 |
[HADOOP] hadoop의 새로운 디렉토리에서 .gz 파일의 압축을 해제하는 방법은 무엇입니까? (0) | 2019.06.14 |