복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.데이터가 s3 위치에 있고 메타 데이터 (emrfs)에서 업데이트되지 않았을 것으로 생각합니다. 이 작업을 먼저 수행하려면 emrfs 가져 오기 및 emrfs 동기화를 수행하십시오. 그리고 나서 msck 수리를 적용하십시오.

    데이터가 s3 위치에 있고 메타 데이터 (emrfs)에서 업데이트되지 않았을 것으로 생각합니다. 이 작업을 먼저 수행하려면 emrfs 가져 오기 및 emrfs 동기화를 수행하십시오. 그리고 나서 msck 수리를 적용하십시오.

    s3에있는 모든 파티션을 추가합니다.

  5. ==============================

    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/.

  6. from https://stackoverflow.com/questions/22220837/how-to-add-partition-using-hive-by-a-specific-date by cc-by-sa and MIT license