Команда Hive ALTER для удаления раздела со значениями старше 24 месяцев - PullRequest
1 голос
/ 09 мая 2020

У меня есть таблица куста (потребительские_данные) с столбец раздела 'val_dt' , который является строка столбец со значениями в формате даты 'yyyy-MM' .

У меня несколько разделов в таблице, от «2015-01» до «2020-04». Каждый месяц данные добавляются в таблицу постепенно, поэтому следующим добавленным разделом будет «2020-05».

Я хочу удалить разделы , которые старше 24 месяцев . Это удаление раздела выполняется каждый месяц, чтобы сохранить данные только за последние 24 месяца.

Как можно создать команду ALTER для удаления разделов со значениями старше 24 месяцев.

Я выполнил приведенный ниже запрос beeline с образцами данных через оболочку linux, но он удалил все разделы .

beeline --hivevar var_drop_date="$(date -d "24 months ago" '+%Y-%m')" -e 'ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= date "${hivevar:var_drop_date}")'
Partition present before running the query:
val_dt=2016-01
val_dt=2017-01
val_dt=2019-01
val_dt=2020-01

Partitions present after running the query:
None 

Required output: 
val_dt=2019-01
val_dt=2020-01

1 Ответ

1 голос
/ 09 мая 2020

Вам не нужно hivevar при использовании опции -e, переменные можно подставлять напрямую. Также вам не нужна дополнительная функция date в спецификации раздела, если раздел имеет формат yyyy-MM, вы можете рассчитать дату в требуемом формате только с помощью оболочки. Также 'yyyy-MM' должен быть в кавычках, потому что раздел - это строка, например: val_dt<='2018-05'

Попробуйте это:

beeline -e "ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= '$(date -d "24 months ago" '+%Y-%m')')"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...