删除Kudu表中小于指定日期字符串的RANGE分区问题及解决方案
问题:删除Kudu表中指定日期前的所有RANGE分区
我需要删除Kudu表中所有分区值小于给定日期字符串的RANGE分区,尝试了以下SQL但无法生效:
alter table test_table drop if exists range partition values < '2010-01-31';
我的Impala版本为2.6x,该版本不支持使用<比较符批量删除分区。由于需要动态执行,无法逐个用=指定分区值,需要实现清除指定日期前所有空Kudu分区的逻辑。
已实现的解决方法:通过Shell脚本动态生成删除SQL
编写脚本先查询出符合条件的分区值,再自动生成对应的批量删除语句:
# 初始化存储删除语句的空字符串 drop_partition_query='' # 定义查询待删除分区的SQL read -d '' drop_query <<EOF select distinct partition_date from test_table where partition_date < '2021-01-01' group by partition_date EOF # 执行Impala查询,获取待删除的分区列表(静默模式,输出以换行分隔) partitions_to_drop=$(${IMPALA_SHELL} -B -q "${drop_query}" --quiet "--output_delimiter= " 2>/dev/null) # 将分区列表转换为数组 partitions_array=( $partitions_to_drop ) # 遍历数组,拼接每个分区的删除SQL for (( p=0; p< ${#partitions_array[@]}; p++ )) do drop_partition_query+="ALTER TABLE test_table DROP RANGE PARTITION VALUE='${partitions_array[$p]}';" done # 最终的drop_partition_query即为需要执行的批量删除SQL
内容的提问来源于stack exchange,提问作者Akanksha_p
相关产品推荐
相关产品推荐

