получить текущую дату и установить ее в переменную, чтобы использовать ее в качестве имени таблицы в HIVE - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу получить текущую дату как YYMMDD, а затем установить ее в переменную, чтобы использовать ее в качестве имени таблицы.

Вот мой код:

set dates= date +%Y-%m-%d;
CREATE EXTERNAL TABLE IF NOT EXISTS dates(
    id STRING,
    region STRING,
    city STRING)

Но этот метод не работает, потому что кажется, что назначения неправильные. Есть идеи?

1 Ответ

0 голосов
/ 13 ноября 2018

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);"
...