在对时间要求比较高的流程中,往往会希望获取最新的分区数据。如果采用 select max(分区) as p from table_name; 获取分区,如果表很大时,时间代价很大;另外,如果直接从分区路径判断,虽然速度也会很快,当hive如何数据正在插入更新时被判断,极有可能会出现job还在进行,而判断已经结束,导致错误。
有一个可行的策略,对上一个任务做依赖调度,并且采用show partitions 输出所有的分区。利用shell语句,获得最大分区值。(注:准实时情况下,一般对性能有要求,借助于shell脚本可以有效避免使用动态分区等操作)
脚本如下:
#!/bin/bash
set -enowtime=`date -d today "+%Y-%m-%d %H:%M"` #真实环境
v_today=${nowtime:0:10}
partition="set hive.cli.print.header=flase;
show partitions database_name.table_name;"
#h=` hive -S -e "$partition"` #获取Hive表信息
v_partition=`hive -S -e "$partition" | grep d="${v_today}" | sort | tail -n 1` #取最新的分区
h=${v_partition:15:2}
echo $h