如何从 bash shell 脚本 运行 直线和蜂巢查询

how to run beeline and hive query from a bash shell script

我可以在登录到 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>

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

使用 !connect 将打开直线 shell 控制台。要使用直线 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 的更多信息,请参见此处。