繁体   English   中英

如何使用Shell脚本将HiveQL查询的结果输出到CSV?

[英]How do I output the results of a HiveQL query to CSV using a shell script?

我想运行多个Hive查询,最好是并行而不是顺序运行,并将每个查询的输出存储到一个csv文件中。 例如, query1csv1输出, query2csv2输出,等等。我下班后将运行这些查询,目标是在下一个工作日分析输出。 我对使用bash shell脚本感兴趣,因为这样我就可以设置cron任务在一天的特定时间运行它。

我知道如何将HiveQL查询的结果存储在CSV文件中,一次存储一个查询。 我这样做的方式如下:

hive -e 
"SELECT * FROM db.table;" 
" | tr "\t" "," > example.csv;

上面的问题是我必须监视进程何时完成并手动启动下一个查询。 我也知道如何依次运行多个查询,如下所示:

hive -f hivequeries.hql

有没有办法将这两种方法结合起来? 有没有更明智的方式实现我的目标?

最好使用代码答案,因为我不太了解bash以便从头开始编写它。

这个问题是另一个问题的变体: 如何将HiveQL查询的结果输出到CSV?

您可以在Shell脚本中运行和监视并行作业:

#!/bin/bash

#Run parallel processes and wait for their completion

#Add loop here or add more calls
hive -e "SELECT * FROM db.table1;" | tr "\t" "," > example1.csv &
hive -e "SELECT * FROM db.table2;" | tr "\t" "," > example2.csv &
hive -e "SELECT * FROM db.table3;" | tr "\t" "," > example3.csv &

#Note the ampersand in above commands says to create parallel process
#You can wrap hive call in a function an do some logging in it, etc
#And call a function as parallel process in the same way
#Modify this script to fit your needs

#Now wait for all processes to complete

#Failed processes count
FAILED=0

for job in `jobs -p`
do
   echo "job=$job"
   wait $job || let "FAILED+=1"
done   

#Final status check
if [ "$FAILED" != "0" ]; then
    echo "Execution FAILED!  ($FAILED)"
    #Do something here, log or send messege, etc
    exit 1
fi

#Normal exit
#Do something else here
exit 0

还有其他方法(使用XARGS,GNU并行)在shell中运行并行进程,并在其中运行大量资源。 阅读https://www.slashroot.in/how-run-multiple-commands-parallel-linuxhttps://thoughtsimproved.wordpress.com/2015/05/18/parellel-processing-in-bash/

使用GNU Parallel,它看起来像这样:

doit() {
  id="$1"
  hive -e "SELECT * FROM db.table$id;" | tr "\t" "," > example"$id".csv
}
export -f doit
parallel --bar doit ::: 1 2 3 4

如果您的查询不共享同一模板,则可以执行以下操作:

queries.txt:
SELECT * FROM db.table1;
SELECT id,name FROM db.person;
... other queries ...

cat queries.txt | parallel --bar 'hive -e {} | tr "\t" "," > example{#}.csv'

花15分钟阅读https://doi.org/10.5281/zenodo.1146014的第1 + 2章,以学习基础知识,并花费第7章,以了解有关如何并行运行更多作业的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM