如果从shell脚本运行,则查询出错

dphi5xsq  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(306)

我可以很好地运行这个查询

CREATE TABLE db.table1 STORED AS PARQUET as 
SELECT * FROM db.table WHERE UPPER(executing) = 'TRUE';

除非我从bashshell脚本运行它。我得到这个错误


# !/bin/bash

bash -c 'impala-shell -k -q "CREATE TABLE db.table1 STORED AS PARQUET as
SELECT * FROM db.table WHERE UPPER(executing) = 'TRUE';"'

错误:analysisexception:string和boolean类型的操作数不可比较:upper(正在执行)=true
我试过使用双引号,没有引号和小写没有运气

doinxwow

doinxwow1#

单引号不能包含在shell中的单引号字符串中。单引号 TRUE 不包括在传递给的sql命令中 impala-shell ; 第一个关闭首字母 ' ,第二个开始一个新的带引号的字符串,因此您的脚本相当于

bash -c "impala-shell -k -q \"CREATE TABLE db.table1 STORED AS PARQUET as
SELECT * from db.table WHERE UPPER(executing) = TRUE;\""

一种解决方案是使用双引号,就像我上面提到的那样,它允许您包含sql所需的单引号。

bash -c "impala-shell -k -q \"CREATE TABLE db.table1 STORED AS PARQUET as
SELECT * from db.table WHERE UPPER(executing) = 'TRUE';\""

或者,使用 $'...' 引用论点 -c ,在这种情况下,可以在字符串中包含正确转义的单引号。

bash -c $'impala-shell -k -q "CREATE TABLE db.table1 STORED AS PARQUET as
SELECT * from db.table WHERE UPPER(executing) = \'TRUE\';"'

但是不清楚你为什么要使用 bash -c 而不是跑步 impala-shell 直接作为:

impala-shell -k -q "CREATE ... WHERE UPPER(executing) = 'TRUE';"

相关问题