2016-08-08 2 views
0

하이브 테이블 데이터를 저장하는 데 사용되는 로컬 디렉토리가 있습니다.로컬 디렉토리의 하이브 테이블 목록

로컬 디렉토리를 사용하는 모든 테이블을 나열해야합니다.

이 테이블 (관리되는 테이블)은 하이브 기본 DB에 저장되며이 데이터베이스는 다른 로컬 디렉토리에 데이터를 저장할 수 있습니다.

내 로컬 디렉토리 :/ABC/EFG/데이터/

테이블 데이터는 테이블 XYZ의 위치는 456,789 등

, 123과 같은 하위 폴더에 저장된다/ABC/EFG/데이터/(123), PQR 위치는/abc/efg/data/456입니다. 내가

하이브 -e "쇼 테이블"를 사용하는 것을 시도하고있다

> ALL_TABLES목록의 모든 테이블과

ALL_TABLES의 각 행 (각 테이블)에 대한 파일

로 리디렉션

하이브 -e "desc 형식 $ $"| grep '/ abc/efg/data /'>> Tables_My_local_dir

그러나 DB에 6000 개의 테이블이 있으므로 성능 문제가 발생합니다.

최상의 성능으로 로컬 디렉토리를 사용하는 모든 테이블을 나열하는 데 도움을주십시오.

답변

1

기본 데이터베이스의 형식의 형식에서 테이블 및 해당 위치 정보를 추출하여 목록으로 표시한다고 가정합니다. 나의 이해가 맞으면

, 나는 당신이 하이브 메타 저장소를 쿼리와 함께 이동하는 것이 좋습니다, 외부를 구성하고 같은 정보 메타 스토어에서

쿼리를 가져 오는 데 필요한 권한이 그에게 제공 :

SELECT T.TBL_NAME AS TABLE_NAME,S.LOCATION AS LOCATION FROM TBLS T LEFT JOIN SDS S ON T.SD_ID=S.SD_ID WHERE T.TBL_TYPE='MANAGED_TABLE' AND T.DB_ID=1 ; 

참고 : 쿼리에서 기본 데이터베이스 DB_ID 1

입니다 출력 :

------------+------------------------------------------------------------+ 
| TABLE_NAME | LOCATION             | 
+------------+------------------------------------------------------------+ 
| sample  | hdfs://********:8020/user/hive/warehouse/sample | 
... 

0

는 규정에 근거

하둡 테이블 내가 다음 단계를 수행하는 쉘 스크립트를 생성 한

번호부 내용입니다.

1 단계. 지난 14 일 동안 수정되지 않은 모든 디렉토리를 찾습니다.

2 단계. 실제 테이블과 실제 폴더 분리 2.1execute "내림차순 $의 만약 DIR_Name"반환 상태에 따라

2.2 ($?) 두 개의 파일 (디렉토리에 대한 실제 테이블 하나와 다른)

가 지금은 파일에서 필요한 테이블이에 $의 만약 DIR_Name를 리디렉션합니다.