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

xpcnnkqh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(523)

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

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

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

tvokkenx

tvokkenx1#

上面的过程可以工作,但是会很慢,因为每个查询都建立了配置单元连接。相反,你可以做我刚才做的同样的需要下面。
使用上述方法之一获取表列表。然后修改列表,使其成为每个表的配置单元查询,如下所示:

describe my_table_01;
describe my_TABLE_02;

所以你们会有一个平面文件,上面有你们所有的描述语句。例如,如果您在一个名为 my_table_description.hql .
在一勺中获得如下输出:

"hive -f my_table_description.hql > my_table_description.output

它的速度非常快,一次就能得到输出。

9rnv2umw

9rnv2umw2#

获取配置单元数据库列表 hive -e 'show databases' > hive_databases.txt 回显每个表的说明:

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
33qvvth1

33qvvth13#

您可以通过编写一个简单的bash脚本和一些bash命令来实现这一点。
首先,使用以下命令将数据库中的所有表名写入文本文件:

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

然后创建一个bash脚本(descripe\u 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文件将包含所有表定义。

相关问题