zoukankan      html  css  js  c++  java
  • hive中行转换成列以及hive相关知识

    Hive语句:
    Join应该把大表放到最后
    左连接时,左表中出现的JOIN字段都保留,右表没有连接上的都为空。对于带WHERE条件的JOIN语句,例如:
    1
    SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)
    2
    WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'
    执行顺序是,首先完成2表JOIN,然后再通过WHERE条件进行过滤,这样在JOIN过程中可能会输出大量结果,再对这些结果进行过滤,比较耗时。可以进行优化,将WHERE条件放在ON后,例如:
    1
    SELECT a.val, b.val FROM a LEFT OUTER JOIN b
    2
    ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')
    
    这个JOIN语句,会生成一个MR Job,在选择JOIN顺序的时候,数据量相比应该是b < c,表a和b基于a.key = b.key1进行连接,得到的结果(基于a和b进行连接的Key)会在Reducer上缓存在buffer中,在与c进行连接时,从buffer中读取Key(a.key=b.key1)来与表c的c.key进行连接。
    另外,也可以通过给出一些Hint信息来启发JOIN操作,这指定了将哪个表作为大表,从而得到优化。例如:
    1
    SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)
    上述JOIN语句中,a表被视为大表,则首先会对表b和c进行JOIN,然后再将得到的结果与表a进行JOIN。
    

      

    hive优化

    group by 数据倾斜

    join数据倾斜

    多个job并行(union all)

    减少job个数

    python代码

    #!/bin/bash
    import sys;

    if __name__=='__main__':
    for line in sys.stdin:
      m=line.strip().split(' ')
      print m[0],' ','huaxue',' ',m[1]
      print m[0],' ','shuxue',' ',m[2]
      print m[0],' ','wuli',' ',m[3]

    select transform(name,huaxue,shuxue,wuli) using 'python process.py' as (name,leibie,score) from wxl_t3;

  • 相关阅读:
    迭代模型
    螺旋模型
    瀑布模型
    V模型
    codeforces411div.2
    专题1:记忆化搜索/DAG问题/基础动态规划
    Python
    字符串的相关操作方法
    Python基本数据类型
    编码
  • 原文地址:https://www.cnblogs.com/wuxiangli/p/5818367.html
Copyright © 2011-2022 走看看