ошибки запроса, если они запущены из сценария оболочки

Я могу выполнить этот запрос нормально

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

Если я не запускаю его из сценария оболочки bash. я получаю эту ошибку

#!/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

Я пробовал использовать двойные кавычки, без кавычек и в нижнем регистре, но безуспешно.


person user3508766    schedule 16.03.2018    source источник
comment
Вы не можете поместить одинарную кавычку внутри строки в одинарных кавычках.   -  person chepner    schedule 16.03.2018


Ответы (1)


Одинарные кавычки нельзя включать в строку в одинарных кавычках в оболочке. Одинарные кавычки вокруг 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';"
person chepner    schedule 16.03.2018