Как я могу вызвать запрос в переменной при объявлении его в улье?

#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}')