복붙노트

[HADOOP] Hive에서 데이터베이스의 모든 테이블 정의를 얻는 방법?

HADOOP

Hive에서 데이터베이스의 모든 테이블 정의를 얻는 방법?

하이브에서 모든 테이블 정의를 얻으려고합니다. 단일 테이블 정의에 대해 다음과 같은 것을 사용할 수 있음을 압니다.

  describe <<table_name>>
  describe extended <<table_name>>

그러나 모든 테이블 정의를 얻을 수있는 방법을 찾지 못했습니다. 메가 스토어에있는 어떤 테이블이 Information_Schema와 비슷하거나 모든 테이블 정의를 가져 오는 명령이 있습니까?

해결법

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

    1.간단한 bash 스크립트와 bash 명령을 작성하여이 작업을 수행 할 수 있습니다.

    간단한 bash 스크립트와 bash 명령을 작성하여이 작업을 수행 할 수 있습니다.

    먼저 데이터베이스의 모든 테이블 이름을 다음을 사용하여 텍스트 파일에 작성합니다.

    $hive -e 'show tables in <dbname>' | tee tables.txt
    

    그런 다음 bash 스크립트 (describe_tables.sh)를 작성하여이 목록의 각 테이블을 반복하십시오.

    while read line
    do
     echo "$line"
     eval "hive -e 'describe <dbname>.$line'"
    done
    

    그런 다음 스크립트를 실행하십시오.

    $chmod +x describe_tables.sh
    $./describe_tables.sh < tables.txt > definitions.txt
    

    definitions.txt 파일에는 모든 테이블 정의가 포함됩니다.

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

    2.

    cat hive_databases.txt | grep -v '^$' | while read LINE;
    do
      echo "## TableName:" $LINE
      eval "hive -e 'show tables in $LINE' | grep -v ^$ | grep -v Logging | grep -v tab_name | tee $LINE.tables.txt"
      cat $LINE.tables.txt | while read table
      do
        echo "### $LINE.$table" > $LINE.$table.desc.md
        eval "hive -e 'describe $LINE.$table'" >> $LINE.$table.desc.md
        sed -i 's/\t/|/g' ./$LINE.$table.desc.md
        sed -i 's/comment/comment\n|:--:|:--:|:--:|/g' ./$LINE.$table.desc.md
      done
    done
    

  3. from https://stackoverflow.com/questions/35004455/how-to-get-all-table-definitions-in-a-database-in-hive by cc-by-sa and MIT license