2015-01-08 33 views
2

我试图通过Hive使用DESCRIBE函数将每个表的列描述输出到单个文件。我发现-f选项,这样我就可以从文件中读取和写入输出退了出来:运行多个配置单元查询并将输出写入文件

hive -f nameOfSqlQueryFile.sql > out.txt 

不过,如果我打开输出文件,它抛出所有的描述背靠背目前还不清楚其中一个描述从一个表开始并结束。

所以,我试图使使用-e一一描述每个表的一个批处理文件,并输出到一个文件:

#!/bin/bash 

nameArr=($(hive -e 'show tables;')) 
count=0 
for i in "${nameArr[@]}" 
do 
    echo 'Working on table('$count'): '$i 
    hive -e 'describe '$i > $i'_.txt'; 
    count=$(($count+1)) 
done 

然而,因为这需要重新对每个查询,这是处理数百个查询需要数小时,速度非常缓慢。

有没有人有一个想法,我怎么可能运行这些DESCRIBE函数,并理想地输出到单独的文件?

+0

如果你只在表定义兴趣,而不是数据,你可能有一些运气直接进入Metastore。根据您的metastore,您可能会直接获取东西(mySQL),或者我听说有一个用于Metastore的Java API。 – LiMuBei

回答

1

你也许可以使用其中的一个,这取决于你如何处理输出:

  1. 只需使用OK线作为分隔符,并使用脚本进行搜索。
  2. 运用描写EXTENDED这在结束在桌子上增加了一个符合的信息,包括它的位置,它可以被用来提取表名(SED使用,例如)
  3. 如果你只是使用输出文件作为手动参考,插入打印每个表之间你选择的隔膜的SQL语句,如:其中

    DESCRIBE table; 
    SELECT '-----------------' FROM table; 
    
相关问题