2017-01-31 13 views
4

В случае, если я запускаю нижеприведенный запрос куста на таблицу с определенным секционированным столбцом, я хочу убедиться, что куст не выполняет полное сканирование таблицы и просто вычисляет результат из самих метаданных. Есть ли способ включить это?Как настроить улей на запрос метаданных?

Select max(partitioned_col) from hive_table ; 

Прямо сейчас, когда я бег этого запроса, его запуск на карте уменьшить задачи, и я уверен, что его делает данные сканирования в то время как он может очень хорошо понять значение из самих метаданных.

ответ

3

Вычислять статистику таблиц каждый раз, когда вы меняли данные.

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