前提:原始表和目标表的行数一致(这里DWS的一行转换成ADS的多行,但是多行是一个REC记录)
drop table ads.ads_distinct_zhibiao_nian_diqu;
create table ads.ads_distinct_zhibiao_nian_diqu
(
top string,
years string,
zheng_shi_indicator string,
zheng_shi_indicator_old string,
di_qu_dai_ma string,
di_qu_deng_ji string,
di_yu_lei_xing_dai_ma string,
reportgrouper string,
reportgrouper_old string,
zheng_shi_value string,
zheng_shi_unit string,
zheng_shi_value_old string,
zheng_shi_unit_old string,
wen_ben_wen_jian_ming string,
nian_jian_zhong_wen_ming string,
nian_jian_nian_fen string,
tiao_mu_ti_ming string,
bian_hao string,
ru_ku_biao_shi string,
yin_shua_ye_ma string,
fu_qin_jie_dian string,
guo_biao_di_yu_dai_ma string
)
row format delimited
fields terminated by "\n"
;
insert overwrite table ads.ads_distinct_zhibiao_nian_diqu
select
"<REC>" as top,
concat("<年份>=",years) years ,
concat("<正式指标>=",zheng_shi_indicator) zheng_shi_indicator,
concat("<正式指标_OLD>=",zheng_shi_indicator_old) zheng_shi_indicator_old,
concat("<地区代码>=",di_qu_dai_ma) di_qu_dai_ma,
concat("<地区等级>=",di_qu_deng_ji) di_qu_deng_ji,
concat("<地域类型代码>=",di_yu_lei_xing_dai_ma) di_yu_lei_xing_dai_ma,
concat("<REPORTGROUPER>=",reportgrouper) reportgrouper,
concat("<REPORTGROUPER_OLD>=",reportgrouper_old) reportgrouper_old,
concat("<显示数值>=",zheng_shi_value) zheng_shi_value,
concat("<显示单位>=",zheng_shi_unit) zheng_shi_unit,
concat("<显示数值_OLD>=",zheng_shi_value_old) zheng_shi_value_old,
concat("<显示单位_OLD>=",zheng_shi_unit_old) zheng_shi_unit_old,
concat("<文件名X>=",wen_ben_wen_jian_ming) wen_ben_wen_jian_ming,
concat("<年鉴中文名X>=",nian_jian_zhong_wen_ming) nian_jian_zhong_wen_ming,
concat("<年鉴年份X>=",nian_jian_nian_fen) nian_jian_nian_fen,
concat("<条目题名X>=",tiao_mu_ti_ming) tiao_mu_ti_ming,
concat("<编号X>=",bian_hao) bian_hao,
concat("<入库标识X>=", ru_ku_biao_shi) ru_ku_biao_shi,
concat("<印刷页码X>=",yin_shua_ye_ma) yin_shua_ye_ma,
concat("<父亲节点X>=",fu_qin_jie_dian) fu_qin_jie_dian,
concat("<国标地域代码>=",guo_biao_di_yu_dai_ma) guo_biao_di_yu_dai_ma
from
dws.dws_distinct_zhibiao_nian_diqu
;
查看该dws表,并选择一个文件
计算这个文件的条数
也就是说276m的文件为82万条,那可以计算出500万条的大小为,400万的大小为
(因为我们需要的结果介于400万条到500万条之间)
276M*500/82=1682M
276M*400/82=1346M
通过设置读入的切片的大小可以达到想要的结果,再运行前面的sql即可
set mapred.max.split.size=1682000000;
--切片的最大值
set mapred.min.split.size=1346000000;
--切片的最小值
set mapred.min.split.size.per.node=1346000000;
--每个节点切片的最小值
set mapred.min.split.size.per.rack=1346000000;
--每个机架切片的最小值
会将所有切片合并或切割成咱们指定的大小