如何从 bash shell 脚本运行直线和配置单元查询

Posted

技术标签:

【中文标题】如何从 bash shell 脚本运行直线和配置单元查询【英文标题】:how to run beeline and hive query from a bash shell script 【发布时间】:2020-07-07 22:39:39 【问题描述】:

登录到 unix bash shell 后,我可以按顺序手动运行以下步骤。

echo "Connecting beeline" 

beeline
!connect jdbc:hive2://a301-1234-1234.stm.XXX.com:10000/default;;ssl=true;sslTrustStore=/app/bds/cloudera_truststore.jks;sslTrustPassword=;principal=hive/_HOST@BDS.XXXX.COM

INSERT OVERWRITE DIRECTORY "/dev/ref/HIVE_EXPORT/" ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY "\\" SELECT * FROM test_ref_st.Daily_report  limit 10;

hadoop fs -get('/dev/ref/HIVE_EXPORT/000000_0', '/user/rj/hiveExtract.csv')
echo "Query result extracted "

我需要通过 shell 脚本 test1.sh 依次运行上述所有步骤

bash-4.2$ sh -x test1.sh

然后它只运行直到直线,其余命令没有运行。 当前输出:

bash-4.2$ sh test1.sh

Picked up JAVA_TOOL_OPTIONS:
Beeline version 1.1.0-cdh5.16.2 by Apache Hive
beeline>

【问题讨论】:

【参考方案1】:

Bash 正在逐行处理您的脚本。它运行beeline 并等待您的输入。 您可以使用heredoc 从您的脚本写入标准输入:

beeline <<EOF
!connect jdbc:hive2://a301-1234-1234.stm.XXX.com:10000/default;;ssl=true;sslTrustStore=/app/bds/cloudera_truststore.jks;sslTrustPassword=;principal=hive/_HOST@BDS.XXXX.COM
INSERT OVERWRITE DIRECTORY "/dev/ref/HIVE_EXPORT/" ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY "\\" SELECT * FROM test_ref_st.Daily_report  limit 10;
EOF

【讨论】:

仍然无法正常工作,出现错误:错误:编译语句时出错:FAILED:ParseException line 1:266 character '' not supported here line 1:154 character '\' not supported here line 1 :266 字符 '' 此处不支持 (state=42000,code=40000)【参考方案2】:

使用!connect 将打开beeline shell 控制台。对于使用 beeline CLI 命令,您可以在 SHELL 中执行以下操作:

#!/bin/bash

HIVE_CONN=jdbc:hive2://a301-1234-1234.stm.XXX.com:10000/default;;  ## limited for simplicity

echo "executing query using beeline"
beeline -u $HIVE_CONN -e "INSERT OVERWRITE DIRECTORY "/dev/ref/HIVE_EXPORT/" ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY "\\" SELECT * FROM test_ref_st.Daily_report  limit 10;"

... 
rest of your code

-e 代表你要执行的查询

更多关于beeline CLI的信息在这里。

【讨论】:

以上是关于如何从 bash shell 脚本运行直线和配置单元查询的主要内容,如果未能解决你的问题,请参考以下文章

bash脚本编程基础及配置文件

Shell脚本画图形

Bash Shell启动配置脚本的顺序

如何从输出到前景的Bash脚本运行无限循环

/bin/bash:从 Matlab 运行 shell 脚本时没有这样的文件或目录

从 shell 脚本 (bash) 的参数列表中删除最后一个参数