java - start - 아파치 hive




외부 테이블 하이브 만들기, 위치에 여러 파일이 들어 있습니다. (2)

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';

'test'폴더 아래에 매일 파일을 쓰고 있습니다. 예 :

/user/hive/warehouse/LOGS/test/20170420
/user/hive/warehouse/LOGS/test/20170421
/user/hive/warehouse/LOGS/test/20170422

내가 만든 LOGS 테이블 안의 어떤 데이터도 볼 수 없다.

하지만, 나는

LOCATION '/user/hive/warehouse/LOGS/test/20170422';

그 날 기록을 볼 수 있습니다.

내 HIVE 테이블에 / test 디렉토리 아래의 모든 데이터를보고 싶고 / test 디렉토리에도 매일 새 파일이 채워집니다.


기본적으로 하이브는 외부 테이블의 지정된 위치에있는 파일 (디렉토리가 아님) 만 읽습니다. 디렉토리를 추가하려면 다음 매개 변수를 설정하십시오.

set mapred.input.dir.recursive = true;


옵션 1

하위 디렉토리를 지원하려면

set mapred.input.dir.recursive=true;

하이브 버전이 2.0.0 보다 낮 으면

set hive.mapred.supports.subdirectories=false;

옵션 2

분할 된 테이블 만들기

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
partitioned by (dt date)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';
alter table LOGS add if not exists partition (dt=date '2017-04-20') LOCATION '/user/hive/warehouse/LOGS/test/20170420';
alter table LOGS add if not exists partition (dt=date '2017-04-21') LOCATION '/user/hive/warehouse/LOGS/test/20170421';
alter table LOGS add if not exists partition (dt=date '2017-04-22') LOCATION '/user/hive/warehouse/LOGS/test/20170422';

20170420 대신 dt=2017-04-20 과 같이 표준 규칙을 사용하여 디렉토리를 관리하는 경우 관리가 더 쉬울 것입니다 20170420