Como obter todas as definições de tabelas em uma base de dados na colmeia?
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 ?
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.
Obter a lista das bases de dados das colmeias
hive -e 'show databases' > hive_databases.txt
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
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.