在后台执行HIVE查询

时间:2015-09-08 14:47:55

标签: hive

如果查询如下所示,如何在后台执行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'




让我确切地知道我在哪里做错了。

3 个答案:

答案 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";'