如何自动将beeline命令发送给各种配置单元查询?

时间:2018-10-08 07:33:59

标签: shell hive beeline

我必须像在HIVE CLI中一样执行自动化的直线操作。以下是用于HIVE自动化任务的运行示例外壳脚本:

  echo“正在使用new_db HIVE数据库.. !!”
蜂巢-e“使用new_db;”

回显“截断登台表测试...”
蜂巢-e“ TRUNCATE TABLE new_db.test;”

echo“将数据加载到临时表测试中”
蜂巢-e“将数据本地入口'/ <路径> /IDI.txt'装入表new_db.test;”

echo“将数据追加到历史记录表hist_test ..”
“ hive -e”插入表new_db.test中,从new_db.test中选择*,'$ unix_time';“
 

我想对beeline做类似的事情。我是直线的入门者。因此,我提出了以下内容。

 #! / bin / bash

时间戳= $(日期+%Y-%m-%d-%H:%M:%S:%N)
unix_time = $(日期+%Y-%m-%d-%H:%M:%S)

回显“登录到BeeLine .. !!”

#beeline << EOF

beeline -u jdbc:hive2:// server:port,server:port,server:port /; serviceDiscoveryMode = zookeeper; zookeeperNamespace = hiveserver2; principal=hive/server@hello.COM << EOF -n <用户名> -p <密码>

回声“使用new_db HIVE数据库..!”
直线-e“使用new_db;”

回显“截断登台表测试...”
直线-e“截断表new_db.test;”

echo“将数据加载到临时表测试中”
beeline -e“将数据本地入口'/ <路径> /IDI.txt'装入表new_db.test;”

echo“将数据追加到历史记录表hist_test ..”
“ beeline -e”插入表new_db.test中,从new_db.test中选择*,'$ unix_time';“

紧急行动
 

++++++++++++++++++++++++++++

新语法

 #! / bin / bash

导出BEELINE_PREFIX =“ jdbc:hive2:// server:port,server:port,server:port /; serviceDiscoveryMode = zookeeper; zookeeperNamespace = hiveserver2; principal=hive/server@hello.COM”

导出FILE_PATH =“ path_toFile / staging_hive_tables.hql”
直线-u $ BEELINE_PREFIX -f $ FILE_PATH
 

1 个答案:

答案 0 :(得分:0)

尝试这样。

export BEELINE_PREFIX='beeline -u "jdbc:hive2://bigdataserver-xxxxxx.net:10000/;principal=hive/bigdataplatform-xxxxx.net@XYZ.NET;ssl=true" --silent=true --verbose=false --showHeader=false --outputformat=csv2 -e  ' # set hive.cli.print.header=false;
export PARTY="xxxxx"
export load_date="20181003"

###  Get the table count  ### 
########################################################################
export BEELINE_COMMAND="select count(*) from ${DMAR_HIVE_TABLE} where load='${PARTY}' and load_date=${yyymmdd} ; ";

echo "Hive command=$BEELINE_COMMAND"
${BEELINE_PREFIX}"${BEELINE_COMMAND}" | read table_count
check_count=$?
echo "Check count = $check_count"
echo "Table count = $table_count"

EDIT1:

双引号被遗漏了..用单引号将BEELINE PREFIX包裹起来 试试这个

#! /bin/bash

export BEELINE_PREFIX='"jdbc:hive2://server:port,server:port,server:port/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2;principal=hive/server@hello.COM"'

EDIT2:

我在命令提示符下运行了这些

> export BEELINE_PREFIX='"jdbc:hive2://xxxx:10000/;principal=hive/yyyyy@zzzzz;ssl=true" --silent=true --verbose=false --showHeader=false --outputformat=csv2 '
> cat /tmp/hive1.ql
select current_date;
>  echo "beeline -u ${BEELINE_PREFIX} -f /tmp/hive1.ql " | sh -x
+ beeline -u 'jdbc:hive2://xxxx:10000/;principal=hive/yyyyy@zzzzz;ssl=true' --silent=true --verbose=false --showHeader=false --outputformat=csv2 -f /tmp/hive1.ql
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release

2018-10-12
>    

请注意,您需要回显命令并将其传递到外壳程序(sh)

回显“直线-u $ {BEELINE_PREFIX} -f /tmp/hive1.ql” | sh -x