如果查询如下所示,如何在后台执行HIVE查询
Select count(1) from table1 where column1='value1';

我正在尝试使用下面的脚本编写它
#!/usr/bin/ksh
exec 1> /home/koushik/Logs/`basename $0 | cut -d"." -f1 | sed 's/\.sh//g'`_$(date +"%Y%m%d_%H%M%S").log 2>&1
ST_TIME=`date +%s`
cd $HIVE_HOME/bin
./hive -e 'SELECT COUNT(1) FROM TABLE1 WHERE COLUMN1 = ''value1'';'
END_TIME=`date +%s`
TT_SECS=$(( END_TIME - ST_TIME))
TT_HRS=$(( TT_SECS / 3600 ))
TT_REM_MS=$(( TT_SECS % 3600 ))
TT_MINS=$(( TT_REM_MS / 60 ))
TT_REM_SECS=$(( TT_REM_MS % 60 ))
printf "\n"
printf "Total time taken to execute the script="$TT_HRS:$TT_MINS:$TT_REM_SECS HH:MM:SS
printf "\n"

但是收到错误
FAILED: SemanticException [Error 10004]: Line 1:77 Invalid table alias or column reference 'value1'

让我确切地知道我在哪里做错了。
答案 0 :(得分:1)
真的@Koushik!很高兴您发现了这个问题。 在查询中,由于单引号含糊不清,bash无法形成配置单元查询。
虽然SELECT COUNT(1) FROM Table1 WHERE Column1 = 'Value1'
在配置单元中有效,但
$hive -e 'SELECT COUNT(1) FROM Table1 WHERE Column1 = 'Value1';'
无效。
最好的解决方案是使用Value1的双引号作为
hive -e 'SELECT COUNT(1) FROM Table1 WHERE Column1 = "Value1";'
或使用快速且脏解决方案,在双引号中包含单引号。
hive -e 'SELECT COUNT(1) FROM Table1 WHERE Column1 = "'"Value1"'";'
这将确保正确形成配置单元查询,然后相应地执行。除非你绝望地要求单引号,否则我不建议采用这种方法;)
答案 1 :(得分:1)
创建名为example
的文档vi example
在文档中输入查询并保存。
create table sample as
Select count(1) from table1 where column1='value1';
现在使用以下命令运行文档:
hive -f example 1>example.error 2>example.output &
您将获得结果
[1]
现在取消了这个过程:
disown
现在该过程将在后台运行。如果您想知道输出的状态,可以使用
tail -f example.output
答案 2 :(得分:-1)
我可以用双引号替换单引号。现在修改后的语句看起来像
./hive -e 'SELECT COUNT(1) FROM Table1 WHERE Column1 = "Value1";'