복붙노트

[HADOOP] 하이브 : 테이블 및 파티션 작성 기준

HADOOP

하이브 : 테이블 및 파티션 작성 기준

다음과 같이로드 된 데이터가있는 테이블이 있습니다.

create table xyzlogTable (dateC string , hours string, minutes string, seconds string, TimeTaken string, Method string, UriQuery string, ProtocolStatus string) row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' with serdeproperties( "input.regex" = "(\\S+)\\t(\\d+):(\\d+):(\\d+)\\t(\\S+)\\t(\\S+)\\t(\\S+)\\t(\\S+)", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s") stored as textfile;

load data local inpath '/home/hadoop/hive/xyxlogData/' into table xyxlogTable;

총 행 수는 300 만 개가 넘습니다. 일부 쿼리는 제대로 작동하고 일부 쿼리는 무한 루프에 빠지게됩니다.

select를보고 나면 쿼리가 오랜 시간이 걸리고 때로는 결과를 반환하지 않고 그룹화하여 파티셔닝하기로 결정했습니다.

그러나 다음 두 문장 모두 실패합니다.

create table xyzlogTable (datenonQuery string , hours string, minutes string, seconds string, TimeTaken string, Method string, UriQuery string, ProtocolStatus string) partitioned by (dateC string); 
Alter table xyzlogTable (datenonQuery string , hours string, minutes string, seconds string, TimeTaken string, Method string, UriQuery string, ProtocolStatus string) partitioned by (dateC string);

어떤 생각이라도 문제가 뭐야!

해결법

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

    1.이것이 하이브에서 외부 테이블을 사용하는 것을 선호하는 이유입니다. 작성한 테이블이 외부 테이블이 아닙니다 (외부 테이블 작성 대신 테이블 작성을 사용했습니다). 외부 테이블이 아닌 테이블을 삭제하면 메타 데이터 (이름, 열 이름, 유형 등) 및 테이블의 데이터가 HDFS에 삭제됩니다. 반대로 외부 테이블을 삭제하면 메타 데이터 만 제거되고 HDFS의 데이터는 그대로 유지됩니다.

    이것이 하이브에서 외부 테이블을 사용하는 것을 선호하는 이유입니다. 작성한 테이블이 외부 테이블이 아닙니다 (외부 테이블 작성 대신 테이블 작성을 사용했습니다). 외부 테이블이 아닌 테이블을 삭제하면 메타 데이터 (이름, 열 이름, 유형 등) 및 테이블의 데이터가 HDFS에 삭제됩니다. 반대로 외부 테이블을 삭제하면 메타 데이터 만 제거되고 HDFS의 데이터는 그대로 유지됩니다.

    앞으로 몇 가지 옵션이 있습니다.

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

    2.먼저 이미 생성 된 테이블을 삭제 한 다음 분할 된 테이블을 만들어야합니다. 또는 테이블 이름을 변경하십시오.

    먼저 이미 생성 된 테이블을 삭제 한 다음 분할 된 테이블을 만들어야합니다. 또는 테이블 이름을 변경하십시오.

  3. from https://stackoverflow.com/questions/13800360/hive-create-table-and-partition-by by cc-by-sa and MIT license