我希望在配置单元中获取所有表定义。我知道对于单表定义,我可以使用-
describe <<table_name>> describe extended <<table_name>>
但是,我找不到获取所有表定义的方法。megastore中是否有类似mysql中information\u schema的表,或者是否有获取所有表定义的命令?
tvokkenx1#
上面的过程可以工作,但是会很慢,因为每个查询都建立了配置单元连接。相反,你可以做我刚才做的同样的需要下面。使用上述方法之一获取表列表。然后修改列表,使其成为每个表的配置单元查询,如下所示:
describe my_table_01; describe my_TABLE_02;
所以你们会有一个平面文件,上面有你们所有的描述语句。例如,如果您在一个名为 my_table_description.hql .在一勺中获得如下输出:
my_table_description.hql
"hive -f my_table_description.hql > my_table_description.output
它的速度非常快,一次就能得到输出。
9rnv2umw2#
获取配置单元数据库列表 hive -e 'show databases' > hive_databases.txt 回显每个表的说明:
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
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文件将包含所有表定义。
3条答案
按热度按时间tvokkenx1#
上面的过程可以工作,但是会很慢,因为每个查询都建立了配置单元连接。相反,你可以做我刚才做的同样的需要下面。
使用上述方法之一获取表列表。然后修改列表,使其成为每个表的配置单元查询,如下所示:
所以你们会有一个平面文件,上面有你们所有的描述语句。例如,如果您在一个名为
my_table_description.hql
.在一勺中获得如下输出:
它的速度非常快,一次就能得到输出。
9rnv2umw2#
获取配置单元数据库列表
hive -e 'show databases' > hive_databases.txt
回显每个表的说明:33qvvth13#
您可以通过编写一个简单的bash脚本和一些bash命令来实现这一点。
首先,使用以下命令将数据库中的所有表名写入文本文件:
然后创建一个bash脚本(descripe\u tables.sh)来循环此列表中的每个表:
然后执行脚本:
definitions.txt文件将包含所有表定义。