Вычислять статистику таблиц каждый раз, когда вы меняли данные.
ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS FOR COLUMNS;
Включить ООТ и статистика автоматический сбор:
set hive.cbo.enable=true;
set hive.stats.autogather=true;
Используйте эти параметры, чтобы ООТ, используя статистические данные:
set hive.compute.query.using.stats=true;
set hive.stats.fetch.partition.stats=true;
set hive.stats.fetch.column.stats=true;
Если ничего не помогает, я бы рекомендовал применить этот подход к поиску Последнее разделение быстро: Разберите максимальный раздел ключа, используя сценарий оболочки из таблицы. Приведенная ниже команда будет распечатывать все пути к папке, сортировать, принимать последние отсортированные данные, принимать последнее имя вложенной папки, разбирать имя папки разделов и извлекать значение.
last_partition=$(hadoop fs -ls $TABLE_DIR/* | awk '{ print $8 }' | sort -r | head -n1 | cut -d/-f [number of partition subfolder in the path here] | cut -d = -f 2
Затем используйте $last_partition
переменную передать в сценарий, как
-hiveconf last_partition=$last_partition