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

标签 database bash hadoop hive bigdata

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

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

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

上述问题是我必须监视进程何时完成并手动启动下一个查询。我还知道如何按顺序运行多个查询,如下所示:

hive -f hivequeries.hql

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

代码答案是首选,因为我不太了解 bash,无法从头开始编写它。

这个问题是另一个问题的变体:How do I output the results of a HiveQL query to 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/

关于database - 如何使用 shell 脚本将 HiveQL 查询的结果输出到 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53755508/

相关文章:

mysql - Group_Concat 中的元素数

mysql - 如何在 MARIADB/MYSQL 中为函数/过程声明表到变量?

sql - 使用一个 select 语句返回特定范围之间的行

mysql - 如何在交互式输入的自动 bash 脚本中发送存储值而不是别名

bash - 在 RPM 规范文件中使用脚本定义版本

在命令行中按下 Up 的 Bash 别名

r - 如何在 SparkR 中读取 json/csv 文件?

node.js - 为棋盘游戏 session 数据保留数据时,redisJSON 是否比普通 redis 更好?

hadoop - 为什么join和group by会影响spark中的数据shuffle量

Hadoop任务进度