Como obter todas as definições de tabelas em uma base de dados na colmeia?

Estou à procura de todas as definições de tabelas na colmeia. Eu sei que para a definição de uma única tabela eu posso usar algo como -

  describe <<table_name>>
  describe extended <<table_name>>
Mas não consegui encontrar uma forma de obter todas as definições das tabelas. Existe alguma tabela em megastore semelhante a Information_Schema em mysql ou existe um comando para obter todas as definições de tabela ?

 10
Author: user4157124, 2016-01-25

3 answers

Você pode fazer isso escrevendo um script bash simples e alguns comandos bash.

Primeiro, escreva todos os nomes de tabelas numa base de dados para um ficheiro de texto usando:

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

Em seguida, criar um script bash (describe_tables.sh) para percorrer cada tabela desta lista:

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

Execute então o programa:

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

As definições.o ficheiro txt conterá todas as definições das tabelas.

 20
Author: Apurvaa, 2017-09-12 12:59:33
  1. Obter a lista das bases de dados das colmeiashive -e 'show databases' > hive_databases.txt

  2. Ecoar o desc de cadA mesa:

    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
 1
Author: diggzhang, 2020-04-05 12:05:13

Os processos acima funcionam, no entanto, será lento devido ao fato de que a conexão de colmeia é feita para cada consulta. Em vez disso, podes fazer o que acabei de fazer pela mesma necessidade lá em baixo.

Utilize um dos métodos acima para obter a sua lista de tabelas. Em seguida, modificar a lista para torná-la uma consulta de colmeia para cada tabela da seguinte forma:

describe my_table_01;
describe my_TABLE_02;

Então você terá um arquivo plano com todas as suas declarações descritas acima. Por exemplo, se você tem a consulta em um arquivo plano chamado my_table_description.hql.

Obter o resultado numa colher do seguinte modo:

"hive -f my_table_description.hql > my_table_description.output
É super rápido e consegue a saída de uma vez.
 0
Author: K P, 2020-09-26 21:15:36