Аргумент куста с использованием подстановки переменных (-d | --define) не работает со строковым аргументом

Когда я запускаю сценарий улья с помощью команды

улей -d arg_partition1 = "p1" -f test.hql

Возвращает ошибку

FAILED: SemanticException [Error 10004]: Line 3:36 Недопустимый псевдоним таблицы или ссылка на столбец "p1": (возможные имена столбцов: line, partition1)

Скрипт с именем test.hql

DROP TABLE IF EXISTS test;
CREATE EXTERNAL TABLE IF NOT EXISTS test (Line STRING)
    PARTITIONED BY (partition1 STRING);
ALTER TABLE test ADD PARTITION (partition1="p1") LOCATION '/user/test/hive_test_data';
SELECT * FROM test WHERE partition1=${arg_partition1};

Если я изменю раздел на целое число, он будет работать нормально и вернет правильные результаты.

Как запустить сценарий Hive со строковым аргументом?


person pettinato    schedule 18.07.2013    source источник


Ответы (1)


Вам нужно будет избегать кавычек при вызове улья, например -d arg_partition1=\"p1\", чтобы это работало.

Однако я не понимаю, зачем вам в любом случае нужно добавлять кавычки в заменяющую строку. Предположительно, вы знаете типы данных ваших полей при написании запроса, поэтому, если partition1 является строкой, включите в запрос кавычки, такие как WHERE partition1="${arg_partition1}";, а если это целое число, просто оставьте их полностью.

person jkovacs    schedule 18.07.2013