我正在尝试在Azure HDInsight LLAP Hive群集中进行配置单元多联接查询。
运行约20分钟后给出 OutOfMemory 异常。
查询:
创建表tt作为SELECT Given_qad_sedol作为Sedol7,f.ws_cd,f.ws_id, f.cntry_cd,f.cntry_name,f.entity_name,f.stmt_sub_typ, f.stmt_sub_typ_desc,f.stmt_typ,f.stmt_typ_desc,f.item,f.item_name, f.short_mnem,f.item_mnem,coalesce(f1.frq,f.frq)作为frq, Coalesce(f1.frq_desc,f.frq_desc)as frq_desc,f.yr,f.seq, f.fiscal_per_end_date,concece(f1.erng_rpt_date,f.erng_rpt_date)为 erng_rpt_date,f.per_update_flg,f.per_update_desc,f.per_srce, f.reported_curr,coalesce(f1.reported_val,f.reported_val)为 report_val,f.exch_rate,f.ws_curr,f.unit_typ FROM imdl_irdp_dev.cur_std_fundamentals f加入 imdl_irdp_dev.cur_ws_comp_map cm ON f.ws_cd = cm.ws_cd加入 imdl_irdp_dev.cur_scrty_sedol_chg_hstry的ON cm.qad_scrty_cd = s.qad_scrty_cd AND cm.typ = s.typ左联接 imdl_irdp_dev.cur_std_fundamentals on f.ws_cd = f1.ws_cd AND f.item = f1.item AND f.yr = f1.yr AND f.seq = f1.seq AND f1.frq ='B ' 按yr,seq,stmt_typ_desc,item;
突出显示的表大约有15亿条记录。我们无法更改查询,因为这是业务需求。但是我们可以优化它,前提是查询结果不应更改。
我也尝试过以下选项,但还是没有运气。
set mapreduce.map.memory.mb=8000;
set mapreduce.map.java.opts=-Xmx46080m;
set mapreduce.reduce.memory.mb=8000;
set mapreduce.reduce.java.opts=-Xmx7000m;
set hive.tez.container.size=8000;
set hive.tez.java.opts=-Xmx7000m;
set hive.auto.convert.join.noconditionaltask.size=1000000000;
set set dfs.blocksize=1073741824;
有什么方法可以优化此查询?
答案 0 :(得分:0)
您可以遵循2种最佳做法。仅选择几列时,引入分区以读取必要的数据并将文件格式更改为ORC。这将减少数据负载量,并使您的执行速度更快。 在cur_std_fundamentals上应用过滤器(f1.frq ='B')时,记录数是多少。是否有分区取决于数据分布。
您还可以通过执行自联接1st来中断查询并查看性能。
您使用了任何压缩方式吗?
答案 1 :(得分:0)
重新排序联接后效果很好。
选择“ B07C796”作为 Sedol7,f2.ws_cd,f2.cntry_name,f2.entity_name,f2.stmt_sub_typ_desc,f2.stmt_typ,f2.item,f2.item_mnem,coalesce(f3.frq,f2.frq)作为frq,coalesce(f3.frq_ .frq_desc)作为 frq_desc,f2.yr,f2.seq,f2.fiscal_per_end_date,coalesce(f3.erng_rpt_date,f2.erng_rpt_date) 如 erng_rpt_date,f2.per_update_flg,f2.per_update_desc,f2.per_srce,f2.reported_curr,coalesce(f3.reported_val,f2.reported_val) 如所报告的val,f2.exch_rate,f2.ws_curr,f2.unit_typ,f2.ws_val (选择 f.ws_cd,f.ws_id,f.cntry_cd,f.cntry_name,f.entity_name,f.stmt_sub_typ,f.stmt_sub_typ_desc,f.stmt_typ,f.stmt_typ_desc,f.item,f.item_name,f.short_mnem,f。 item_mnem,f.frq,f.frq_desc,f.yr,f.seq,f.fiscal_per_end_date,f.erng_rpt_date,f.per_update_flg,f.per_update_desc,f.per_srce,f.reported_curr,f.reported_val,f.exch_rate f.ws_curr,f.unit_typ,f.ws_val 从(选择comp_map.ws_cd从(选择qad_scrty_cd,典型 imdl_irdp_dev.cur_scrty_sedol_chg_hstry其中given_qad_sedol在 (substr('B07C796',0,6)))chg_hstry连接(选择ws_cd,typ, 来自imdl_irdp_dev.cur_ws_comp_map的qad_scrty_cd)comp_map ON chg_hstry.qad_scrty_cd = comp_map.qad_scrty_cd AND chg_hstry.typ = comp_map.typ)f1连接(选择 ws_cd,ws_id,cntry_cd,cntry_name,entity_name,stmt_sub_typ,stmt_sub_typ_desc,stmt_typ,stmt_typ_desc,item,item_name,shortmnem,item_mnem,frq,frq_desc,yr,seq,fi_per_date_re_rate,re_port_rate_rece,re_port_rate, ws_curr,unit_typ,ws_val 来自imdl_irdp_dev.cur_std_fundamentals_part在2018年与 2018 AND frq ='A'AND stmt_typ in('IS','BS','CF','Other'))f ON f.ws_cd = f1.ws_cd)f2左连接(选择frq,frq_desc,erng_rpt_date, report_val,ws_cd,项目,yr,seq来自 imdl_irdp_dev.cur_std_fundamentals_part其中2018年与2018年之间 AND frq ='B'AND stmt_typ in('IS','BS','CF','Other'))f3 ON f2.ws_cd = f3.ws_cd AND f2.item = f3.item AND f2.yr = f3.yr AND f2.seq = f3.seq 订单由f2.yr,f2.seq,f2.item;