Hive не вычисляет переменные, он подставляет их как есть, в вашем случае это будет именно эта строка date +%Y-%m-%d
. Также невозможно использовать UDF, например current_date()
вместо имени таблицы в DDL.
Решение - вычислить переменную в оболочке и передать ее в Hive:
В оболочке
dates=$(date +%Y_%m_%d);
hive --hivevar date="$dates" -f myscript.hql
В сценарии:
use mydb; create table if not exists tab_${hivevar:date} (id int);
Или вы можете выполнить скрипт hive из командной строки, используя hive -e
, в этом случае переменную можно заменить с помощью shell:
dates=$(date +%Y_%m_%d);
hive -e "use mydb; create table if not exists tab_${dates} (id int);"