如何在Hive中的数据库中获取所有表定义?

时间:2016-01-25 23:31:00

标签: hadoop hive bigdata

我希望在Hive中获取所有表定义。我知道对于单表定义,我可以使用像 -

这样的东西
  describe <<table_name>>
  describe extended <<table_name>>

但是,我找不到获取所有表定义的方法。在megastore中是否有类似于mysql中的Information_Schema的表,或者是否有获取所有表定义的命令?

3 个答案:

答案 0 :(得分:11)

您可以通过编写简单的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文件将包含所有表定义。

答案 1 :(得分:0)

  1. 获取配置单元数据库列表$hive -e 'show databasess> hive_databases.txt

  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

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

答案 2 :(得分:0)

以上过程有效,但是由于为每个查询建立了配置单元连接,因此会很慢。相反,您可以按照以下相同的需求执行我刚才要做的事情。

使用上述方法之一获取表列表。 然后修改列表,使其成为针对每个表的配置单元查询,如下所示:

describe my_table_01;
describe my_TABLE_02;

因此,您将得到一个包含上述所有describe语句的平面文件。例如,如果查询位于名为my_table_description.hql的平面文件中。

一键获取输出,如下所示:

"hive -f my_table_description.hql > my_table_description.output

它超级快,一枪即可输出。