我希望在Hive中获取所有表定义。我知道对于单表定义,我可以使用像 -
这样的东西 describe <<table_name>>
describe extended <<table_name>>
但是,我找不到获取所有表定义的方法。在megastore中是否有类似于mysql中的Information_Schema的表,或者是否有获取所有表定义的命令?
答案 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)
获取配置单元数据库列表$hive -e 'show databasess
> 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
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
它超级快,一枪即可输出。