如何调整配置单元以查询元数据?
How to tune hive to query metadata?
万一我 运行 在 table 上使用特定分区列进行下面的配置单元查询,我想确保配置单元不进行完整的 table 扫描并找出元数据本身的结果。有什么方法可以启用它吗?
Select max(partitioned_col) from hive_table ;
现在,当我运行这个查询时,它启动了 map reduce 任务,我确信它在进行数据扫描,同时它可以很好地从元数据本身中找出值。
每次更改数据时计算 table 统计数据。
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;
如果没有任何帮助我建议应用这种方法来快速找到最后一个分区:
使用 table 位置的 shell 脚本解析最大分区键。
下面的命令将打印所有 table 文件夹路径,排序,采用最新排序,采用最后一个子文件夹名称,解析分区文件夹名称并提取值。您只需要初始化 TABLE_DIR
变量并输入 the number of partition subfolder in the path
:
last_partition=$(hadoop fs -ls $TABLE_DIR/* | awk '{ print }' | sort -r | head -n1 | cut -d / -f [number of partition subfolder in the path here] | cut -d = -f 2
然后使用 $last_partition
变量作为
传递给您的脚本
hive -hiveconf last_partition="$last_partition" -f your_script.hql
万一我 运行 在 table 上使用特定分区列进行下面的配置单元查询,我想确保配置单元不进行完整的 table 扫描并找出元数据本身的结果。有什么方法可以启用它吗?
Select max(partitioned_col) from hive_table ;
现在,当我运行这个查询时,它启动了 map reduce 任务,我确信它在进行数据扫描,同时它可以很好地从元数据本身中找出值。
每次更改数据时计算 table 统计数据。
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;
如果没有任何帮助我建议应用这种方法来快速找到最后一个分区:
使用 table 位置的 shell 脚本解析最大分区键。
下面的命令将打印所有 table 文件夹路径,排序,采用最新排序,采用最后一个子文件夹名称,解析分区文件夹名称并提取值。您只需要初始化 TABLE_DIR
变量并输入 the number of partition subfolder in the path
:
last_partition=$(hadoop fs -ls $TABLE_DIR/* | awk '{ print }' | sort -r | head -n1 | cut -d / -f [number of partition subfolder in the path here] | cut -d = -f 2
然后使用 $last_partition
变量作为
hive -hiveconf last_partition="$last_partition" -f your_script.hql