#shell #hadoop #hive #hiveql
#оболочка #hadoop #улей #hiveql
Вопрос:
Как я могу вызвать запрос в переменной при объявлении его в улье? Я создаю сценарий оболочки для удаления разделов на предыдущую дату, поэтому в файле.я использую hql :
Alter table table_name drop partition column >= ‘datesub(current_date-1)’;
Но это не работает, поэтому я попытался объявить условие в переменной, а затем вызвать здесь. Поэтому я сначала пытаюсь объявить переменную, а затем вызвать ее в запросе :
set var1= Select date_sub(current_date, 1)
Alter table table_name drop partition column >= ‘${hoveconf:var1}’;
Но это не работает, потому что переменная объявлена неправильно. Итак, как объявить запрос в переменной?
Ответ №1:
Hive не вычисляет переменные перед подстановкой, переменные подставляются как есть. Также функции и подзапросы не разрешены в спецификации раздела.
Решение состоит в том, чтобы вычислить переменную в оболочке и передать ее скрипту:
bash$ dt=$(date -d '-1 day' %Y-%m-%d)
bash$ hive -e "ALTER TABLE table_name drop partition (column >='$dt')"
Или, если вы предпочитаете вызывать файл сценария, затем передайте переменную hiveconf:
bash$ dt=$(date -d '-1 day' %Y-%m-%d)
bash$ hive -hiveconf dt="$dt" -f script_name
#В сценарии использовать '${hiveconf:dt}'
:
ALTER TABLE table_name drop partition (column >='${hiveconf:dt}')