with as insert overwrite table

习惯写sql的时候把insert overwrite table 写在首行,但是在使用with 语法的时候报错:

Error while compiling statement: FAILED: ParseException line 2:0 cannot recognize input near 'with' 't1' 'as' in statement

最初还以为是insert时不支持with语法,后来看with语法的文档时才发现正确用法是:with as xxx (xxx) insert overwrite table select xxx.

原sql:

insert overwrite table iptv_mis_car_registration_ELFV
with  t1 as (select mis,production_month,cnt    from
    iptv_mis_car_registration_CTED )
select 0 as mis,production_month,sum(case when mis>=0 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 1 as mis,production_month,sum(case when mis>=1 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 2 as mis,production_month,sum(case when mis>=2 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 3 as mis,production_month,sum(case when mis>=3 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 4 as mis,production_month,sum(case when mis>=4 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month

修改后的sql:

 

with  t1 as (select mis,production_month,cnt    from
    iptv_mis_car_registration_CTED )
insert overwrite table iptv_mis_car_registration_ELFV
select 0 as mis,production_month,sum(case when mis>=0 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 1 as mis,production_month,sum(case when mis>=1 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 2 as mis,production_month,sum(case when mis>=2 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 3 as mis,production_month,sum(case when mis>=3 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 4 as mis,production_month,sum(case when mis>=4 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 5 as mis,production_month,sum(case when mis>=5 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 6 as mis,production_month,sum(case when mis>=6 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 7 as mis,production_month,sum(case when mis>=7 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 8 as mis,production_month,sum(case when mis>=8 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month union all
select 9 as mis,production_month,sum(case when mis>=9 then cnt else 0 end) cnt  from t1 GROUP BY production_month  ORDER BY production_month

 

你可能感兴趣的:(hive,mysql)