我可以正常运行此查询
CREATE TABLE db.table1 STORED AS PARQUET as
SELECT * FROM db.table WHERE UPPER(executing) = 'TRUE';
除非我从bash shell脚本运行它。我收到此错误
#!/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类型的操作数不是 可比较的:上(执行)= TRUE
我尝试过使用双引号,没有引号和小写但没有运气
答案 0 :(得分:2)
单引号不能包含在shell中的单引号字符串中。 TRUE
周围的单引号不包含在传递给impala-shell
的SQL命令中;第一个关闭初始'
,第二个启动一个新的引用字符串,所以你的脚本相当于
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';"