Удалить раздел с непостоянным значением в Hive - PullRequest
0 голосов
/ 14 июня 2019

Я хочу удалить раздел в Hive, значение которого находится в другой таблице или создается функцией на лету. Например:

ALTER TABLE
    table_1
DROP IF EXISTS
    PARTITION (dt = FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, 63),'yyyy-MM-dd'), 'yyyyMMdd'))

Или как то так:

ALTER TABLE
    table_1
DROP IF EXISTS
    PARTITION (dt = SELECT date FROM table_2 LIMIT 1))

Однако возвращается следующая ошибка:

cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP' in constant

Если я заменю весь вызов на FROM_UNIXTIME() на фиксированный номер, он будет работать нормально. Есть ли способ сделать это без жесткого кодирования значения раздела?

1 Ответ

0 голосов
/ 14 июня 2019

В Hive-cli это не поддерживается, нам нужно использовать сценарий оболочки для этого

Пример сценария:

#!/bin/bash
my_value=$(hive -S -e "select FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, 63),'yyyy-MM-dd'), 'yyyyMMdd')")
echo $my_value
hive -S -e "alter table table_1 drop partition (dt = $my_value)"

Для получения более подробной информации см. это и это ссылки о переменных улья.

...