当前有一个日期分区表,分区字段为 ds ,我们需要通过循环每天日期实现把一段日期的数据插入另外一张表中,建表语句如下:
-- 建表语句CREATE TABLE crm_user_info ( cust_no string COMMENT '客户编号', cust_name string COMMENT '客户姓名', gender string COMMENT '客户性别',) COMMENT '客户信息表'partitioned by (ds string)stored as orc tblproperties ('orc.compress'='SNAPPY');
注意:此处可以通过查询分区的方式将多个分区一次性插入,该种方式仅为演示该脚本的实现
#!/bin/shbegin_date=20211014end_date=20220131# shellcheck disable=SC2034this_script_name=${0##*/}exitCodeCheck() { if [ $1 -gt 0 ]; then echo '${this_script_name} fail exit_code=$1,reason: $2' exit $1 else echo 'shell execute success' fi}# shellcheck disable=SC2034for i in `seq 1 300`; do # shellcheck disable=SC2039 if [[ ${begin_date} -gt ${end_date} ]]; then break fi echo "start run ${begin_date}" hive -e " INSERT OVERWRITE TABLE crm_user_info_temp partition(ds = '${begin_date}') SELECt * FROM crm_user_info WHERe ds = '${begin_date}' " result=$? exitCodeCheck $result begin_date=$(date -d "${begin_date} +1 day" +%Y%m%d)doneecho ">>>>>>>>>>>>>>> Done at `date +"%F %H:%M:%S"` <<<<<<<<<<<<<<<"exit 0