zoukankan      html  css  js  c++  java
  • hive只扫描一遍表实现查询不同条件的数据

    工作中有一张类型信息表,有时候需要不同的类型信息需要多次扫描这张表,表很大的时候影响效率。

    优化前:

    select t1.fa_id,t2.srch_char_val,t3.srch_char_val from 
    (select fa_id from cisadm_ods.ods_cis_ci_fa_df  ) t1
    left join 
    (select * from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)="aaaa") t2 
    on t1.fa_id=t2.fa_id
    left join 
    (select * from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)="bbbb") t3
    on t1.fa_id=t3.fa_id

    优化后:

    使用collect_set(if())这种方式对值进行条件聚合,然后把值从set中取出

    select  fa_id
    ,collect_set(if(trim(char_type_cd) = "WXSFCG",srch_char_val,null))[0]
    ,collect_set(if(trim(char_type_cd) = "ZYLX",srch_char_val,null))[0]
    from cisadm_ods.ods_cis_ci_fa_char_df
    where trim(char_type_cd) in ("WXSFCG","ZYLX") 
    group by fa_id
  • 相关阅读:
    架构师图谱
    P3398 仓鼠找sugar
    NOIP 2017小凯的疑惑
    P2568 GCD
    自动AC机
    qbxt国庆刷题班 游记&总结
    【学习笔记】manacher算法
    [ZROI]分组
    BSGS与扩展BSGS
    Crt and ExCrt
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14260594.html
Copyright © 2011-2022 走看看