如果我在具有特定分区列的表上运行下面的hive查询,我想确保配置单元不执行全表扫描,只是从元数据本身中找出结果。有没有办法启用它?
Select max(partitioned_col) from hive_table ;
现在,当我运行此查询时,它的启动映射会减少任务,我确信它会进行数据扫描,同时它可以很好地计算出元数据本身的值。
答案 0 :(得分:3)
每次更改数据时计算表统计信息。
ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS FOR COLUMNS;
启用CBO和统计信息自动收集:
set hive.cbo.enable=true;
set hive.stats.autogather=true;
使用这些设置可以使用统计信息启用CBO:
set hive.compute.query.using.stats=true;
set hive.stats.fetch.partition.stats=true;
set hive.stats.fetch.column.stats=true;
如果没有任何帮助我建议您应用此方法快速查找上一个分区: 使用表位置中的shell脚本解析最大分区键。 下面的命令将打印所有表文件夹路径,排序,采取最新排序,获取最后一个子文件夹名称,解析分区文件夹名称和提取值。
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