Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 运行大量配置单元查询并将输出写入文件_Bash_Hive - Fatal编程技术网

Bash 运行大量配置单元查询并将输出写入文件

Bash 运行大量配置单元查询并将输出写入文件,bash,hive,Bash,Hive,我试图通过配置单元使用descripe函数将每个表的列描述输出到各个文件中。我发现了-f选项,因此我可以从文件中读取并将输出写回: hive -f nameOfSqlQueryFile.sql > out.txt 但是,如果我打开输出文件,它会将所有描述背靠背地抛出,并且不清楚表的一个描述从何处开始,在何处结束 因此,我尝试创建一个批处理文件,使用-e单独描述每个表并输出到一个文件: #!/bin/bash nameArr=( $(hive -e 'show tables;') ) c

我试图通过配置单元使用descripe函数将每个表的列描述输出到各个文件中。我发现了-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
但是,由于每个查询都需要重新连接,因此速度非常慢,需要花费数小时来处理数百个查询


有人知道我还可以如何运行这些描述函数中的每一个,并理想地输出到单独的文件吗?

您可能可以使用其中一个,具体取决于您处理输出的方式:

  • 只需使用OK行作为分隔符,并使用脚本搜索它
  • 使用descripe EXTENDED,在表的末尾添加一行信息,包括其位置,可用于提取表名(例如使用sed)
  • 如果只是将输出文件用作手动引用,请插入SQL语句,在每个表之间打印您选择的分隔符,例如:

    DESCRIBE table;
    SELECT '-----------------' FROM table;
    

  • 如果您只对表定义感兴趣,而对其中的数据不感兴趣,那么您可能有幸直接访问元存储。根据您的元存储,您可以直接获取内容(mySQL),或者我听说有一个用于元存储的JavaAPI。