Самый простой способ - извлечь дату из текущего столбца раздела и загрузить в новую таблицу.
Создать новую таблицу:
create table new (
...
)
partitioned by (partition_date date);
Затем вставить перезапись из старой таблицы:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table new partition(partition_date )
select
col1,
col2,
...
coln,
--extract hours if you need this column
substr('old_partition_col',12,2) hour,
--partition column is the last one
date(concat_ws('-',substr(old_partition_col,1,4),substr(old_partition_col,6,2),substr(old_partition_col,9,2))) as partition_date
from old_table;
В качестве альтернативы вы можете извлечь дату, используя функции unix_timestamp
и from_unixtime
:
from_unixtime(unix_timestamp(old_partition_col,'yyyy_MM_dd_HH'),'yyyy-MM-dd') as partition_date
Затем удалите старую таблицу и переименуйте новую.