如何调整配置单元以查询元数据?

时间:2017-01-31 00:22:19

标签: performance hadoop hive hdfs tez

如果我在具有特定分区列的表上运行下面的hive查询,我想确保配置单元不执行全表扫描,只是从元数据本身中找出结果。有没有办法启用它?

Select max(partitioned_col) from hive_table ;

现在,当我运行此查询时,它的启动映射会减少任务,我确信它会进行数据扫描,同时它可以很好地计算出元数据本身的值。

1 个答案:

答案 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